モジュール詳細:腐敗

何もかもが崩れ落ちる...

このモジュールには押すことのできる記号が3つ表示されている。 モジュールを解除するには、正しい順序で記号を押す必要がある。 専門用語は全てマニュアルの最後で解説される。

ステップ1: 超複雑素因数分解

...数も...

ステップ1.1: ディスプレーの解読

モジュールには3つの暗号化された記号が表示されている。 それぞれの記号を解読するには、縦線を二進数の桁として解釈する。下の線に接続されている縦線は1、下の線に接続されていない縦線は0とする。kを記号に存在する縦線の数とし、2k-1をこの値に加算する。 こうして得られる3つの数字を十五進数の各桁とみなし、全体を十進数に変換する。 この番号をnとする。

ステップ1.2: 木の作成

ノードと枝からなる木を作成する。 木を作成するには、[Vp=0; Vr=n]であるノードから開始する。 Vrの素因数P(重複は別々に数える)ごとに、子ノード[Vp=P; Vr=(Vr,親/P)+1]を作成する。 子ノードをVpの昇順に並べる。 この操作をVrが素数でないすべてのノードに対して適用する。 こうして作られるノードの集合をTとする。

ステップ2: ニューラルネットワークビットカスケード

...モジュールも...

ステップ2.1: 二進数の作成

左右の記号を押す前であれば、中央の記号はいつでも自由に押すことができる。 中央の記号を押すと、7つの音からなるシーケンスが再生される。 このシーケンスを7桁の二進数に変換する。 それぞれの音は、次の音の方が高ければ1、そうでなければ0に変換される。 最後の音に関しては、「次の音」とは最初の音を指す。 この数列をBiとする。 空の数列Bfを用意する。 kを1とし、操作 「Biの先頭k桁を取り(必要であればBiを繰り返す)、反転してからBfの末尾に追加する」を行う。 kをk+1に変えて繰り返す。 次のステップに必要な桁数が得られるまでこの操作を繰り返す。 必要であればいつでも追加で桁を生成することができる。 Bfのビットを使うように求められたときは、まだ使われていない先頭のビットを利用する。

ステップ2.2: 枝への値の割り当て

ベースノードから開始し、子に順番に訪れる。 さらにこの子から、子ノードが無いノードに訪れるまで子ノードに順番に訪れる。その後、直前に通った枝に [b=Bf,今回]を割り当てる。 あるノードのbが全て割り当てられたら、そのノードと親ノードを繋ぐ枝に[b=Σ(b)%2]を割り当てる。 全ての枝に対しbが割り当てられるまで、この操作を繰り返す。

ステップ2.3: 逆伝播

ベースノードから開始し、[Vb=1]にする。 子に移動し、[Vb=Vb,親⊻b]にする。 この操作により全てのノードに対して値を割り当てる。

ステップ3: 量子論理

...そして最後には...

ステップ3.1: 初期シーケンスの決定

[S1=Σ(Vp); S2=Σ(Vp*Vb)]であるシーケンスSを作成する。 S最後が0でなくなるまで、Sの末尾に[S最後から2番目⨬S最後]を追加する。

ステップ3.2: 分数の作成

Sの長さをbとし、nをb進数に変換したあと、それぞれの桁をシーケンスS2の要素とする。 S2の長さが奇数であれば、S2の最初に0を追加する。 S2が作成できたら、各kに対し[S2k=SS2k+1]にする。 これらの番号を2つずつのペアに分け、小さい数/大きい数として分数を作成する。 ただし、0/0は1/2に変換する。 この分数の集合をFとする。

ステップ3.3: 真理値表の作成

論理を使うためには真理値表が必要である。 真理値表を作成するためには、Bfから2Fの長さビットを取得する。 それぞれのビットは[Fの長さ]桁の0と1の一意的な組み合わせに対応する。 [Fの長さ]桁の二進数を昇順に並べ、先ほど取得したBfのビットを出力結果として関連づける。 この真理値表をTTとする。

ステップ3.4: 量子論理の適用

f=0から開始する。 TTk,出力=1であるような各kに対し、操作 「TTk,p=0であるような各pに対し、一時的に[Fp=1-Fp]と変更する」を適用する。 [f=f+Π(F)]に更新し、一時的に変更した値を元に戻す。 fは常に分数の形で表しておく。

ステップ4: 送信

...正気すらも。

ステップ4.1: 送信するシーケンスの特定

空のシーケンスS3を作成する。 ⌊f⌋をS3の末尾に追加し、[f=1/(f%1)]にする。 これをfの分子が0になるまで続ける。

ステップ4.2: 回答の送信

S3を送信するには、それぞれの数字を二進数に変換する。 左の記号を0、右の記号を1とし、最上位桁から順番に入力する。 中央のシンボルを押すと現在の入力を送信シーケンスに追加する。 中央のシンボルを連続で2回押すと現在の送信シーケンスが送信される。

用語解説

記号

  • Σ(k): kの全ての和を返す。
  • Π(k): kの全ての積を返す。
  • a%b: aのbによる剰余。aをbで割った余りを返す。
  • a⨬b: aのbによる簡約剰余。「aからbを引き、bから1を引く」という操作を、aがbより小さくなるかbが0になるまで繰り返す。bが0になった場合は0を返し、そうでなければaを返す。
  • ⌊k⌋: kの床関数。kの小数点以下を切り捨てた値を返す。
  • a⊻b: aとbの排他的論理和。片方のみの入力が1のときには1を返し、そうでなければ0を返す。
  • ab: aが集合であり、その中から特定の要素を使用する時に用いる。bに応じた値を返す。いくつかの記号は、bに加えて補助的な変数が用意されているものがある。
    • Vr,親 = 親のVr
    • Bf,今回 = Bfのうち今回使用すべきビット
    • TTk,p = TT内の上からk番目の組み合わせにおけるp番目の入力。pが出力の場合、出力ビットを参照する

用語と操作

  • 基数の変換 (b->10): b進数を十進数に変換するには、回答を0から開始し、左から順に、各桁を取得した後に回答をb倍してその桁を足す、という操作を繰り返す。
  • 基数の変換 (10->b): 10進数をb進数に変換するには、空の数列から開始する。数をbで割った剰余を求め、数列の末尾に追加する。その後に数をbで割り小数点以下を切り捨てる。この操作を数が0になるまで繰り返す。
  • ビット: 長さ1の二進数表記の文字。0または1のどちらかになる。
  • 素数: 1と自分自身でしか割り切れない数。1は素数ではない。
  • 素因数: ある数を割り切れる素数。素数の累乗で割り切れる場合は、その素数を複数回数える。
  • ノード: 右図を参照。各ノードには主数Vp、剰余Vr、二進数Vbが割り当てられている。ベースノード以外の全てのノードには1つ前のノード(親)が存在する。また、子が存在するノードもある。あるノードAが別のノードBを親として持つとき、ノードAをノードBの子と呼ぶ。
  • 枝: 2つのノード間の繋がり。それぞれの枝には、ある二進数bが割り当てられている。この値は枝に接続されている親もしくは子の二進数が参照しており、二進数を反転させる役割がある。