先のエントリーで書いた通り本当にAROSEが1回目の単語として最適なのか気になって、位置による出現頻度をスコアとして計算してみた。
#!/usr/bin/env python3
import string
from nltk.corpus import words
import re
word_list = [x for x in words.words() if len(x) == 5]
char_dict = {x: {c: 0 for c in string.ascii_lowercase} for x in range(5)}
for w in word_list:
for i, c in enumerate(w):
char_dict[i][c.lower()] = char_dict[i][c.lower()] + 1
repat = re.compile('^[aerois]{5}$')
for w in word_list:
match_res = repat.match(w)
if match_res != None:
score = 0
for i,c in enumerate(w):
score = score + char_dict[i][c.lower()]
print("Word: {}, Score: {}".format(w, score))
スコアが高い順に並べると以下のようになる。
soree | 6584 |
sarra | 5823 |
sarsa | 5766 |
reree | 5555 |
aerie | 5494 |
seise | 5481 |
sorra | 5363 |
saros | 5299 |
serra | 5229 |
raise | 5180 |
serai | 5104 |
arrie | 5087 |
resee | 4972 |
serio | 4953 |
airer | 4941 |
eerie | 4938 |
siris | 4839 |
raser | 4837 |
rasse | 4730 |
easer | 4640 |
arise | 4538 |
arose | 4464 |
上位の単語はスペルが重複しているので、RAISEが最適っぽい。RAISEの下位にあるSERAIは「宿舎」だそうで、知らない単語だったがWORDLEで弾かれなかった。
RAISEで全滅した場合、次はCONKY「鼻が大きい」がスコア4560、CONKYも全滅の場合、THUMP「ゴツン(擬音)」 (2315)しか残らない。なんせ母音字が無い。
RAISEでRがヒットした場合、次はRUNTY「小型の」(4080)、Rのみが含まれていた場合、次はCORNY「古くさい」(5164)となりそうだ。
ここで挙げた単語はいずれもWORDLEに弾かれなかったので、結構マイナーな単語もWORDLEには含まれている可能性が高い。こいつは結構手強いのでは???
追記(2022.02.01):WordleのJavaScirptに全ての単語が含まれているので、同様に数値化してみたところRAISEが1位なのは変わりが無い。
RAISEが1文字もヒットしなかった場合はPONTY(人名・メルロ=ポンティ)が2つ目の単語、RSが少なくとも1文字含まれ、AIEが1文字も含まれない、つまり母音字となるOUYを次の単語に含ませる場合、POUTY「ふくれっ面」がベストだった。
もし、RAISE / PONTYで1文字もヒットしなければ、残りはCULCH, MULCH, GULCH, HUDUD, BUCKU, CLUCK, CHUCK, BUCHU, BLUFF, CHUFF, JUGUM, FLUFF, KUDZUの13単語しか無い。このうちスペルに重複が無いのは、MULCH, GULCHの2単語のみ。
追記:もっともっと考えてみた。