任天堂の参考課題
採用情報:キャリア採用 - ネットワークアプリケーションエンジニア(参考課題)
見かけたのでやってみたら、こんな時間に・・。
どうでもいいけど、ウチの会社も採用ページにこういうのを載せるくらいなエンジニアリングの会社になって欲しい。
---
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
enddef 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
enddef 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
endkeywords = ['インターネト', 'プログラミングル', '東強都', '任人堂', '東京特許許許可局', 'マロオブラザーズ', 'イーサネッット', 'コソトローラ']
max_size = keywords.collect{|i| i.split(//).size}.sort.reverse.first + 1
min_size = keywords.collect{|i| i.split(//).size}.sort.first - 1hash = 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(" => ")
}
インターネト => インターネット
プログラミングル => プログラミング
東強都 => 東京都
任人堂 => 任天堂
東京特許許許可局 => 東京特許許可局
マロオブラザーズ => マリオブラザーズ
イーサネッット => イーサネット
コソトローラ => コントローラ
| 固定リンク
この記事へのコメントは終了しました。
コメント
三便宝:http://www.feelkanpou.com/product/三便宝.html
威哥王:http://www.feelkanpou.com/product/威哥王.html
花痴:http://www.feelkanpou.com/product/花痴催情.html
巨人倍増:http://www.feelkanpou.com/product/巨人倍増.html
威哥王:http://www.kanposky.com/product/55.html
三便宝:http://www.kanposky.com/product/349.html
花痴:http://www.kanposky.com/product/392.html
ru486:http://www.kanposky.com/product/408.html
投稿: 巨人倍増 | 2012.11.09 16:52
威哥王:http://www.kanpocom.com/pro/weigewang.html
巨人倍増:http://www.kanpocom.com/pro/jurenbeiceng.html
三便宝:http://www.kanpocom.com/pro/satibo-capsules5.html
紅蜘蛛:http://www.kanpocom.com/pro/hong-zhi-zhu.html
三便宝:http://www.hellokanpo.com/view/satibo-capsules.html
巨人倍増:http://www.hellokanpo.com/view/jurenbeiceng.html
威哥王:http://www.hellokanpo.com/view/weigewang.html
投稿: 巨人倍増 | 2012.11.09 16:53
紅蜘蛛:http://www.86and81.com/product/288.html
威哥王:http://www.86and81.com/product/55.html
三便宝:http://www.86and81.com/product/350.html
巨人倍増:http://www.86and81.com/product/12.html
巨人倍増:http://www.yahookanpou.com/product/jurenbeizenggouqi.html
紅蜘蛛:http://www.shanghaikanpo.com/view/1195.html
紅蜘蛛:http://www.001kanpo.com/product/228.html
投稿: 巨人倍増 | 2012.11.09 16:53
レーベンシュタイン距離
https://ja.wikipedia.org/wiki/%E3%83%AC%E3%83%BC%E3%83%99%E3%83%B3%E3%82%B7%E3%83%A5%E3%82%BF%E3%82%A4%E3%83%B3%E8%B7%9D%E9%9B%A2
投稿: | 2020.02.26 20:39