La esteganografía oculta un mensaje dado dentro de un operador dado, produciendo un paquete que no parece sospechoso. Para este desafío, escribirá un programa que toma un mensaje ASCII y un operador ASCII como entrada, y devolverá o imprimirá un paquete que sea idéntico al operador, excepto que los caracteres correspondientes al mensaje se duplican, en el mismo orden en que aparecen el mensaje.
Reglas:
- Si el operador ya contiene secuencias del mismo carácter más de una vez, y no se utilizan para codificar un carácter del mensaje, el programa las reducirá a un solo carácter.
- Si el operador no contiene los caracteres del mensaje en el orden correcto, el programa puede no devolver nada, el propio operador o un error.
- Puede suponer que el mensaje y el operador son cadenas ASCII no vacías.
- La capitalización importa: A no es equivalente a a.
- Cuando más de un paquete es válido, su programa puede generar alguno o todos ellos.
- El espacio es un personaje como cualquier otro personaje.
Casos de prueba:
Paquete de mensajería "hola" "¿ha llegado?" "¿Ha llegado?" O "¿ha surgido?" "señor" "¿ha llegado?" "¿Ha llegado?" "foo" "¿ha llegado?" "" O "ha llegado?" O un error. "Coche" "Los gatos son geniales". "CCaats arre col". "coche" "Los gatos son geniales". "" O "Los gatos son geniales". O un error. "Sofá" "Sofá" "CCoouucchh" "oo" "oooooooooo" "oooo" "o o" "oooo oooa" "oo ooa"
Este es el código de golf, por lo que gana menos bytes.
code-golf
string
steganography
jkpate
fuente
fuente
"oooo oa"
(con 2 espacios) una salida válida para el último caso de prueba?Respuestas:
Jalea , 28 bytes
Un programa completo que toma
carrier
ymessage
como argumentos de línea de comando que imprime el resultado(para un no empacable
message
imprime sin cambioscarrier
).Pruébalo en línea! O vea el conjunto de pruebas .
¿Cómo?
fuente
JavaScript (ES6), 71 bytes
Toma entrada como
(message)(carrier)
.Pruébalo en línea!
Versión alternativa, 66 bytes.
Si podemos tomar el mensaje como una matriz de caracteres:
Pruébalo en línea!
Editar : Gracias a @tsh por notar que olvidé eliminar algún código al cambiar de versiones no recursivas a versiones recursivas.
fuente
p=
ya que p se pasa por un parámetro.Haskell,
124121107101979590 bytesProvoca la excepción "Patrones no exhaustivos" si el operador no contiene el mensaje.
Pruébalo en línea!
Editar: -5 bytes gracias a @Laikoni.
fuente
m==c
: ¡ Pruébelo en línea!Retina 0.8.2 , 67 bytes
Pruébalo en línea! Toma el operador en la primera línea y el mensaje en la segunda línea. Explicación:
Procese ejecuciones de 1 o más caracteres idénticos del transportista. Si también hay una ejecución de 1 o más de los mismos caracteres en el mensaje, agregue la más corta de las dos ejecuciones a la salida por duplicado; de lo contrario, agregue un solo carácter de la portadora a la salida. Cada serie de caracteres de salida se termina con una nueva línea para distinguirla de la entrada. Al
(?!¶)
final, evita que la expresión regular piense que el transportista es el mensaje una vez que el mensaje se agota, ya que normalmente$
se permite que coincida con el¶$
que correspondería.Elimine todo si el mensaje no se codificó por completo.
Elimine las nuevas líneas de la salida.
fuente
Limpio , 118 bytes
Pruébalo en línea!
Primero toma el transportista, luego el mensaje.
Errores con
Run time error, rule '$;2' in module 'main' does not match
si el mensaje no cabe.fuente
Ruby , 73 bytes
Pruébalo en línea!
Función recursiva, toma entradas como matriz de caracteres.
Por una vez, esperaba utilizar el
squeeze
método incorporado de Ruby que contrae ejecuciones consecutivas del mismo personaje en una sola instancia. Pero desafortunadamente, no, los dos últimos casos de prueba arruinaron todo tan mal que tuve que recurrir a un enfoque completamente diferente, y esto resultó ser básicamente un puerto de la respuesta de Arnauld .fuente
Powershell, 134 bytes
El script devuelve el
empty string
si el operador no contiene los caracteres del mensaje en el orden correcto.Menos guión de prueba de golf:
Salida:
fuente
C (gcc) , 69 + 12 = 81 bytes
Compilar con (12 bytes)
Pruébalo en línea!
fuente