Steganografik Kareler
İşiniz bir dize alıp NxN
bu dizeyi temsil eden bir görüntü oluşturmaktır . Ayrıca görüntüyü alan ve bir dizgeye dönüştüren algoritmayı da yazmalısınız. Puanlama, her iki algoritmanın bayt sayısını içerecektir:
"Şifreleme" Algoritması + "Şifre Çözme" Algoritması .
Her birini ayrı ayrı, hem şifreleme hem de şifre çözme algoritmaları için ayrı ayrı görüntülenen bayt sayılarıyla göndermelisiniz.
Örnek Algoritma
Örneğin, Mavi kanalda basit bir ASCII tabanlı steganografik algoritma kullanan "Programlama Bulmacaları ve Kod Golfü":
#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
Mavi kanalın bu görüntü için ascii değerlerini tuttuğunu görebilirsiniz:
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( )
Kanalların geri kalanı görüntüdeki renk çeşitliliğini "arttırmak" için rastgele oluşturulmuş değerleri tutarken. Mesajı görüntüden geri çekerken, diğer kanal değerlerini görmezden gelebilir ve dizeyi yeniden yapılandırarak mavi kanaldaki altıgen biti çekebiliriz:
"Programming Puzzles and Code Golf"
Kare içinde dizeyi doldurmak için kullanılan boşlukların son şifresi çözülmüş çıktıya dahil olmadığına dikkat edin. Dizeyi görüntüde doldurmanız gerekir, ancak giriş dizesinin boşluklarla bitmeyeceğini varsayabilirsiniz.
kurallar
- Piksel başına 1 karakter kodlamanız gerekir, karakteri kodlamak için seçilen kanal isteğe bağlıdır.
- Dizeyi kodlamak için seçtiğiniz kanal dışında, diğer RGB renklerinin kanalları rastgele olmalıdır; Bu, kodlanmamış son kanallarınızın arasında
0x0000-0xFFFF
(rastgele seçilmiş) olması gerektiği anlamına gelir . - Nihai sonucu 2B RGB renk değerleri dizisi olarak ifade etmek iyidir
0x000000-0xFFFFFF
, onunla eğlenmek istemiyorsanız veya daha az bayt değilse görüntü oluşturmaya gerek yoktur. Onaltılık dizeler olarak çıktı almayı seçerseniz, altıgen dizenin önüne#
EG#FFFFFF
veya ekleyin#05AB1E
. Sekmeler, virgüller veya yatay olarak algılanabilecek başka bir şeyle ayrılabilirsiniz, ancak kare desenini korumalıdır; diğer bir deyişle, uygun satırsonu ayırmayı kullanmalısınız. - Çıktı kare şeklinde olmalı ve dizeyi buna uygun olacak şekilde sonunda boşluk bırakılmalıdır. Bu demektir
N≈SQRT(Input#Length())
. Giriş uzunluğu mükemmel bir kare değilse, yuvarlanmalıN
ve boşluk bırakılmalıdır . - Daha önce belirtildiği gibi, görüntüdeki boşluklarla dolduruyorsanız, doldurulmuş karakterleri son "şifresi çözülmüş" çıktıya dahil etmemelisiniz.
- Şunu kabul edebilirsiniz:
- Giriş dizesi boşluklarla bitmez.
- Giriş dizesi yalnızca yazdırılabilir ASCII karakterlerini kullanır.
- Bu kod golf , en düşük bayt sayısı kazanır.