@ledsun blog

Hのキーがhellで、Sのキーがslaveだ、と彼は思った。そしてYのキーがyouだ。

wordleの候補をgrepするRubyスクリプト

Wordle - The New York Times を解くとき、次のようにgrepしています。

ledsun@MSI:~/wordle_rb►grep -e '^\w\w\wt\w$' /usr/share/dict/words | grep -v '[o
sclh]' | grep a | grep e | grep r
Berta
Greta
Harte
grate
irate
prate

これをRubyスクリプトに書き換えました。

exclude, included, correct_spots = ARGV

correct_spots = if correct_spots
                  correct_spots.gsub(/\*/, '[a-z]')
                else
                  '[a-z]{5}'
                end

dict = File.open('/usr/share/dict/words') do |f|
  f.readlines
end

matched = dict.grep(/^#{correct_spots}$/)
              .grep_v(/[#{exclude}]/)

included.chars.each do |char|
  matched = matched.grep(/#{char}/)
end

matched.each do |value|
  value.chars.each do |char|
    if included.include? char
      print "\e[#{31}m#{char}\e[0m"
    else
      print char
    end
  end
end

実行すると次のように候補が得られます。

ledsun@MSI:~/wordle_rb►ruby main.rb osclh aer '***t*'
grate
irate
prate

色づけもしています。

Rubyスクリプトの実行結果

引数の設計は適当です。 '*'はクォート必須になるから使いにくいかなあ?などと思っています。

grep使えばいいので、べつにRubyスクリプトにしなくても良かったです。 現に今までしていません。 24時過ぎて、wordleの新課題でているのには気がついているが、PCを開くのは面倒くさいことがたまにあります。 スマートフォンでやれば良いんですが、スマートフォンではgrepできません。 RubyスクリプトにするとWebAssemblyでブラウザで動かせます。 ブラウザで動けばスマートフォンからgrepできます。 やった!夜中でも出先でもwordleできます。

実際は目的と手段は逆です。 WebAssemblyを使ってブラウザでRubyスクリプトを動かすネタで、実装が簡単で自慢できそうな奴を探して出てきたアイデアです。

参考