« ボックスヒル松戸がなくなるのか・・ | トップページ | ココログ広場はどれくらい「重い」のか。 »

2012.03.11

任天堂の参考課題

採用情報:キャリア採用 - ネットワークアプリケーションエンジニア(参考課題)

見かけたのでやってみたら、こんな時間に・・。


どうでもいいけど、ウチの会社も採用ページにこういうのを載せるくらいなエンジニアリングの会社になって欲しい。

---

wikipediaと正規表現の組み合わせの力業。
もっと格好良くやりたいけど、俺じゃあこれが限界だなぁ。

あと、ルーズにサジェストならもっと最適化できるけど、完璧に一語を出すとなるとやっぱり力業になりがち。

DBに突っ込んでそっちにIndexを任せればもっと早くなるけどねぇ。

$KCODE='UTF8' dic = open('./jawiki-20120220-all-titles-in-ns0').read.split("\n")


def search_by_miss(keyword, dic)
pattern = "^.{0,1}#{keyword.split(//).join(".{0,1}")}.{0,1}$"
keyword_size = keyword.split(//).size
dic[keyword_size+1].select{|word|
word.match(/#{pattern}/)
}.sort_by{|i| i.size}.first
end

def search_by_over(keyword, dic)
chars = keyword.split(//)
array = []
chars.size.times{|i|
array.push "#{i == 0 ? '' : chars[0..i-1]}#{i == chars.size ? '' : chars[i+1..-1]}"
}
pattern = "^(#{array.join("|")})$"
keyword_size = keyword.split(//).size
dic[keyword_size-1].select{|word|
word.match(/#{pattern}/)
}.sort_by{|i| i.size}.first
end

def search_by_none(keyword, dic)
chars = keyword.split(//)
array = []
chars.size.times{|i|
array.push "#{i == 0 ? '' : chars[0..i-1]}.#{i == chars.size ? '' : chars[i+1..-1]}"
}
pattern = "^(#{array.join("|")})$"
keyword_size = keyword.split(//).size
dic[keyword_size].select{|word|
word.match(/#{pattern}/)
}.sort_by{|i| num=-1;i.split(//).select{|v| num +=1; v == chars[num]}}.reverse.first
end

keywords = ['インターネト', 'プログラミングル', '東強都', '任人堂', '東京特許許許可局', 'マロオブラザーズ', 'イーサネッット', 'コソトローラ']
max_size = keywords.collect{|i| i.split(//).size}.sort.reverse.first + 1
min_size = keywords.collect{|i| i.split(//).size}.sort.first - 1

hash = Hash.new
(max_size+1).times{|i|
hash[i] = Array.new
}


dic.each{|word|
size = word.split(//).size
if size >= min_size && size <= max_size then
hash[size].push word
end
}

keywords.each{|word|
puts [word, search_by_none(word, hash) || search_by_miss(word, hash) || search_by_over(word, hash)].join(" => ")
}


インターネト => インターネット
プログラミングル => プログラミング
東強都 => 東京都
任人堂 => 任天堂
東京特許許許可局 => 東京特許許可局
マロオブラザーズ => マリオブラザーズ
イーサネッット => イーサネット
コソトローラ => コントローラ

|

« ボックスヒル松戸がなくなるのか・・ | トップページ | ココログ広場はどれくらい「重い」のか。 »

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/22269/54192326

この記事へのトラックバック一覧です: 任天堂の参考課題:

« ボックスヒル松戸がなくなるのか・・ | トップページ | ココログ広場はどれくらい「重い」のか。 »