Skip to content

Instantly share code, notes, and snippets.

@t-okkn
Last active July 23, 2022 03:24
Show Gist options
  • Save t-okkn/6d9294a24b6f42ac5e0d903a0e1a0f9a to your computer and use it in GitHub Desktop.
Save t-okkn/6d9294a24b6f42ac5e0d903a0e1a0f9a to your computer and use it in GitHub Desktop.
最近流行りのWordleに関するメモ

Wordleメモ

最近流行りの Wordle に関するメモです。
個人で解析した内容を掲載しています。

基本的に攻略ではなく考察成分のほうが多めです。
やはりパズルゲームなのでその日に思いついた単語から始めたいという思いが強いです。
システマチックに解答することも可能ですが、それをすると面白くないですしね・・・。

※解析にはPythonを使用しております。

■5文字の英単語一覧

最新情報は公式の 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.同一文字が1文字も含まれていない単語

同一文字が1文字も含まれていない単語は 8322個 あります。
大体 64% くらいですかね。

diff = [i for i in filter(lambda x: sum([x.lower().count(c) for c in x.lower()]) == 5, items)]

2.ある文字が2文字含まれている単語

例えば 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)]

3.ある文字が3文字含まれている単語

例えば 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)]

4.異なった2文字が2文字ずつ含まれている単語

例えば 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)]

5.異なった2文字のみで構成されている単語

例えば 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}|')

その他追記予定・・・

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment