あ
私の結論だけ読みたい人は結論セクションへ飛んでください
最後の方に解読用pythonプログラムあり〼
所感
気づいた人も多いだろうが、実はこのゲームの単語は英単語と対応しており、それぞれの文字はアルファベットと対応している。
訳に英語を当てた人なら簡単に推測できただろう。例えば、カレンダー上の「1」「2」「3」...に当たる単語が「one」「two」「three」...の文字数と一致しており、さらに「three」に関しては4~5文字目が同一の記号を使用している。「green」「yellow」「success」なども同様である。ただ難しいのが、「one」と「three」の「e」や「two」と「three」の「t」はそれぞれ異なる記号を参照しており、一様ではない。
おそらく、これはシフトと文字置き換えを用いた換字式暗号だと思われる。シフトはいわゆるシーザー暗号(「たぬき」→「ちねく」みたいなの)で、文字置き換えはそれぞれのアルファベットを何かしらの記号に置き換えるということである。
要するに、このゲームの文字には「…VWXYZABCDEFG…」のようなシークエンスが存在しており、英単語の文字をそれに当てはめたあとシフトしているのだろう。
例えば、みなさんが「容器」と訳したであろう「container」という単語について考える。仮に「c」を1番目のアルファベットとしよう。「c」を基準に、それ以外のアルファベットが何番目に位置するかを割り出すと、「o:13」「n:12」「t:18」「a:25」…という風になる。あとは、判明している文字を基準にその他の単語で同じように文字の場所を割り出す作業をすれば、アルファベットのシークエンスを得ることが出来る。(という面倒な手順を踏んだのだが、例のダイヤルが昇順であることに気づいた。ウゥッ。)
シフトになにか法則性があるかもしれないが、シフトのパターンは26種しか無いため、それぞれの文字に数字を当てはめシフトのパターンをすべて適用すれば候補を26種まで絞り込むことが出来る。そのうち単語として意味が通るものは多くないはずなので、特に問題なく正解を推測することが出来るだろう。シーザー暗号が脆弱たる所以である。
シフトがエニグマほど煩雑であれば投げ捨てるところだが、数語ほど特に問題なく解読出来たので、これで正解だろう...。おそらくは...。
異変
...と思ったのだが、何故か文字が合致する単語としない単語があるのだ。
例えば「two」。ゲーム内表記は「25 3 20」だが、これだと「txo」か「swn」である。
「25 2 20」もしくは「26 3 21」でないと「two」にはならない。これは単純なシーザー暗号ではない。他の単語では「3」が問題なく合致しているものも有るため、これは文字シークエンスにオーバーラップかギャップ、もしくは更なるシフト則が有るということだろう。
ダイヤルの順番の昇順で早く現れる文字、つまり昇順で若い文字ほど位置が後ろに1つずれている事が多い気がするが、それでも一様ではない。おそらく、何かの変数に基づいて昇順からシフト則を変えているのだろう。
色々見てみると、元の単語からのシフト数が大きいほどずれる文字の数が多く、若くない文字までずれているような気がしてきた。
例えば「many」という単語は平文だと「13 1 14 25」で、ゲーム内表記は「17 5 18 4」だ。最後の文字を除けば4文字シフトである。そしてこの4文字シフト単語は「4」の部分が一つ後ろにずれており、manyにするには「4」を「3」にして、「17 5 18 3」にする必要がある。
一方で7文字シフトの「yellow」は「7(6) 12 19 19 22 5(4)」では、「5」や「7」といった先程より大きい数字がずれている。
あと、これはゲーム内の会話には登場しない単語だが、「tranquility(静けさ)」を訳した際にこの点について確信した。
13文字シフトのこの単語は「8(7) 6(5) 14 2(1) 5(4) 9(8) 22 25 22 8(7) 13(12)」であり、「13」までもがズレの対象となっている。会話文に登場する単語は平均4シフト程度なのでなかなか気づかなかった。
というわけで、実際の単語とのシフト数に応じて、記号の昇順何文字目までずらすかが決まるとみて良いだろう。具体的には、n文字シフトの単語ではnより若い文字が一つずれているという感じだと思われる。
結論
というわけで私なりの結論は以下である;
このゲームの暗号はシフトと文字置き換えを用いた換字式暗号である。シーザー暗号式のシフトに加え、本ゲームにおけるアルファベットにおいて、実際の単語からのシフト数分よりも若い文字を前に1シフトする。
例えば、「yellow」を訳す際の手順を考える。
ゲーム内表記は「7 12 19 19 22 5」である。これを単純にシフトすると、「ydkknw」や「zellox」のような文字列しか得られない。一番若い文字が5なので、平文から5シフトされていると仮定する。アルファベット昇順から5より若い文字をすべて後ろに1シフトして、「7 12 19 19 22 『4』」になる。得られる文字列は「ydkknv」や「zellow」等であり、意味の通るものは得られない。「5」の次に若い文字の「7」に注目し、7シフトであると仮定する。7より若い文字をすべて後ろに1シフトすると、「『6』 12 19 19 22『4』」になり、これを訳すと「yellow」が獲得できる。その後、実際にシフト数が一致しているかを確認する。少なくとも7シフト以上であり、「12」がシフトしていないことから11シフト以下であることが条件となる。「12」に当てられていた「e」に注目すると、「e」は平文では「5」なので、この暗号文は7シフトであり、条件に一致する。めんどくさい。
シフト数を考慮に入れれば一発で26候補に絞れるため、上記の方法は少し冗長ではある。判明している情報内でもう少し最適なアルゴリズムは本ガイド最下部のpythonコードで行っている。スクショを見てもらえればだいたい何をしているかわかるだろう。
ゲーム内の単語は上記の方法ですべて解読できると思われるが、精査したわけではないのでぜんぜん違うかもしれない。違ってたら恥ずかしい。単語とシフト数次第では異なる文字を同じ記号で表すことになりかねないが、うまくやっているか私の気づいていない法則があるのだろう。あと各単語のシフト数がランダムなのか法則があるのかは不明。シフト数はおおよそ文字数±2の範囲に収まっているように見えるので、法則はありそう。知っている人は教えてほしい。このアルゴリズムだと「all」と「see」が衝突しているので、何かしらのルールがありそう。
ちなみに新聞も読もうと思えば読める。
既に有志がガイドを作成しているが、上記の解読法でちまちま読んでいくのも楽しいだろう。色々設定がわかるし、何よりあの娘へのやるせない思いをぶつけるのに丁度良い。ウッウッ。
解読プログラム
一応解読用スクリプトをpythonで組んだ
色々情弱でよくわからないのでコードをガイドの一番下に直張りする。
このようにアルファベットの番号をスペースで区切って入力すると候補を26個列挙してくれる
一応五十音表もつけておく。マウスで書いたので色々許してほしい。
#以下コード a=["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"] while True: userinput = input("enter \"exit\" to quit\n") if userinput=="exit": break word = [int(i)-1 for i in userinput.split(" ")] for j in range(26): decipherd = "" numbers = str(j)+": " for i in word: xp = i-j if xp >= 26: xp %= 26 if i < j: xp -= 1 numbers += str(i+1)+"("+str(26 if i == 0 else i)+") " else: numbers += str(i+1)+" " decipherd += a[xp] print(decipherd+" "+numbers)
Source: https://steamcommunity.com/sharedfiles/filedetails/?id=2759298918
More 7 Days to End with You guilds
- All Guilds
- Endings Guide [SPOILERS]
- 7 Days to End with You Guide 11
- i wish i knew
- Deciphering Tips & All words
- 7 Days to End with You
- *SPOILER* My attempt to de****** the thing
- 7 Days to End with You Guide 3
- Deciphered newspaper articles *SPOILERS*
- 7 Days to End with You Guide 2