15分

http://ameblo.jp/programming/entry-10001212615.html
via
15 分のもやってみた - kozima の日記 - cadr group
データが扱える人を探せ! - 象徴ヶ淵

LINQチュートリアル問題みたいな。
今度はsplitの書き直し含めて時間以内になんとか。

def(String.split)^(sep):
  if (sep == ""):
    .to_list()
   else:
    s := .istring()
    let(rec)^(&opt l, w=""):
      aif(s.readc()):
        if (it == sep):
          rec([w | l], "")
         else:
          rec(l, w+it)
       else:
        [w | l].reverse() 

def(whoCanSee)^(users, abilities, data):
  iota(users.length()).map^(i){
    abilities[i].split(" ").filter^(a){a==data} && [users[i]]
  }.concat()


whoCanSee(["kathy", "john", "dan", "steve", "cheryl", "tony"],
          ["users data", "data orders", "users permissions",
           "system users controls", "default", "admin users"],
          "users")
# => ["kathy", "dan", "steve", "tony"]

やっぱり余計なconsing多いけどキニシナイ