El problema:
¡Dos agentes secretos enemigos han ideado un maravilloso método de comunicación (para ti)!
Así es como funciona el proceso de cifrado:
1) Tome los equivalentes ascii de cada letra. (No se envían espacios, números o signos de puntuación)
2) Para cada letra en el mensaje, el equivalente ascii y la letra que sigue (si existe, si no existe, debe considerarse 0), se multiplican (este producto se almacena en una matriz / lista) y sumado (este número también se almacena en una lista diferente).
3) Las dos listas (de sumas y productos) se unen (la lista de sumas, luego la lista de múltiplos, en la misma matriz) y se transmiten.
¡Necesita escribir el programa más pequeño capaz de revertir este proceso y descifrar los mensajes enviados en este formato!
Ejemplo de pares de entrada y salida:
[173, 209, 216, 219, 198, 198, 225, 222, 208, 100, 7272, 10908, 11664, 11988, 9657, 9657, 12654, 12312, 10800, 0] -> “HelloWorld”
[131, 133, 164, 195, 197, 99, 4290, 4422, 6499, 9506, 9702, 0] -> “ABCabc”
Este es el código de golf , por lo que gana la solución más pequeña en bytes.
Se permiten mensajes de error.
Su programa puede recibir una lista / matriz unidimensional o una cadena separada por comas, si así lo especifica en su envío. El valor predeterminado es una matriz / lista.
fuente
Respuestas:
Casco ,
76 bytesPruébalo en línea! De acuerdo con la documentación
m
, no debería ser necesario el inicio, pero parece que actualmente hay un error.Editar: -1 byte gracias a Zgarb!
Explicación:
fuente
`-
puede ser≠
. El comportamiento dec
hecho parece un error.brainfuck , 66 bytes
La entrada es la cadena encriptada. Asume celdas de tamaño infinito y 0 en EOF.
Cómo funciona:
fuente
Haskell ,
4535 bytesPruébalo en línea!
Explicación
fst.span(<245)
toma todos los números del comienzo de la lista que son más pequeños que 245. Esos son solo los números de la parte de suma, porque la suma más grande posible esz + z = 122 + 122 = 244
, y el producto más pequeño posible esA * A = 65 * 65 = 4225
.scanr1(-)
toma el último valor de la lista y lo usa como acumulador inicial. Luego, de atrás hacia adelante, cada elemento de la lista se resta por el acumulador actual, y el resultado se usa como el siguiente acumulador y se agrega a una lista.map toEnum
reemplaza cada número en la lista con el carácter correspondiente para recrear la cadena.fuente
Jalea , 9 bytes
Pruébalo en línea! o Marque ambos casos de prueba.
Alternativa.
Explicación
fuente
Python 2 , 72 bytes
Pruébalo en línea!
fuente
Python 2 , 92 bytes
Pruébalo en línea!
fuente
Jalea , 11 bytes
Un enlace monádico que toma una lista de enteros y devuelve una lista de caracteres.
Pruébalo en línea!
¿Cómo?
fuente
Pyt , 60 bytes
Toma una lista de enteros y devuelve una cadena de caracteres.
Explicación:
Pruébalo en línea!
fuente
JavaScript (ES6), 80 bytes
Mostrar fragmento de código
fuente
VB Script -
7471 bytes(Logré reducir de 74 a 71 usando While..Wend en lugar de Do..Loop)
La entrada está en una matriz a (), la salida está en la cadena d
Explicación
Probé esto en un archivo vbscript con el código anterior envuelto como una función:
fuente
Limpio ,
96817877 byteszero
es el caracter nulo.Podría guardar otro byte si Clean no fuera tan exigente con los nulos literales en el archivo fuente.
Pruébalo en línea!
fuente
f=
.f=
es la asignación más corta, por lo que una invocación mínima agrega dos de todos modos.Perl 5 , 39 + 2 (
-ap
) = 41 bytesPruébalo en línea!
fuente
C (gcc) ,
9089 bytess+=(i%2?-1:1)*...
<~>s-=~(i%2*-2)
.Pruébalo en línea!
fuente
ML estándar (MLton) ,
858482 bytesPruébalo en línea!
Sin golf:
Pruébalo en línea!
fuente
Perl 6 ,
43 3935 bytesPruébalo
Pruébelo (hace lo mismo que arriba)
Pruébalo
Pruébalo
Explicación:
fuente
05AB1E , 9 bytes
Pruébalo en línea!
Explicación
fuente
J
oin.ç
embargo, @Shaggy no convierte implícitamente la lista de caracteres en una cadena. Si entiendo el problema correctamente, el programa necesita generar una cadena y no una lista de caracteres.Japt, 12 bytes
Tiene que haber una forma más corta de obtener la primera mitad de la matriz ...
Intentalo
fuente
Python 2 , 70 bytes
Pruébalo en línea!
fuente