見出し画像

『SPY×FAMILY謎解き』に出題された問題をPythonで解いてみた (たぬき暗号)

見出し画像の出典先:https://moviewalker.jp/news/article/1087214/


はじめに

 こんばんは、Suzuka22です。最近、SPY×FAMILYがマイブームです[1]。なお、SPYxFAMILYとは凄腕のスパイである黄昏が偽物の家族を作って東国の政治家と接触するというお話です。アニメは1,2期ともに観ました。映画も観に行きました。私はヨルさんが大好きです。ヨルさんのように美人で性格が良くて非常に強い女になりたいです (生まれ変わるしかない)
 さて、前置きはここまでにして今回は2020年9月に開催されたキャンペーンの『SPY×FAMILY謎解き』をPythonで解いてみました。この謎解きは全部で4つあるのですが一番簡単と言われているたぬき暗号をPythonで解きました。

出題されたたぬき暗号[2]

図1 たぬき暗号の問題

図1は『SPY×FAMILY謎解き』に出題された問題です。図1よりたぬきが左に写っています。このたぬきには一体どんな意味があるのでしょう??ちなみにたぬきという文字がヒントです。

たぬき暗号の解き方[3]

 読者の皆さんは解けましたか??ここからはたぬき暗号の解き方を解説していきます。解き方としては「たたたたたったたぴたたなたたたたたーたたたたたつ」からたを抜いて読みます。なぜなら、図1に写っているたぬきはたを抜くという意味を表しています。たぬきなのでたを抜くですね。たを抜いて読んだ場合はっぴなーつという文字が残ります。
 しかし、っぴなーつという単語の意味が分かりません。単語になっていません。そこで、出力されたっぴなーつの文字を並び替えたらぴーなっつになります。つまり、たぬき暗号の答えはぴーなっつです!!!!アーニャの好きな食べ物ですね。

たぬき暗号を解くソースコード

 以下は図1のたぬき暗号を解くソースコード(tanuki.py)です

import itertools
from janome.tokenizer import Tokenizer

# 出題された文章を入力
text = "たたたたたったたぴたたなたたたたたーたたつ"
result = text.replace("た", "")

# 初期化
t = Tokenizer()

# 文字列の全ての並びを取得(重複を除去)
permutations = sorted(set(itertools.permutations(result)))
results = ["".join(perm) for perm in permutations]

# 食べ物っぽい単語のリスト
food_keywords = ["ぴーなっつ", "つ", "寿司", "カレー", "ご飯", "ピザ"]

# たを抜いた言葉は食べものの名前であるかどうか判定を行う
def is_food(word):

    for i in range(len(food_keywords)):

        if word == food_keywords[i]:

            return food_keywords[i]
        
        else:

            continue

# 食べものの名前であるかどうか結果を出力
for result in results:

    print(is_food(result))

実行結果

None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
ぴーなっつ
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None

  ぴーなっつという文字列が表示されています。たを抜いて文字列を並び替えることは出来ました。なお、Noneとはぴーなっつに該当しない文字列のことです。例えば、ーっぴなつやぴなーっつなどです
っぴなーつの文字の組み合わせは合計で120通りです。ソースコードでは120通りの文字列が食べ物の名前に一致するかどうか検証しています

最後に

 今回は『SPY×FAMILY謎解き』をPythonで解いてみました。ソースコードよりたを抜いて文字列を並び替えることは出来ています。しかし、ぴーなっつという言葉を固有名詞として判断する実装は正確に出来ていません。言い訳ですが形態素解析について調査して試行錯誤を繰り返していました。しかし、現段階では出来ていません。そこで、食べ物の名前を配列にしてぴーなっつと配列の中に存在する食べ物の名前が一致するかどうかという処理を行っています
 次回はぴーなっつを食べ物の名前として判断する処理を実装します。そのためには形態素解析の勉強が必要です (汗)

ここまで記事を読んでいただきありがとうございました!

※ウマ娘の声をフーリエ変換した記事や水栓の開閉判定をLineに通知する記事も書いています.suzuが私です.興味がある方はぜひご覧ください!
https://vigne-cla.com/31-1/#toc5

※Qiitaもやっています.


ぜひフォローよろしくお願いします!

参考文献

[1] https://spy-family.net/

https://spy-family.net/

[2] 

[3]



 


いいなと思ったら応援しよう!

Suzuka22 使っていただいたアプリや記事の内容に満足した場合は応援をよろしくお願いいたします。いただいたチップは今後の開発費用として使わせていただきます