ステガノグラフィックスクエア
あなたの仕事は、文字列を取り込み、NxN
この文字列を表す画像を生成することです。また、画像を取り込んで、文字列に戻すアルゴリズムも記述する必要があります。スコアリングには、両方のアルゴリズムのバイトカウントが含まれます。
「暗号化」アルゴリズム+「復号化」アルゴリズム。
暗号化アルゴリズムと復号化アルゴリズムの両方のバイト数を個別に表示して、それぞれを個別に投稿する必要があります。
アルゴリズム例
たとえば、ブルーチャネルで単純なASCIIベースのステガノグラフィックアルゴリズムを使用した「プログラミングパズルとコードゴルフ」は次のとおりです。
#2e7250,#6ea972,#04eb6f,#0fc767,#74ab72,#ee6161
#b73b6d,#1aae6d,#f37169,#bda56e,#1fe367,#e99620
#706450,#0d3575,#146b7a,#4ea47a,#2a856c,#95d065
#3f2d73,#cef720,#bab661,#d1b86e,#f22564,#12b820
#0f3d43,#c86e6f,#1ee864,#a66565,#247c20,#c3bb47
#0e296f,#89d46c,#585b66,#c08f20,#455c20,#136f20
青いチャネルがこの画像のascii値を保持していることがわかります。
50 = 80(P) 72 = 114(r) 6f = 111(o) 67 = 103(g) 72 = 114(r) 61 = 97(a)
6d = 109(m) 6d = 109(m) 69 = 105(i) 6e = 110(n) 67 = 103(g) 20 = 32( )
50 = 80(P) 75 = 117(u) 7a = 122(z) 7a = 122(z) 6c = 108(l) 65 = 101(e)
73 = 115(s) 20 = 32( ) 61 = 97(a) 6e = 110(n) 64 = 100(d) 20 = 32( )
43 = 67(C) 6f = 111(o) 64 = 100(d) 65 = 101(e) 20 = 32( ) 47 = 71(G)
6f = 111(o) 6c = 108(l) 66 = 102(f) 20 = 32( ) 20 = 32( ) 20 = 32( )
残りのチャンネルはランダムに生成された値を保持して、画像のさまざまな色を「スパイスアップ」します。メッセージをイメージからプルアウトするとき、他のチャンネル値を単に無視し、青チャンネルの16進ビットをプルして、文字列を再構築できます。
"Programming Puzzles and Code Golf"
正方形の文字列の埋め込みに使用されたスペースは、最終的な復号化された出力に含まれていないことに注意してください。画像に文字列を埋め込む必要がありますが、入力文字列がスペースで終わらないと仮定することができます。
ルール
- ピクセルごとに1文字をエンコードする必要があります。charをエンコードするために選択されたチャネルは任意です。
- 他のRGBカラーのチャンネルは、文字列をエンコードするために選択するチャンネル以外のランダム化する必要があります。これは、最終的にエンコードされていないチャンネルが
0x0000-0xFFFF
(ランダムに選択された)間にある必要があることを意味します。 - 最終結果をRGBカラー値の2D配列として表現するのは問題
0x000000-0xFFFFFF
ありません。楽しみたい場合やバイト数が少ない場合を除き、イメージ作成を使用する必要はありません。16進文字列として出力する場合は、16進文字列の前に#
EG#FFFFFF
またはを付け#05AB1E
ます。タブ、コンマ、または水平方向に適切なもので区切ることができますが、正方形のパターンを維持する必要があります。つまり、適切な改行区切りを使用する必要があります。 - 出力は正方形である必要があり、文字列はこれを収容するために最後にスペースを埋める必要があります。これはそれを意味し
N≈SQRT(Input#Length())
ます。入力長が完全な正方形でない場合は、切り上げてN
スペースを埋める必要があります。 - 前述のように、画像にスペースを埋める場合、最終的な「復号化された」出力に埋め込まれた文字を含めないでください。
- あなたはそれを仮定することができます:
- 入力文字列はスペースで終了しません。
- 入力文字列は、印刷可能なASCII文字のみを使用します。
- これはcode-golfであり、最低バイト数が勝ちます。