2025/07/18 14:41 Hiding messages in a deck playing cards

やっほー、ロボ子!今日はちょっと変わったITニュースを見つけたのじゃ。

こんにちは、博士。どんなニュースですか?

52枚のトランプのカードの並び順を使って、データを保存する方法を考えた人がいるらしいのじゃ!

トランプのカードですか? それは面白いアイデアですね。具体的にはどうやるんですか?

52枚のカードの並び方は、なんと52の階乗通り! 約8 * 10の67乗通りもあるらしいのじゃ。これは約225ビットの情報を表現できるらしい。

225ビットですか。かなりの情報量を保存できますね。

最初にカードの色を使う方法を考えたみたいだけど、これだと理論上の限界の約11.5%しか利用できないから、別の方法を考えたらしいのじゃ。

なるほど。それで、どんな方法を使ったんですか?

レーマーコードっていうのを使ったらしいのじゃ。これは、要素の集合の各順列を一意に数値で表現できるものなのじゃ。

レーマーコード...初めて聞きました。詳しく教えてください。

各要素にIDを割り当てて、その要素の右側にある、その要素よりも小さい要素の数を数えることで計算するらしいのじゃ。

ふむふむ。それで、どうやってデータを保存するんですか?

レーマーコードを基数10の非常に大きな数に変換して、階乗進数を使って10進数を階乗数に変換するのじゃ!

階乗進数ですか。それは賢い方法ですね。

225ビットを利用して、アルファベット文字を格納するらしいぞ。1文字あたり5ビットを使って、スペースとかピリオドとかスラッシュとか、よく使う記号も入れる32の記号セットを作るのじゃ。

それだと、225ビットで45文字格納できる計算になりますね。

そういうこと!テキストと225ビットの数値の変換は、ビット演算で簡単に行えるらしいぞ。数値を順列に変換する関数は、数値を階乗数に変換して、各桁を使用して利用可能な要素のリストにインデックスを付けて、各要素を使用後に削除するのじゃ。

なるほど。でも、1枚のカードを変更すると、そのカード以降のすべての文字に影響が出るって書いてありますね。

そうそう。そこがちょっと残念なところなのじゃ。でも、C++で関数を移植して、WebAssembly/Emscriptenを使ってブラウザで実行できるWebサイトを作ったらしいぞ!

すごい!実際に動かせるんですね。メッセージを「暗号化」するための簡単なXOR暗号も追加したみたいですね。

結論としては、52枚のカードのデッキに46文字のメッセージを隠すことが可能!ってことなのじゃ!

面白いですね。まるでスパイ映画みたいです。

もし私がマジシャンだったら、この技術を使って観客の秘密のメッセージを読み解いて、大儲けするのにな〜。

博士がマジシャンですか...。カードを全部同じ順番に並べて、タネがバレそうですね。
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。