A00000
B00001
C00010
D00011
E00100
F00101
G00110
H00111
I01000
J01001
K01010
L01011
M01100
N01101
O01110
P01111
Q10000
R10001
S10010
T10011
U1010
V1011
W1100
X1101
Y1110
Z1111

モジュール詳細:黄色ハフマン暗号

皮肉にも、ハッフルパフよりレイブンクローのほうが似合っている。

モジュールは、3つのディスプレー、キーボード、左右の矢印、及び現在のページを表示するボタン(送信ボタン)で構成されている。

矢印を使用してページを移動することができる。ページは全部で2ページある。

モジュールを解除するには、以下の3ステップに従って単語を復号する。復号された単語を取得したら、キーボードを使用して入力する。入力を開始すると、ディスプレーが空白になり、下のディスプレーに現在入力されている内容が表示される。

入力を消去するには、いずれかの矢印をクリックする。

入力に問題がなければ、「SUB」と書かれたボタンを押して、回答を送信する。

ステップ1:暗号化二分探索

このステップでは、1ページ目の上と真ん中と下のディスプレー、2ページ目の上のディスプレーにある英字を使用する。この順番で英字を連結し、各英字を右の表にあるバイナリコードに置き換え、暗号化された文字列を変換する。

ステップ2:ハフマン木の構築

2ページ目の下のディスプレーにあるキーワードを取得し、重複する英字を削除する(最初に出現した英字は除外する)。アルファベット全体の文字列を取得し、キーワードに含まれる英字を削除する。

ポートの個数を4で割った余りが0または1の場合、アルファベットをキーワードの末尾に置く。そうでなければ、アルファベットをキーワードの先頭に置く。

ステップ1で取得したバイナリ文字列を左から右に読む。「1」であるビットは、2つの節(「左節」「右節」)を持つ二分木の節を作ることを意味している。節に出会ったら、左側の部分木をすべて変換し、その後右側の部分木をすべて変換する。「0」であるビットは葉を意味し、葉には、ある英字のみが含まれる。葉が見つかった時点で、順番にアルファベットキーの英字を割り当てていく。木の構造を解読すると、二進数が残るはずである。

次のページで、これらのステップの例を提示している。

ステップ1の例

ディスプレーから取得したコード:WXDIXL

W=1100 X=1101 D=00011 I=01000 X=1101 L=01011

暗号化バイナリ:110011010001101000110101011

ステップ2の例

簡略化のため、アルファベットを先頭6文字(A-F)のみとする。

2ページの下のディスプレー:CAB

ポートがない場合のアルファベット:CABDEF

1 1 C 0 0 A 1 1 B 0 1 D E 0 0 F 0

残ったバイナリ:1101000110101011

ステップ3:ハフマン木の読み取り

ステップ2で取得したハフマン木の根(一番上)から始める。

残っているバイナリから、先頭のビットを読む。それが0なら左の節に、そうでなければ右の節に移動する。

葉に到達するまでこれを繰り返す。ここで、到達した英字を記録し、根に戻る。

バイナリの全ビットを使い切るまで繰り返す。取得した英字が、復号された単語になる。

ステップ3の例

ステップ2で残ったバイナリ: 1101000110101011 → 復号された単語:FACADE

E 1 D 11 → F 00 → C 1010 → D 1011 → E B D E F 1 1 C A 01 → A C A F 0 1 C A F 0 0 E 0 0 B F 1 1 D