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

モジュール詳細:Lempel-Ziv暗号

現代のzipファイルの前身。とはいえ、もはや共通要素は何もない。

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

右の矢印を押すと、次のページに移動できる。左の矢印を押すと前のページに移動できる。ページは全部で2ページある。

モジュールを解除するには、以下の3ステップに従って単語を復号する。復号された単語を取得したら、それを送信する。入力を開始すると、全てのディスプレーが暗転し下のディスプレーに入力された文字が表示される。

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

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

ステップ1:暗号化二進数復元

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

ステップ2:Lempel-Ziv復号

二進数のメッセージを「長さ1のチャンク1個、長さ2のチャンク2個、長さ3のチャンク4個、長さ4のチャンク8個」というようにチャンク(塊)に分けていく。それぞれの長さのチャンクの個数は、2の(長さ-1)乗である。チャンクの個数は変化してもよい(例えば、長さ4のチャンクが8個未満になってもよい)が、メッセージがチャンクの途中で終わることはない。

各チャンクを二進数から十進数に変換し、「コード化シーケンス」を取得する。

その後、これらの数字を、番号付きリスト(辞書)から得られるビット文字列に置き換えていく。ただし、辞書の作成は文字列の作成と同時に進める。

初期状態では、辞書には二つの項目が含まれている。

  • #0: “0” (長さ1)
  • #1: “1” (長さ1)

コード化シーケンスの各数字に対して、以下のステップに従う。

  • 辞書内から#(数字)の項目を見つけ、数字をそのビット文字列に置き変える。
  • 先程使用したビット文字列の末尾に追加ビットを加えた文字列を、新しい項目として辞書の末尾に追加する。追加ビットは、コード化シーケンスの次の数字に対応する項目の最上位ビットである (その数字が今追加しようとしている数字を指している場合でも、先頭のビットが何かは分かるはずである)。

ステップ3:ビットマップ復元

ステップ2で得られたビット文字列から最後のビットを取り除く。残りのビット列は、幅と高さが素数のモノクロ・ビットマップである。ビットマップの幅は、取り除いたビットが1であれば大きい方の素数になり、そうでなければ小さい方の素数になる。ビット文字列は読み順で配置され、ビットが1のマスのみ出力が行われている。

答えの単語は、以下のいずれかの方法でビットマップ内に表現されている。

  • 垂直モールス信号:各列のピクセルは、上から下に読むと1文字を形成している。ドットは1マス、ダッシュは3マス、記号と記号の間は1マスである。
  • ピッグペン暗号:各3×3領域のボックスは、ピッグペン暗号で記された文字になっている。ボックスの中央のマスは点の有無、出力がある部分は壁の位置を示している。S-Zの場合、すべての角と開いている方向以外のマスに出力が行われる。
  • セマフォア信号:各3×3領域のボックスは、中央のマスが常に出力され、残り2つのマスがセマフォア信号の旗の位置を示している。
  • 統一英語点字:各2×3領域のボックスは、点字の文字を示している。
  • アルファベット:メッセージは、以下の高さ4ピクセルのフォントを使用して、そのまま読み順に記述されている(メッセージ内では、文字同士のスペースはない)。
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