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 los 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. Pero aquí está el primero de ellos para comenzar.
Un cifrado de computadora cifrará el texto dado en grupos de caracteres 'aleatorios' de un determinado length
. Si dicho grupo contiene un dígito, usará ese dígito para indexar en su propio grupo para el carácter cifrado. Si no hay ningún dígito presente en el grupo, significa que se usa el primer carácter.
Por ejemplo, supongamos que queremos cifrar el texto this is a computer cipher
con una longitud determinada de 5
. Esta es una salida potencial (nota: los números están indexados en 1 en el siguiente ejemplo):
t h i s i s a c o m p u t e r c i p h e r (without spaces of course, but added as clarification)
qu5dt hprit k3iqb osyw2 jii2o m5uzs akiwb hwpc4 eoo3j muxer z4lpc 4lsuw 2tsmp eirkr r3rsi b5nvc vid2o dmh5p hrptj oeh2l 4ngrv (without spaces of course, but added as clarification)
Tomemos algunos grupos como ejemplos para explicar cómo descifrar el grupo:
qu5dt
: Este grupo contiene un dígito5
, por lo que el (1-indexada) quinto carácter de este grupo es el carácter utilizado para el texto descifrado:t
.hprit
: Este grupo contiene ningún dígito, por lo que el primer carácter de este grupo se utiliza implícitamente el texto descifrado:h
.osyw2
: Este grupo contiene un dígito2
, por lo que el (indexada 1) segundo carácter de este grupo es el carácter utilizado para el texto descifrado:s
.
Desafío:
Dado un entero length
y una cadena word_to_encipher
, genera una cadena cifrada aleatoria como se describió anteriormente.
Solo tiene que cifrar dado el length
y word_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.
Reglas de desafío:
- Puede suponer
length
que estará en el rango[3,9]
. - Puede suponer
word_to_encipher
que solo contendrá letras. - Puede usar minúsculas o mayúsculas (indique cuál ha utilizado en su respuesta).
- Sus salidas, cada grupo y las posiciones de los dígitos en un grupo (si está presente) deben ser uniformemente al azar . Entonces, todas las letras aleatorias del alfabeto tienen la misma posibilidad de aparecer; la posición de la letra cifrada en cada grupo tiene la misma posibilidad de ocurrir; y la posición del dígito tiene la misma posibilidad de ocurrir (excepto cuando es el primer carácter y no hay ningún dígito presente; y obviamente no puede estar en la misma posición que el carácter cifrado).
- También puede usar dígitos indexados 0 en lugar de 1 indexado. Indique cuál de los dos ha utilizado en su respuesta.
- El dígito
1
(o0
cuando está indexado a 0) nunca estará presente en la salida. Porb1ndh
lo tanto, no es un grupo válido para cifrar el carácter 'b'. Sin embargo,b4tbw
es válida, en donde los4
se cifra losb
en la cuarta posición (1-indexada), y los otros personajesb
,t
,w
son aleatorios (que casualmente también contiene unab
). Otros grupos válidos posibles delength
5 a cifrar el carácter 'b' son:abcd2
,ab2de
,babbk
,hue5b
, 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:
Length: 5
Word to encipher: thisisacomputercipher
Possible output:
qu5dthpritk3iqbosyw2jii2om5uzsakiwbhwpc4eoo3jmuxerz4lpc4lsuw2tsmpeirkrr3rsib5nvcvid2odmh5phrptjoeh2l4ngrv
Input:
Length: 8
Word to encipher: test
Possible output:
ewetng4o6smptebyo6ontsrbtxten3qk
Input:
Length: 3
Word to encipher: three
Possible output:
tomv3h2rvege3le
abcd2
, ab2de
, babbk
todos iguales? ¿También es b1akk
válido?
b1akk
yo diría que no. Lo editará en la descripción del desafío para aclararlo. Si el primer carácter es el cifrado, no debe haber ningún dígito.
"a??"
tiene 676 resultados posibles, pero "1a?"
, "?a1"
, "2?a"
, "?2a"
, tiene only104 resultados. Entonces, si estoy tratando de elegir un resultado de todos estos 780 resultados, la distribución de "posición de la letra cifrada" es 13: 1: 1, no 1: 1: 1. Y consideraría esto como un trabajo "uniformemente aleatorio".