はじめに
Wordle流行ってますね。私も数日前からハマっています。
シンプルなゲーム性で誰でも楽しめて、一日一回しかできない仕様で飽きさせない。とても魅力的なゲームだと思います。
……でももう少し遊びたい?
自前で実装してしまいましょう。
……シンプルだし短く書けるよね?
…ぇ…ええ、ワンライナーしましょう。
ワンライナーします
私はPythonくらいしかワンライナーで書けるほどの文法を知らないので、今回はPythonで実装します……
oneliner_wordle.py
print('\n'+['YOU WIN',(l:=[i.upper() for i in __import__('requests').get('https://www-cs-faculty.stanford.edu/~knuth/sgb-words.txt').text.splitlines()if len(set(i))==5and len(i)==5]), (a:=__import__('random').choice(l)),(b:=False),f'YOU LOSE\tANSWER:{a}'][[print(j,end=''if b else'')or(b:=(i==a)) for i,j in((lambda t:[t,''.join([f'\033[{[30,33,32][(s in a)+(s==a[i])]}m{s}\033[0m'for i,s in enumerate(t)])])(next((i for i in(input('\t\t>>').upper()for _ in '_'*5)if i in l)))for _ in '_'*6if not b)][-1]-1])
出来ました。
単語リストは、こちら↓からお借りしました。
https://www-cs-faculty.stanford.edu/~knuth/sgb-words.txt
私の環境のコマンドプロンプトでは上手く色付き文字で表示されませんでした。VSCodeのターミナルや、Jupyterでは正常に表示されると思います。
また、文字を白くするには[30,33,32]
の部分を[37,33,32]
にしてください。
requests
は準標準ライブラリといっても良いのではないかと勝手に思っているので使用してしまっています。
標準ライブラリのみで書くならこうなります。
oneliner_wordle_std.py
print('\n'+['YOU WIN',(l:=[i.upper() for i in __import__('urllib').request.urlopen('https://www-cs-faculty.stanford.edu/~knuth/sgb-words.txt').read().decode().splitlines()if len(set(i))==5and len(i)==5]), (a:=__import__('random').choice(l)),(b:=False),f'YOU LOSE\tANSWER:{a}'][[print(j,end=''if b else'')or(b:=(i==a)) for i,j in ((lambda t:[t, ''.join([f'\033[{[30,33,32][(s in a)+(s==a[i])]}m{s}\033[0m'for i,s in enumerate(t)])])(next((i for i in(input('\t\t>>').upper()for _ in '_'*5)if i in l)))for _ in '_'*6if not b)][-1]-1])
遊んでみよう
⬜⬜🟨⬜⬜
🟩🟩⬜⬜🟨
🟩🟩🟩⬜🟩
🟩🟩🟩🟩🟩
#最後に