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ページ目の上と中央のディスプレーの英字を(この順番で)使用する。これにより、26文字のコードを取得する。英字をアルファベット上の位置の数字に変換し、26個の「スコア」のリストを獲得する。一番目のスコアをA,二番目のスコアをB,...と対応させていき、これをZまで繰り返す。

得点が最も低い2項目を見つける。複数ある場合、リスト内の先頭にある方を選ぶ。リストの末尾に、2項目のスコアの和をそのスコアとする新たな項目を作成する。新たな項目は二分木になっており、左の子の節がスコアの最も低い項目(同点の場合はより先頭にある項目)、右の子の節がもう片方となる。元の2項目をリストから削除する。

これを25回繰り返し、リストを圧縮して1つの二分木にする。

次のページに、このステップの一例が図示されている。

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

2ページの3つ目のディスプレーにある暗号化された単語を、各文字を右の表のバイナリコードに置き換え、1つのバイナリ文字列に変換する。

ステップ1の例

簡潔にするため、この例ではアルファベットを6文字(A-F)のみとし、関連する5つの画面に合計で6つの文字があるとする。

ディスプレーのコード:ZJAUWJ

42 F C B D 42 A B C D E F 26 10 1 21 23 10 最小の スコア 二番目に 小さいスコア C B 11 A D E 26 21 23 F C B 21 49 E A A D E F 26 21 23 10 A E 26 23 F C B D F C B D E A

ステップ2の例

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

暗号バイナリ:L=01011 N=01101 S=10010 → 010110110110010

ステップ3:ハフマン復号

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

暗号化バイナリの最初のビットを取得する。それが0の場合、左の子の節に進み、そうでない場合は右の子の節に進む。

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

すべての暗号化バイナリ内のビットを消費するまでこれを繰り返す。獲得した英字が、復号後の単語となる。

ステップ3の例

ステップ2の暗号化バイナリ:010110110110010 → 復号後の単語:FACADE

E 0 F C B D E A 010 → F 0 1 0 A F C B D E 11 → A 1 1 F C D E A 0110 → C 0 1 0 B 1 F C B D E A 00 → D 0 0 A F C B D 10 → E 1