WORDLE流行ってますね

Python

WORDLEをやってみると、まあ秒で「これはプログラムで解けるのでは?」と思うわけだけど、プログラムで解いてしまっては英単語の勉強にならないということもあって、統計的にどう攻略するのが良いだろうか、という方針で考えてみた。

WORDLEのルールは単純で、6回英単語をトライして5文字からなる英単語を当てれば良いだけなのだけれど、さて最初に入力すべき単語はなんだろう?

Pythonのnltk (Natural Language Toolkit) には辞書もあるので、nltkとnltkのdataをダウンロードしておく。

$ pip3 install nltk
$ python3 -m nltk.downloader all

nltkの英単語辞書に登録されてる単語のうち、長さが5のものを抜き出して数えてみる。

#!/usr/bin/env python3

from nltk.corpus import words

word_list = [x for x in words.words() if len(x) == 5]
char_dict = {c: 0 for c in string.ascii_lowercase}
for w in word_list:
    for c in w:
        char_dict[c.lower()] = char_dict[c.lower()] + 1

[i for i in sorted(char_dict.items(), key=lambda x:x[1])]

まあ、案の定、aが再頻出文字となる。

a5879
e5019
r3640
o3372
i3365
s2954
l2848
n2827
t2807
u2333
c1878
y1870
d1703
m1655
h1639
p1508
b1397
g1319
k1121
w764
f755
v555
z308
j251
x241
q102

上位5つの文字はAEROIなんだけども、どうアナグラムしても英単語にはならない(同じ文字を複数回使うことはできるが最初に入れるのは効率が悪い)。では6位のSを使えば、どうなるかというと、

  • RAISE (3, 1, 5, 6, 2 = 17)
  • AROSE (1, 3, 4, 6, 2 = 16)

となるので、AROSEが最初に入力すべき英単語だろう。

1つ目の単語としてAROSEを入力して、

  • 位置があっていた文字
  • 正解に含まれる文字
  • 正解に含まれない文字

が得られた後、2つ目の単語として入力すべき英単語は上のPythonをちょいちょいと弄って正規表現を使えば一気に絞り込めるわけだが、ここはグッと我慢してそれをやらずに、統計的に確率が高い候補として挙げられる文字のリストだけ作ってみる。

#!/usr/bin/env python3

import string
from nltk.corpus import words

word_list = [x for x in words.words()]
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

print(char_dict)

こんな感じのPythonを実行して得られるリストは以下の通りだった。

1文字目 2文字目 3文字目 4文字目 5文字目
s 1346 a 1837 a 1040 e 1384 e 1472
a 810 o 1377 r 1005 a 1162 y 1379
c 768 e 1243 i 872 i 964 a 1030
b 750 i 999 o 798 n 635 t 760
t 695 u 889 n 789 r 605 r 743
p 613 r 836 e 666 o 586 n 739
m 543 l 618 l 644 l 577 l 599
g 471 h 568 u 563 t 572 s 525
d 467 n 396 t 523 s 548 d 469
r 451 t 257 s 422 u 511 h 431
f 411 p 204 m 410 c 454 o 395
l 410 c 175 d 364 g 333 i 348
h 322 y 160 b 316 d 313 k 339
w 308 m 159 g 312 m 309 m 234
k 286 w 139 c 292 k 247 c 189
u 276 s 113 p 271 p 240 p 180
n 268 d 90 k 183 b 189 g 140
e 254 b 66 v 177 h 179 x 96
o 216 k 66 w 164 v 157 u 94
i 182 g 63 y 145 f 124 f 83
v 167 v 48 h 139 z 99 b 76
j 166 x 39 f 112 y 95 w 61
y 91 z 27 z 84 w 92 z 32
z 66 f 25 x 69 j 31 v 6
q 63 q 15 j 40 x 15 j 1
x 22 j 13 q 22 q 1 q 1

これらを合わせて少しだけ考えてみると以下のようになるんじゃないかと。

  • AROSEで1つもヒットしなかった場合、UNTILが次の候補
  • AROSEでAの位置が正解、他は外れた場合、ADULT辺りがベスト
  • AROSEでAが含まれるが、他は外れた場合、CANTY?

といった具合になる。

上の表を駆使して、君の、君だけのWORDLE攻略を楽しんで欲しい!w

追記:さらに考えてみた

追記:もっともっと考えてみた

タイトルとURLをコピーしました