ALIS Puzzle Timeを解くためのpythonコードを公開し、
みんなで楽しくパズルに挑戦できれば良いなと思い、筆を取りました。
先日JimVDさんが企画したパズルです。
ブロックチェーンを支える基礎技術である、
ハッシュ関数を用いた問題となっています。
詳しい内容は、こちらの記事でご確認できます。
暗号技術です。こちらの記事が詳しいです。
ざっくり説明すると、
特定の文字列から固有のハッシュ値(暗号文)を決定する技術です。
今回のパズルは、提示された暗号文から、
元となっている文字列を探す問題となっています。
食材一覧の全順列をハッシュ化して、暗号文と一致するか試しました。
一致した場合、printにて原文と暗号文を表示するようにしています。
[1]必要なライブラリをimportしています。
外部ライブラリであるsha256は、
事前にインストールしておく必要があります。
[2]答えのヒントとなる食材をリストにしています。
問題の暗号文をhash_valuという変数に入れています。
[3]permutations(materials)で、
全順列のイテレーションを作成しています。
text = "".join(order)で、
リストの文字列を全部ひとまとめにしています。
sha256(text.encode()).hexdigest()で、
候補となっている文字列のハッシュ値を取得しています。
アルファベットが小文字だったため、
upper()で大文字に変換しています。
結果的に、このコードでは答えは見つかりませんでした。
今朝方、ヒントが追加されました。
それを踏まえた上で、コードを修正しました。
[4]materialsの各要素を、
ハッシュ化したリストを作成しました。
[5]ハッシュ化した値を、
更にハッシュ化できるよに、再帰関数を定義しました。
念の為10回ハッシュ化を繰り返すようにしてます。
[6]修正前とほぼ同様ですが、
ハッシュ値をhash_loop関数で取得します。
このコードでも答えは見つかりませんでした。
今回用いたコードは、こちらに公開しています。
正解は見つかりませんでしたが、
順列を総当たりでハッシュ化する解法は、
おそらくあってると思います。
腕に自信のある方は、挑戦してみては如何でしょうか。
アリス非公式discordである、
ALIS Supportersのハッカー部にて活動しています。
この記事についての質問、感想があれば、
気軽にコメント頂けると嬉しいです。