← トップへ

I love U Rubik's Cube

シールの上をドラッグすると、その面が回ります。背景をドラッグすると、キューブの向きが変わります。

仕組みの全体(先にここを読んでください)

この仕組みで、やっていること

文字(最大 8 バイト)を、「キューブのピースの並べ方と向き」で表します。キューブを 1 つの状態にすると、その状態に対応する 1 つの数が決まります。逆に、その数から、キューブの状態と文字がもとに戻ります。

前提の言葉

なぜ、数と状態が 1 対 1 で結べるのか

全体の流れ

暗号化

復号

展開図の見方

キューブを開いて平らにしたものです。

アニメーションで見る

キューブの並べ方を「数字」にして、文字を入れたり取り出したりする仕組みです。ボタンを押すと、1 つずつ見られます。

ボタンを押すと、ここに手順が出ます。

読み取りの結果

文字:

読み方

キューブは、ピースの並び方と向きの組み合わせで、ひとつの数になります。その数を 8 バイトに分けて、文字にします。

  1. キューブの 54 枚のシールの色を読む
  2. どのピースがどこにあるか(並び)と、向きを求める
  3. それを 4 つの数(辺の並び・角の並び・角の向き・辺の向き)に直す(下の表)
  4. 4 つの数を組み立てて、1 つの数 N にする
  5. N を 16 進の 8 バイトに分けて、文字にする(上の段)
何を読むか数取りうる範囲
辺 12 個の並び0 〜 479001599
角 8 個の並び0 〜 20159
角の向き(7 個で決まる)0 〜 2186
辺の向き(11 個で決まる)0 〜 2047
合計の数0 〜 2^64 − 1(8 バイト)

合計 = 辺の並び + 479001600 × (角の並び + 20160 × (角の向き + 2187 × 辺の向き))