Implemente este cifrado de clave
Objetivo
Use el algoritmo (explicado en la sección Algoritmo) para implementar un determinado cifrado.
El programa debe leer la entrada de STDIN o el equivalente disponible más cercano, usar el algoritmo para generar el texto cifrado y una clave.
El texto cifrado y la clave se escribirán en STDOUT o el equivalente disponible más cercano. Se permite cualquier formato, siempre que emita el texto cifrado y la clave.
Algoritmo
Convierta los caracteres de la cadena en los valores ASCII respectivos. Por ejemplo:
Hello -> 72 101 108 108 111
A continuación, deberá generar una clave siempre que la cadena con números aleatorios en el rango de 0-9.
Hello -> 62841
Agregue los enteros en la secuencia de números aleatorios a los valores ASCII de la cadena. En los ejemplos anteriores, 72 se convertiría en 78 y 101 se convertiría en 104.
72 + 6 = 78, 101 + 2 = 103, 108 + 8 = 116, etc
A continuación, convierta los nuevos valores a caracteres. En los ejemplos anteriores, el texto se Hello
ha convertido Ngtpp
.
Ejemplos
(Estos son simplemente ejemplos de cómo se vería la salida . La salida puede variar y variará).
Hello World
Lfrlu)_supg
41606984343
This will be encoded
Zhjs$~koo gj$iuhofgj
60104723305544750226
Reglas
- Puede suponer que la entrada solo contendrá caracteres en el rango az, AZ y espacios.
- Los envíos deben ser programas o funciones completos.
- Las presentaciones se puntuarán en bytes.
- Las lagunas estándar están prohibidas.
- Este es el código de golf, por lo que gana el código más corto.
(Este es uno de mis primeros desafíos, si hay algo mal con él, no dude en decirme cómo podría mejorarlo).
fuente
preferably with the format (ciphertext)\n(key).
"características preferidas" y el código de golf no se mezclan muy bien. Debe hacer que sea obligatorio o permitir otros formatos de salida. 3. ¿La clave debe imprimirse sin espacios? ¿Qué pasa con imprimirlo en formato de lista, por ejemplo[0, 5, 2, ...]
?Respuestas:
Jalea ,
129 bytesPruébalo en línea!
Cómo funciona
fuente
Python 3, 130 bytes
Gracias a @Rod por señalar un error
Una función que toma la entrada a través del argumento como una cadena e imprime en STDOUT.
Cómo funciona
Pruébalo en Ideone
fuente
m=10**len(x);k=str(randint(m,m*10))[1:];
e incluso guarda un byte en el proceso c:randint
es inclusivo, lo que significa que debería hacerlom*10-1
. Acabo de pensar en una forma de arreglarlo para el mismo recuento de bytes.Pyth - 16 bytes
Esperando la decisión de OP sobre los formatos de salida.
Test Suite .
fuente
En realidad, 17 bytes
Pruébalo en línea!
Explicación:
fuente
CJam - 14 bytes
Cuando vi el código ascii matemático, supe que tenía que escribir una respuesta CJam.
Pruébelo en línea aquí .
fuente
MATL, 13 bytes
El resultado se ve así:
Pruébalo en línea!
Explicación:
fuente
r
oYr
PowerShell v2 +,
7977 bytesToma datos
$n
, recorre cada personaje y obtiene unRandom
elemento de0..9
cada iteración. Almacena esos números (como una matriz) en$x
. Tubos que se agrupan en otro bucle. Cada iteración, toma el elemento actual$_
, lo agrega al carácter posicional cortado de$n
(conversión implícita char-to-int), luego se vuelve a emitir como[char]
. Deja eso en la tubería. Eso está encapsulado en parens y-join
editado juntos para formar la palabra. Eso queda en la tubería. Además, el número$x
también se-join
edita y se deja en la tubería. Estos se imprimen implícitamente con unWrite-Output
al final de la ejecución, lo que hace que se impriman con una nueva línea de forma predeterminada.Ejemplo
fuente
C #,
252247245232216 BytesEl tamaño es bastante malo en comparación con las otras soluciones, pero sin embargo ...
Esta es mi segunda respuesta a un codegolf y soy bastante principiante considerando C #, así que agradecería saber cómo acortarlo :)
Sin golf:
static
de la clase pfuente
b++<i.Count()
y dejar vacía la tercera cláusula? Además, no creo que necesite una nueva línea final, por lo que la última llamada aWriteLine
podría serWrite
en su lugar.var
. es decir, envar c=
lugar destring c=
afeitarse unos pocos bytes.Console.ReadLine()
como cadena?i.Length
es más corto quei.Count()
, no necesitará System.Linq. La cadena tiene un indexador de caracteres. También la creación de nuevos objetos al azar en el bucle es menos bytes:new Random().Next(10)
.CJam, 11 bytes
Pruébalo en línea!
Cómo funciona
fuente
05AB1E ,
1817 bytesExplicación
Pruébalo en línea
fuente
Python 3, 112 bytes
c es una función que devuelve el texto cifrado y la clave
Aquí hay un código que hace lo mismo y es un poco más legible
Salida:
fuente
PHP,
638682 bytesEditar: olvidé imprimir la clave ...
Gracias a Alex Howansky por salvarme 4 bytes.
La entrada se da a través de un argumento de línea de comando. Toma cada carácter en la cadena y agrega un int aleatorio de 0-9 a su código ASCII, luego convierte el código nuevamente a ASCII. Se agrega cada número aleatorio
$s
, que se imprime al final.fuente
$s.=$r
después de la segunda semi en el bucle for, guardando un byte porque puede volcar su semi final. Entonces su bucle solo será una declaración para que pueda cortar las llaves de envoltura, ahorrando 2 bytes más. Luego, al final, puede poner el$s
interior de la cadena entre comillas, ahorrando al.
operador un byte más. :)J, 32 bytes
Python equivalente:
fuente
Perl, 34 bytes
Incluye +1 para
-p
fuente
Perl, 65 bytes
Me llevó un tiempo descubrir cómo obtener la entrada sin una nueva línea al final. Lo toma como una línea de comando arg
fuente
$;
no comienza vacía, por lo que imprime el contenido anterior y el rand nunca puede generar 9. Son fáciles de corregir y el uso de STDIN<>=~/./g
. Y no,int
en perl se trunca hacia 0, no se redondea.perl -wle 'print int 8.6'
salidas8
Python 2,
8499 bytesUtiliza el
id()
valor de la cadena para generar números aleatorios.Intentalo
fuente
map(chr,[ord(a)+int(b)for a,b in zip(x,y)])
amap(lambda x,y:chr(ord(x)+int(y)),x,y)
? que debe salvar algoSenva , 74 bytes
Aquí está el programa más corto que he hecho:
¿Una pequeña explicación? (Nota: BM significa memoria de respaldo ):
Eso parece más grande ahora, cierto: p? Tal vez sea posible optimizar este código, pero por el momento es el más corto que he encontrado.
fuente
C #, 174 bytes
Sin golf:
Bastante sencillo, de verdad.
fuente
Perl 6: 55 o 70 bytes
Como una función anónima que toma un parámetro de cadena y devuelve una lista de dos cadenas (54 caracteres, 55 bytes) :
Como un programa que lee desde STDIN y escribe en STDOUT (69 caracteres, 70 bytes) :
fuente