最近流行りの Wordle に関するメモです。
個人で解析した内容を掲載しています。
基本的に攻略ではなく考察成分のほうが多めです。
やはりパズルゲームなのでその日に思いついた単語から始めたいという思いが強いです。
システマチックに解答することも可能ですが、それをすると面白くないですしね・・・。
※解析にはPythonを使用しております。
最新情報は公式の wordlist_all を参照のこと。
$ curl -sS -o wordlist.txt https://raw.githubusercontent.com/alex1770/wordle/main/wordlist_all
$ python3
items = []
with open('wordlist.txt') as f:
while line := f.readline():
items.append(line.strip())
どの文字が正解に含まれているか調べたい時はなるべく効率よく調べたいものですね。
なので、どの文字が正解に含まれているか調べるために error なんかの単語を使うのは下策だと思います。
逆に、 r の位置を調べたい場合は error といった単語は有用だと思います。
同一文字が1文字も含まれていない単語は 8322個 あります。
大体 64% くらいですかね。
diff = [i for i in filter(lambda x: sum([x.lower().count(c) for c in x.lower()]) == 5, items)]
例えば japan です。
a が2文字含まれています。
ある文字が2文字含まれている単語は 4185個 あります。
大体 32% くらいですかね。
dup1x2 = [i for i in filter(lambda x: sum([x.lower().count(c) for c in x.lower()]) == 7, items)]
例えば error です。
r が3文字含まれています。
ある文字が3文字含まれている単語は 121個 あります。
少ないので書き出しておきましょう。
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
---|---|---|---|---|---|---|---|---|---|
bobby | daddy | eerie | emcee | error | fluff | geese | mammy | melee | mummy |
nanny | ninny | poppy | puppy | rarer | sassy | sissy | tatty | tepee | abaca |
abaka | abaya | added | afara | agama | alaap | alapa | allel | allyl | anata |
araba | asana | asses | belee | besee | bibbs | bubba | bubbe | bubby | cocci |
deere | deeve | diddy | doddy | duddy | duded | eeven | elpee | emeer | epees |
etwee | exeem | exeme | faffs | faffy | feese | feeze | feoff | filii | flaff |
fuffs | fuffy | gelee | glogg | gogga | grrrl | heeze | jeeze | kaama | keeve |
lalls | leese | leeze | levee | lills | lolls | lolly | lulls | momma | mommy |
mumms | neele | neese | neeze | ninon | nonny | nunny | ovolo | pappi | pappy |
peece | peeve | peppy | pewee | pippy | poppa | potoo | pzazz | reede | reeve |
resee | sasse | semee | sessa | sises | sists | stoss | stott | suses | swiss |
tatts | teene | titty | totty | tratt | tutti | tutty | uhuru | urubu | weeke |
weete |
dup1x3 = [i for i in filter(lambda x: sum([x.lower().count(c) for c in x.lower()]) == 11, items)]
例えば level です。
e, l が2文字ずつ含まれています。
異なった2文字が2文字ずつ含まれている単語は 335個 あります。
大体 2.6% くらいですかね。
dup2x2 = [i for i in filter(lambda x: sum([x.lower().count(c) for c in x.lower()]) == 9, items)]
例えば mamma です。
a, m の2文字によって単語が構成されています。
異なった2文字のみで構成されている単語は 9個 しかありません。
少ないので書き出しておきましょう。
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
---|---|---|---|---|---|---|---|---|
mamma | anana | ayaya | cocco | esses | nanna | peepe | susus | taata |
only2l = [i for i in filter(lambda x: sum([x.lower().count(c) for c in x.lower()]) == 13, items)]
特定のアルゴリズムによる暗号文の解読には、文字の出現頻度分析が行われることがあります。
5文字で構成された英単語の文字出現頻度について探ってみましょう。
出現回数順(降順)に並び替えてみると、結果は以下のようになります。
文字 | 出現回数 |
---|---|
s | 6665 |
e | 6662 |
a | 5990 |
o | 4438 |
r | 4158 |
i | 3759 |
l | 3371 |
t | 3295 |
n | 2952 |
u | 2511 |
d | 2453 |
y | 2074 |
c | 2028 |
p | 2019 |
m | 1976 |
h | 1760 |
g | 1644 |
b | 1627 |
k | 1505 |
f | 1115 |
w | 1039 |
v | 694 |
z | 434 |
j | 291 |
x | 288 |
q | 112 |
e, a, o, i と母音が多いことはわかるのですが、意外にも s, r も多いのですね。
s, r の含まれている単語を一番初めに入れると良いのかもしれませんね。
import string
concat = ''
for i in items:
concat += i.lower()
result = {c: concat.count(c) for c in string.ascii_lowercase}
for k, v in sorted(result.items(), key=lambda x: x[1], reverse=True):
print(f'|{k}|{v}|')