Introducción:
Tengo un montón de cifrados diferentes almacenados en un documento que una vez compilé cuando era niño, elegí algunos de los que pensé que eran más adecuados para los desafíos (no demasiado triviales y no demasiado difíciles) y los transformé en desafíos. La mayoría de ellos todavía están en la caja de arena, y todavía no estoy seguro de si los publicaré todos, o solo unos pocos. Aquí está el segundo ( Computer Cipher fue el primero que publiqué).
Para el Trifid Cipher (sin usar una palabra clave), el alfabeto (y un comodín adicional) se divide en tres tablas de 3 por 3:
table 1: table 2: table 3:
|1 2 3 |1 2 3 |1 2 3
-+----- -+----- -+-----
1|a b c 1|j k l 1|s t u
2|d e f 2|m n o 2|v w x
3|g h i 3|p q r 3|y z
Un texto que queremos cifrar es el primer carácter por carácter codificado en números de tabla-fila-columna. Por ejemplo, el texto se this is a trifid cipher
convierte en:
t h i s i s a t r i f i d c i p h e r
table: 3 1 1 3 3 1 3 3 1 3 3 2 1 1 1 1 3 1 1 2 1 1 2
row: 1 3 3 1 3 3 1 3 1 3 1 3 3 2 3 2 3 1 3 3 3 2 3
column: 2 2 3 1 3 3 1 3 1 3 2 3 3 3 3 1 3 3 3 1 2 2 3
Luego colocamos todo uno tras otro fila por fila en la tabla de arriba en grupos de tres:
311 331 331 332 111 131 121 121 331 331 313 133 232 313 332 322 313 313 132 333 313 331 223
Y esos se transforman de nuevo en personajes usando las mismas tablas:
s y y z a g d d y y u i q u z w u u h u y o
Una cosa a tener en cuenta, la longitud de entrada debe ser coprime a 3. Entonces, si la longitud es un múltiplo de 3, agregamos uno o dos espacios finales para que la longitud de entrada ya no sea un múltiplo 3.
Desafío:
Dada una cadena sentence_to_encipher
, cifrarla como se describe anteriormente.
Solo tiene que cifrar dado el sentence_to_encipher
, por lo que no es necesario crear un programa / función de descifrado también. Sin embargo, podría hacer un desafío de la parte 2 para descifrar en el futuro (aunque tengo la sensación de que es trivial / similar al proceso de cifrado).
Reglas de desafío:
- Puede suponer
sentence_to_encipher
que solo contendrá letras y espacios. - Puede usar minúsculas o mayúsculas (indique cuál ha utilizado en su respuesta).
- Puede elegir agregar uno o dos espacios finales cuando la longitud de entrada es 3 para que ya no sea un múltiplo de 3.
- I / O es flexible. Tanto la entrada como la salida pueden ser una cadena, una lista / matriz / secuencia de caracteres, etc.
Reglas generales:
- Este es el código de golf , por lo que la respuesta más corta en bytes gana.
No permita que los lenguajes de código de golf lo desalienten de publicar respuestas con idiomas que no sean de código. Trate de encontrar una respuesta lo más breve posible para 'cualquier' lenguaje de programación. - Las reglas estándar se aplican a su respuesta con las reglas de E / S predeterminadas , por lo que puede usar STDIN / STDOUT, funciones / método con los parámetros adecuados y programas completos de tipo retorno. Tu llamada.
- Las lagunas predeterminadas están prohibidas.
- Si es posible, agregue un enlace con una prueba para su código (es decir, TIO ).
- Además, se recomienda agregar una explicación para su respuesta.
Casos de prueba:
Input: "this is a trifid cipher"
Output: "syyzagddyyuiquzwuuh uyo"
Input: "test"
Output: "utbk"
Input: "output"
Possible outputs: "rrvgivx" (one space) or "rrzcc lr" (two spaces)
Input: "trifidcipher"
Possible output: "vabbuxlzz utr" (one space) or "vabbyzv rx ie " (two spaces)
Respuestas:
Jalea ,
292625 bytesPruébalo en línea!
Cómo funciona
fuente
;L3ḍƊ¡⁶µ⁶Øa;3ṗ¤,ðṚyZFs3⁸y
puede eliminarµ
si es aceptable para 24.Carbón , 39 bytes
Pruébalo en línea! El enlace es a la versión detallada del código. Explicación:
fuente
Python 2 ,
180176174165163 bytesPruébalo en línea!
La entrada puede ser superior o inferior. La salida es mayúscula
fuente
Pyth,
3433 bytesPrograma completo La entrada se espera en minúsculas, la salida es una matriz de caracteres. Pruébelo en línea aquí , o verifique todos los casos de prueba a la vez aquí .
Solución alternativa de 34 bytes:
sm@+G;id3csCm.[03jx+G;d3+W!%lz3zd3
- en lugar de +27 y cola, se usa.[03
para rellenar con 0 a longitud 3. Puede ser 33 sis
se cae el inicio.Editar: guardado un byte al soltar los principales
s
como matrices de caracteres son salida válidafuente
Rubí ,
153145138131 bytesPruébalo en línea!
Un enfoque rápido e ingenuo, funciona con texto en minúsculas. Entradas y salidas de matrices de caracteres.
fuente
Java (JDK) , 192 bytes
Pruébalo en línea!
Enfoque muy ingenuo. Toma minúsculas
char[]
como entrada pero emite aString
.Explicaciones
Créditos
fuente
Integer.valueOf
aByte.valueOf
yR+=c<26?(char)(c+97):' ';
aR+=(char)(c<26?c+97:32);
R , 145 bytes
Pruébalo en línea!
E / S como cadenas; agrega un espacio La extraña repetición de
[,3:1]
es porque la indexación de matriz natural de R es algo diferente.fuente
APL + WIN, 102 bytes
Explicación:
Ejemplo de captura de pantalla del caso de prueba:
fuente
SAS, 305 bytes
Un caluroso 'oof' para esta monstruosidad SAS. Hay muchos formatos de cadena aleatorios que pensé que podría evitar entrar en esto; Estoy seguro de que hay mejores formas de hacer algo de esto.
La entrada se ingresa en las nuevas líneas después del extracto de las tarjetas, así:
Emite un conjunto de datos que contiene la salida en la variable
f
, junto con un grupo de variables auxiliares / valores de matriz.Sin golf / explicación:
fuente
JavaScript (Node.js) ,
146 141 139136 bytesI / O está en minúsculas.
Pruébalo en línea!
Comentado
fuente
(o=...,++i)%3
funciona de nuevo en JS? ¿Es(o,i)
una tupla o algo así, y ambos enteros internos se convierten a su módulo-3? Como desarrollador de Java, todavía me confunde un poco ver(a,b)%c
. Buena respuesta sin embargo! Me gusta cómo convierte cada tercer dígito y luego elimina los dos primeros bytes nulos. +1 de mi parte++i
.05AB1E , 25 bytes
Como nadie publicó una respuesta 05AB1E todavía, pensé que publicaría mi propia solución. Ahora veo que es muy similar a @ Dennis ♦ 'Respuesta de Jelly , a pesar de que se me ocurrió de forma independiente antes de publicar el desafío.
Entrada como cadena, salida como una lista de caracteres. Agrega un espacio si la longitud es divisible por 3.
Pruébelo en línea o verifique todos los casos de prueba .
Explicación:
fuente
Japt , 42 bytes
Pruébalo en línea!
El núcleo de esta respuesta proviene de una respuesta eliminada de Shaggy, pero nunca regresó para manejar entradas de longitud divisible por 3, por lo que esta es una versión fija .
Explicación:
fuente
C # (compilador interactivo de Visual C #) , 178 bytes
Pruébalo en línea!
Menos golf ... Sigue siendo confuso :)
fuente