Este é um método simples de criptografia que usa dígitos PI para codificar uma mensagem; o método é simples:
A chave é apenas um número inteiro positivo que indica onde a janela é iniciada:
Dada uma cadeia de caracteres para criptografar, contendo apenas letras minúsculas, sem espaços, você obtém seu comprimento e, em seguida, encontra o N-ésimo dígito do PI e, em seguida, muda cada letra para a direita pela quantidade indicada pelo dígito.
Por exemplo, se a chave é 2
e quero codificar house
, pego uma janela de 5 dígitos do segundo: 14159
e então ela se torna:
h -> i
o -> s
u -> v
s -> x
e -> n
a.- Seu programa / função / algoritmo receberá dois parâmetros, uma sequência composta apenas de letras minúsculas sem espaços e a chave, que será apenas um número inteiro positivo entre 1 (1 refere-se a 3) e 1000, o que poderia ser mais ou menos, pois não tenho certeza de quanto tempo leva para calcular o PI com a precisão, porque:
b.- Você deve calcular o PI por conta própria no código, aqui está uma página interessante para comparar com: Dia do Pi . A entrada nunca deve permitir que você calcule o PI além dos 1000 dígitos, o que significa que o comprimento (mensagem) + chave <= 1000.
Ao calcular o Pi, quero dizer não codificá-lo em seu código (bobagem para um código de golfe), nem usar qualquer constante incorporada em seu código, nem nenhuma identidade trigonométrica (2 * acos (0)) nem qualquer referência na web.
c.- A saída será apenas a string criptografada.
Esta é uma questão de código de golfe, código mais curto ganha!
Aceitarei a resposta vencedora em 14 de julho de 2014.
ArcCos(-1)
?Respostas:
CJam - 51
Exemplo de entrada:
Resultado:
Isso funciona para (comprimento da string) + chave <= 2000, mas é bastante lento para o intérprete online (ainda rápido com o interpretador java).
Aqui está uma versão que funciona até 200 e você pode tentar em http://cjam.aditsu.net/ sem esperar muito:
fonte
Python - 370
Ok, bom, finalmente consegui trabalhar com o pi graças ao link1 e link2 .
Exemplo de saída:
e outro:
fonte
JavaScript - 167
173176Agradecimentos a Michael pela representação inteligente dos poderes de 16.
Isso pode calcular o PI até o 16º dígito.
O caso de teste:
fonte
m=1
e emm<<=4
vez dem='0x1'
em+=0
? Salva 3 bytes.Python -
321304288285A maior parte da versão golfada é fácil de ler e entender. A linha final é não destruída abaixo:
EDIT # 1: simplificou a aritmética do meu módulo.
EDIT # 2: refatorou a fórmula BBP.
fonte
Haskell - 265
267bytes (sem E / S)p
é uma versão em golfe do algoritmo que pode ser encontrada em http://rosettacode.org/wiki/Pi#Haskelle
é a função de codificação:Não circula se um índice estiver fora do alfabeto em minúsculas. Isso significa que alguns outros caracteres podem escorregar na cadeia codificada:
Infelizmente, leva alguns segundos com deslocamentos maiores que
10 000
para calcular a saída. Felizmente, ao usar o mesmo deslocamento várias vezes, os dígitos precisam ser calculados apenas na primeira vez.Bônus - Decodificação
Novamente, se testarmos com
isvxn
:fonte
d 2 "isvsn"
deve serd 2 "isvxn"
CoffeeScript - 148 caracteres / bytes
Meu primeiro código Golf
Infelizmente, ele não suporta quebra automática (então az acabaria sendo pontuação)
Demonstração no CSSDeck
Chamado com:
fonte