Cuadrados esteganográficos
Su trabajo es tomar una cadena y generar una NxN
imagen que represente esta cadena. También debe escribir el algoritmo que toma la imagen y la convierte nuevamente en una cadena. La puntuación incluirá el recuento de bytes de ambos algoritmos:
Algoritmo "Cifrado" + Algoritmo "Descifrado" .
Debe publicar cada uno por separado, con recuentos de bytes para los algoritmos de cifrado y descifrado que se muestran individualmente.
Algoritmo de ejemplo
Por ejemplo, aquí está el "Programa de acertijos y código de golf" usando un algoritmo esteganográfico simple basado en ASCII en el canal Azul:
#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
Puede ver que el canal azul simplemente contiene los valores ascii para esta imagen:
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( )
Mientras que el resto de los canales contienen valores generados aleatoriamente para "condimentar" la variedad de colores en la imagen. Al extraer el mensaje de la imagen, simplemente podemos ignorar los otros valores del canal y extraer el bit hexadecimal en el canal azul, reconstruyendo la cadena:
"Programming Puzzles and Code Golf"
Observe que los espacios que se usaron para rellenar la cadena en el cuadrado no se incluyen en la salida descifrada final. Si bien debe rellenar la cadena en la imagen, puede suponer que la cadena de entrada no terminará con espacios.
Reglas
- Debe codificar 1 carácter por píxel, el canal elegido para codificar el carácter es arbitrario.
- Los canales de los otros colores RGB deben ser aleatorios, distintos del que está eligiendo codificar la cadena; Esto significa que sus canales finales no codificados tendrían que estar entre
0x0000-0xFFFF
(elegidos al azar). - Expresar el resultado final como una matriz 2D de valores de color RGB está bien
0x000000-0xFFFFFF
, no es necesario usar la creación de imágenes a menos que quiera divertirse con él o si tiene menos bytes. Si elige generar como cadenas hexadecimales, prefije la cadena hexadecimal con#
EG#FFFFFF
o#05AB1E
. Puede separarse con pestañas, comas o cualquier otra cosa que sea horizontalmente sensible, pero debe mantener el patrón cuadrado; en otras palabras, debe usar la separación de línea nueva apropiada. - La salida debe estar en un cuadrado, y la cadena debe estar rellenada con espacios al final para acomodar esto. Esto significa que
N≈SQRT(Input#Length())
. Si la longitud de entrada no es un cuadrado perfecto, debe redondearN
y rellenar con espacios. - Como se indicó anteriormente, si está rellenando con espacios en la imagen, no debe incluir los caracteres rellenados en la salida final "descifrada".
- Puedes asumir que:
- La cadena de entrada no terminará con espacios.
- La cadena de entrada solo usará caracteres ASCII imprimibles.
- Este es el código de golf , el conteo de bytes más bajo gana.