Generar un cifrado dado un número y una cadena
Tu tarea es simple. Dada una cadena s
y un número 0 <= n <= 9
como entradas, inserte un carácter ASCII imprimible pseudoaleatorio entre cada carácter de los n
tiempos de la cadena . De tal manera que para cada personaje de s
hay n
caracteres aleatorios entre ellos. Los espacios deben ser recortados.
Entrada:
s
frase de cadena para cifrar en el cifrado- entero
n
en el rango de0 <= n <= 9
Ejemplo:
Entrada:
The treasure is here
2
Salida:
T ! 0 h 32 e F4 t 0i r lk e hm a 7y s # 0 u * & r * h e ! 2 i H ^ s B, h ! @ E 0) r $ h e
Este es el código de golf, por lo que gana el código más corto. ¡Buena suerte y diviertete!
code-golf
string
random
cryptography
jacksonecac
fuente
fuente
n
caracteres consta den
copias del mismo carácter aleatorio, siguen siendo aleatorios, pero son No es estadísticamente independiente. Y así sucesivamenteO
sean más propensos que los espacios o~
? Si tiene que ser uniforme, entonces debe decirlo explícitamente. Y si no tiene que ser uniforme, entonces al menos debería indicar algo como que cada personaje debe tener una probabilidad distinta de cero. También ha declarado en un comentario anterior de que cada personaje tiene que tener una distribución independiente, por lo que si esto es importante, debe mencionarse en el desafío. Hay un espectro muy amplio de aleatoriedad.Respuestas:
C #,
141131 bytesBastante similar a la respuesta Java de @ Geobit , excepto que actualmente es más larga :(
Cosas completas de lambda:
fuente
R=...
puedes usar directamentenew System.Random().Next(...)
, creo05AB1E , 11 bytes
Pruébalo en línea!
Explicación
fuente
Java 7,
132124bytesNada lujoso, solo un doble bucle como cabría esperar. Exterior para hacer un bucle de la cuerda, interior para rellenar los randoms:
fuente
k
:String f(int n,char[]a){String o="";for(char b:a)if(b>32){o+=b;for(int i=0;i++<n;o+=(char)(33+Math.random()*94));}return o;}
(125 bytes)char
elenco. ¡Gracias!Pyke,
12119 bytesPruébalo aquí!
Los caracteres aleatorios finales están bien según OP.
fuente
Octava, 43 bytes
Esto toma una cadena
s
y un enteron
como entrada. Una cadena en Octave es simplemente una matriz de caracteres.s>32
es un mapa lógico1
para cualquier personaje no espacial. El código agrega una matriz conn
filas y el mismo número de columnas ques(s>32)
tiene, que contiene números de coma flotante entre 33 y 126. Se redondea implícitamente a enteros y se convierte a caracteres ASCII cuando se concatena con la cadenas
.(:)'
endereza esto a una matriz horizontal de caracteres.¡Pruébalo aquí!
fuente
Python 2,
12312211811498 BytesHombre, desearía que
random
no fuera tan caro (y que no tuviéramos que filtrar espacios). Ahora tenemos grandes ahorros al permitirnos tener caracteres de cifrado al final :) De todos modos, aquí tienes:fuente
JavaScript (Firefox 30+), 96 bytes
Pure ES6 es dos bytes más largo:
Aquí hay un enfoque realmente genial que lamentablemente es 26 bytes más largo:
fuente
/. *(?=.)/
no funciona para cadenas que comienzan o terminan en espacios, no es que a nadie le importe. (Incluso ahora se te permite seguir caracteres aleatorios).(?=.)
que se ocupa de los espacios al final de las cadenas.94+33
lugar de95+32
R, 97 bytes
Función sin nombre que toma entradas
x
(cadena) yn
.Pruébalo en R-Fiddle
fuente
CJam ,
2118 bytesPruébalo en línea!
Imprime
n
caracteres finales aleatorios.Explicación
fuente
Bash, 124 bytes
Pure bash + coreutils , sin estructuras de flujo de control, sin sub-idiomas, sin "eval"
Golfed
Prueba
fuente
Q / KDB +,
39 3634 BytesVariables en uso:
Esto usa el adverbio anterior , que aplica la función a la izquierda entre cada elemento a la derecha y su predecesor. (Esencialmente, aplica la función a la izquierda entre cada carácter a la derecha).
Genere n números aleatorios entre 40 y 126 y luego conviértalos a un carácter de caracteres: (q parece tener solo caracteres para estos)
Salida de ejemplo:
EDITAR:
ahorró 3 bytes al convertir el rastro de q en (, /) usando la notación k y cambió de manera similar antes de `: Gracias a @slackwear por la actualización, afeitó 2 bytes :)
fuente
10h$
Java 8, 114 bytes
Golfed
Lambda que acepta un entero y una cadena. Inspirado por la respuesta de Java 7, doble bucle usando alguna sintaxis de Java 8 Stream (
String.chars
) para guardar algunos bytes.Entrada
Salida
fuente
Scala,
9594 BytesNada demasiado elegante, además del uso de mkString en una cadena. Trata la cadena como una lista de caracteres y me permite insertar un separador entre ellos. Mi separador es el número apropiado de caracteres alfanuméricos generados aleatoriamente.
fuente
Random.alphanumeric
hará que cada trozo a ser el mismo, por lo que es un sistema de cifrado cojo ... Ver este ejemplo:scala> c("Hello", 1) res0: String = Hbeblblbo
filter
. InvocarmkString
en una cadena lo tratará como una colección de personajes.> <> (Fish),
107106103 bytesPruébalo en línea!
No es súper aleatorio, pero es aleatorio. Simplemente coloque la cadena y el entero en la pila (Ejemplo: "¡Hola, mundo!", 5).
Explicación completa
Esta es una versión un poco más antigua del código, hasta que actualizo la explicación. Es casi lo mismo, solo que quizás sea un poco más fácil de leer:
Fingiremos que el parámetro de cadena es
s
y el parámetro entero esi
.El
<
le dice al pez que se mueva inmediatamente hacia la izquierda, lo que se envuelve" "
, lo que agrega un espacio caracterizado a la pila. Luego, el pez viaja&
, lo que agrega el espacio al registro.r
invierte la pila y la{:}
desplaza hacia la izquierda (colocandoi
el extremo de la pila), copia el valor al final de la pila y luego la desplaza hacia la derecha.v
le dice al pez que comience a moverse hacia abajo.x
le dice al pez que se mueva en una dirección aleatoria, lo que finalmente hace que el pez vaya a la derecha y continúe hacia abajo, o pase por encima1+
o de2+
antemano. Estos suman 1 o 2 respectivamente al número al final de la pila. Si el pez viaja hacia arriba, golpea dev
nuevo y viaja hacia abajo.}
desplaza la pila a la derecha, luego tiene lai
posición 1 en la pila y esta nueva variable en la posición 0 (la llamaremosm
).Esta sección es una función, llamémosla whitespaceTrimmer . Comienza donde el
<
está el. Simplemente elimina los espacios que están en el extremo de la pila (por lo tanto, el comienzo de la cadena) hasta que se encuentra con un carácter que no es espacio.Entonces, inmediatamente el pez nada hacia a
<
y debe viajar hacia la izquierda. Luego se topa con:&:&
y copia el valor en el extremo de la pila, coloca el espacio desde el registro al final de la pila, lo copia y luego lo vuelve a colocar en el registro.Luego, el pez golpea
=?!v ~
, o más específicamente,=
que saca los dos últimos valores (los dos que acabamos de crear) de la pila, los compara, coloca un 1 en el extremo de la pila si son iguales y un 0 en Al final de la pila si son diferentes. La?
hace estallar el nuevo valor fuera de la final de la pila, si es 0 no se ejecuta la siguiente instrucción, que en este caso es!
, en su lugar se ejecutav
, que las órdenes de los peces a moverse hacia abajo (salida de la función).Sin embargo, si es 1, entonces ha encontrado un espacio, por lo que ejecuta el
!
que es un trampolín, y eso hace que el pez omita la siguiente instrucción, que es av
, por lo que el pez continúa. Frente al pez, ve~
qué le dice que saque el último valor de la pila (confirmado como un espacio), luego el pez continúa y ejecuta la función nuevamente.Inmediatamente se le dice al pez que nade a la derecha por a
>
, luego muestra el último carácter en la pilao
(que, la primera vez que se ejecuta, es el primer carácter des
). Obtiene la longitud de la pilal
, coloca un2
al final de la pila y luego-
hace que se reste 2l
. Golpea lo?!;
que, al recordar lo que?
hace, hace que el pez se salte!
si la pila está vacía y aterriza;
, lo que finaliza el programa.A continuación, si todavía hay caracteres en la pila, ejecutamos lo
!
que hace que el pez rebote sobre;
y ejecutea6.
, que almacenaa
(AKA10
), y6
al final de la pila, que sonx, y
coordenadas para.
, que los saca del final de la pila. apilar, luego teletransporta al pez10, 6
y ejecuta la instrucción a la derecha de esa posición (ya que el pez nada a la derecha).Esto es menos complicado de lo que parece cuando te das cuenta de que la
y
posición 6 es la línea debajo de esta.x
la posición 10 es entoncesv
, y a la derecha de eso es, que es un no-op. Esto hace que el pez continúe nadando bien y realmente comience la ejecución al comienzo de la línea ...
Entonces esta es la función que agrega el texto aleatorio entre los caracteres. Es un poco bocado, pero eso es solo porque intenté hacerlo un poco más al azar. Llamemos a esto genRandomChars .
En
:{{:}l1-[rv
realidad, es la configuración de la función, y menos parte de la función en sí. El pez nada primero, lo:{{
que copia el valor al final de la pila, luego lo desplaza hacia la izquierda dos veces. Si recuerdas quei
estaba en la posición 1 de la pila, sabrías quei
ahora está al final de la pila.Luego, el pez nada sobre
:}
las copiasi
y desplaza la pila hacia la derecha, colocandoi
ambas al principio y al final de la pila.l1-[
hace que el pez coloque la longitud en el extremo de la pila, reste 1 de ella, luego[
cree una nueva pila, moviendo losl-1
valores (longitud de la pila menos 1) a la nueva pila (por lo tanto, simplemente abandonandoi
la pila anterior). Luego, el pez simplemente golpea, lorv
que invierte la pila nuevamente (creo que crear una nueva pila la invierte por alguna razón), y ordena que el pez nade hacia abajo una vez más, comenzando verdaderamente la función en el<
inferior.Entonces, actualmente el final de la pila tiene
m
y nuestro temporali
, que llamaremosti
. Inmediatamente el pez nada1-}
, lo que resta 1ti
y lo mueve al comienzo de la pila. Luego,:}
que simplemente lo copiam
y lo mueve al comienzo de la pila (poniendoti
en la posición 1 de la pila).Esto es cuando golpeamos esta pequeña cosa:
Esto es realmente muy simple. Esto
!
hace que el pez salte|
y se ejecutex
. Recordando lo quex
hace, recordamos que esto hace que los peces se muevan en 4 direcciones.|
es simplemente un espejo y hace que el pez nade de regreso ax
. Básicamente, el pez colocará 1, 2 o 3 en el extremo de la pila, y continuará moviéndose hacia la izquierda, envolviendo.Luego, el pez se ejecuta, lo
*+o
que hace que los dos últimos valores de la pila se eliminen, se multipliquen juntos, y el resultado se vuelva a presionar, luego lo mismo con la suma, luego el valor final se extrae de la pila y se generao
. Nuestra pila es ahora relativamente normal de nuevo que contiene solo [m
,ti
,s
].:}}:
hace que el valor en el extremo de la pila (básicamente las
posición 0) no se copie, luego la pila se desplaza hacia la derecha dos veces (colocándoseti
en el frente nuevamente), luegoti
se copia.?!v
debería ser bastante fácil de entender por ahora. Básicamente, siti
es 0, salimos de la función conv
, de lo contrario, ejecutamos!
y omitimosv
(haciendo otro ciclo).Si
ti
es 0 y hemos terminado de generar caracteres ligeramente aleatorios, ejecutamosv
y vemos:Nada muy lujoso aquí. Eliminamos
ti
de la pila a través de~
. ¡Entonces]
es nuevo, saca todos nuestros valores de la pila y los coloca en la pila anterior! Debido al problema de reversión invertimos conr
, a continuación, cambiar la pila de la derecha dos veces con}}~
, shufting la pila a la derecha, que nos da [m
,i
,s
], el~
es eliminar el extra duplicados[0]
desde principios de la función a medida que lo necesitaría si estábamos haciendo un bucle (pero no estamos, estamos saliendo).v
le dice al pez que nade hacia abajo y hacia adentro>34.
(invertido para mostrar el orden de ejecución), que le dice al pez que simplemente nade hacia la izquierda y hacia adentro3, 4
(¡porque.
es un salto!).3, 4
en realidad está justo a la derecha del principiowhitespaceTrimmer
, lo cual es perfecto porque estamos viajando a la izquierda.Siguiendo toda esta lógica, podemos seguir al pez hasta que la pila esté finalmente vacía y el programa salga justo después de
whitespaceTrimmer
ejecutarse.fuente
Perl 5, 81 bytes
Espero que lo siguiente te ayude a entender lo que hace el one-liner:
fuente
Clojure,
126123118122117 bytesAsigna mapas sobre el mensaje, inserta caracteres aleatorios y luego concatena el resultado.
Las instrucciones sugieren que todos los espacios se deben quitar de la cadena de resultados. Si solo se supone que se eliminan los espacios del mensaje original, puedo cambiar eso.
Sin golf:
fuente
Python 3, 127 bytes
Probablemente mucho más de lo necesario, pero este es el mío hasta ahora.
fuente
PHP, 96 bytes
Toma String como argumento 1 y Number como argumento 2
Pruébalo en línea
fuente
Python 3, 133 bytes
fuente
Nodo.js, 88 bytes
Salidas de ejemplo:
Pruébalo en línea!
fuente
C,
102100 bytes-2 bytes para omitir
continue
.Sin golf:
Uso:
fuente