Este es un método de encriptación simple que utiliza dígitos PI para codificar un mensaje, el método es simple:
La clave es solo un número entero positivo que indica dónde comienza la ventana:
Dada una cadena para encriptar, que contiene solo letras minúsculas, sin espacios, toma su longitud, luego encuentra el enésimo dígito de PI y luego procede a desplazar cada letra a la derecha por la cantidad indicada por el dígito.
Por ejemplo, si la clave es 2
y quiero codificar house
, tomo una ventana de 5 dígitos del segundo: 14159
y luego se convierte en:
h -> i
o -> s
u -> v
s -> x
e -> n
a.- Su programa / función / algoritmo recibirá dos parámetros, una cadena compuesta solo de letras minúsculas sin espacios y la clave, que será solo un entero positivo entre 1 (1 se refiere a 3) y 1000, que podría ser más o menos, ya que no estoy seguro de cuánto tiempo lleva calcular PI con dicha precisión porque:
b.- Debe calcular PI usted mismo en su código, aquí hay una página web ordenada para comparar con: Pi Day . La entrada nunca debe hacer que calcule PI más allá de los 1000 dígitos, lo que significa que la longitud (mensaje) + tecla <= 1000.
Al computar Pi, me refiero a no codificarlo en su código (tonto para un código de golf) ni usar ninguna constante incrustada en su código ni ninguna identidad trigonométrica (2 * acos (0)) ni ninguna referencia web.
c.- La salida será solo la cadena encriptada.
Esta es una pregunta de código de golf, ¡el código más corto gana!
Aceptaré la respuesta ganadora el 14 de julio de 2014.
ArcCos(-1)
?Respuestas:
CJam - 51
Entrada de ejemplo:
Salida:
Esto funciona para (longitud de cadena) + tecla <= 2000, pero es bastante lento para el intérprete en línea (todavía rápido con el intérprete de Java).
Aquí hay una versión que funciona hasta 200 y puede probarla en http://cjam.aditsu.net/ sin esperar demasiado:
fuente
Python - 370
Ok, agradable, finalmente conseguí que la cosa pi funcionara gracias a link1 y link2 .
Salida de ejemplo:
y otro:
fuente
JavaScript - 167
173176Gracias a Michael por la inteligente representación de los poderes de 16.
Esto puede calcular PI hasta el decimosexto dígito.
El caso de prueba:
fuente
m=1
y enm<<=4
lugar dem='0x1'
ym+=0
? Ahorra 3 bytes.Pitón -
321304288285La mayor parte de la versión de golf es fácil de leer y comprender. La línea final está sin golf debajo:
EDITAR # 1: simplificó la aritmética de mi módulo.
EDITAR # 2: refactorizó la fórmula BBP.
fuente
Haskell - 265
267bytes (sin E / S)p
es una versión de golf del algoritmo que se puede encontrar en http://rosettacode.org/wiki/Pi#Haskelle
es la función de codificación:No se repite si un índice está fuera del alfabeto en minúsculas. Esto significa que algunos otros caracteres pueden deslizarse en la cadena codificada:
Desafortunadamente, lleva varios segundos con desplazamientos mayores que
10 000
calcular la salida. Afortunadamente, cuando se usa el mismo desplazamiento varias veces, los dígitos solo deben calcularse la primera vez.Bonus - Decodificación
De nuevo si probamos con
isvxn
:fuente
d 2 "isvsn"
debería serd 2 "isvxn"
CoffeeScript - 148 caracteres / bytes
Mi primer código de golf
Desafortunadamente, no admite el ajuste (por lo tanto, az terminaría siendo puntuación)
Demostración en CSSDeck
Llamado con:
fuente