O César César é um código de substituição muito simples, em que cada letra é deslocada por um deslocamento fixo (repetindo Z a A). Da mesma forma, também podemos usar uma cifra de César para o conjunto de caracteres ASCII imprimíveis. Esses são os 95 caracteres dos pontos de código 0x20 a 0x7E. Para um determinado deslocamento d
, mapeamos o ponto de código C
para
(C - 32 + d) % 95 + 32
que muda todos os caracteres por a d
e circula de volta ~
para o espaço. Caracteres fora desse intervalo (caracteres de controle como novas linhas, guias e caracteres fora do intervalo ASCII) não são afetados.
Você deve escrever dois programas ou funções (potencialmente em idiomas diferentes), que assumem um deslocamento d
e uma string. O primeiro programa deve retornar ou imprimir o código César da entrada. O segundo programa deve retornar ou imprimir o código de César inverso (ou seja, usando deslocamento -d
). Você pode receber informações via STDIN, argumento de linha de comando ou argumento de função.
Para tornar as coisas mais interessantes, o segundo programa deve ser um código de César do primeiro programa. Ou seja, se você passar o código fonte do primeiro programa para si mesmo, para algum deslocamento diferente de zero d
, a saída deverá ser o segundo programa.
Ambos os programas, bem como as cadeias de entrada, devem conter apenas caracteres ASCII imprimíveis, novas linhas e guias. Nenhum dos programas pode conter comentários ou ler seu próprio código-fonte, nome de arquivo ou ID do processo, direta ou indiretamente.
Isso é código de golfe, então a resposta mais curta (em bytes) vence. Como os dois programas devem ter o mesmo tamanho, você só precisa contar uma vez.
fonte
Python 2, 147
Claramente, não pensei muito nisso, pois seria inútil em Python. Existem simplesmente dois programas separados, com o não utilizado envolto em uma string.
O deslocamento entre os dois programas é 39.
frente
Define a função Z que aceita uma string Unicode e um deslocamento.
Inverso
Define a função que eu aceito uma string Unicode e um deslocamento.
fonte
Python 3-248 bytes
Meu objetivo era fazer isso como um liner Python. Objetivo de sucesso, mas agora não posso ser incomodado jogando golfe.
Criptografar:
Descriptografar:
Editar: corrigido para não afetar caracteres fora do intervalo ASCII imprimível
O deslocamento de criptografar para descriptografar é 20. Use inserindo o deslocamento primeiro e depois a sequência, por exemplo
Explicação
As seguintes transformações são a chave:
O primeiro permite o uso de
or
, enquanto o segundo ignora uma string por ponto e vírgula.Observe que
"".__doc__[2]
retorna a stringr
(retirada destr
). Isso é necessário para evitar que a cadeia de caracteres entre aspas simples no programa de descriptografia tenha aspas dispersas no meio.fonte
Ruby,
131125 bytesAqui está minha própria submissão (que eu escrevi anteriormente como prova de conceito, mas consegui violar minhas próprias regras de alguma forma). Não estou reutilizando nenhum código entre os dois envios (quero que vocês superem isso, afinal), mas, em vez disso, consiste em duas linhas, uma das quais é transformada em uma string com sem sentido.
Cifra para frente:
Cifra inversa:
Ambos os trechos definem uma função (chamada
Y
no primeiro eJ
no segundo), que pega um número inteiro e uma sequência e imprime a sequência transformada em STDOUT. O deslocamento entre as duas partes do código é40
.fonte
oOo CODE ,
750744 bytes, todo o código usado nos dois programasMuito tempo, mas provavelmente é a ferramenta certa para fazer isso ...
Criptografar:
Descriptografar:
Traduções de Brainfuck:
oOo CODE é uma variante Brainfuck, onde apenas o caso das letras é importante.
Ele pega o primeiro byte e usa seu código de caractere como
d
(então uma nova linha significa d = 10). O restante da entrada é a sequência. EOF é 0.fonte
GolfScript,
9564 bytes, todo o código usado nos dois programasCriptografar:
Descriptografar:
Formato de entrada:
Explicação
Descriptografar:
Criptografar:
fonte
Javascript (ES7 Draft) -
167165 bytesTomando emprestado o uso de strings do @feersum e o uso de ponto e vírgula do @MartinButtner;)
Criptografar:
Descriptografar:
Deslocamento para usar: 55
fonte
or <empty string> and <function>
e não apenasor <function>
.> <> (Peixe) , 467 bytes
Criptografar:
Descriptografar:
Os dois programas são compensados por 3 e recebem a entrada do formulário:
O deslocamento deve ter 2 dígitos, portanto, um deslocamento de 5 precisa ser inserido como
05
.Esse é um envio longo, mas quase todos os caracteres não preenchidos são usados pelos dois programas . Há muito espaço em branco que definitivamente pode ser jogado fora, mas achei que o programa seria mais interessante dessa maneira.
Esta imagem destaca os caracteres usados pelos dois programas.
Explicação
A principal construção que torna isso possível é
_{} -> b~!
, o que permite ignorar arbitrariamente os caracteres no programa de descriptografia. Quão?Em suma, o programa de criptografia não faz nada, mas o programa de descriptografia ignora a próxima instrução. Isso pode ser estendido para
_{}! -> b~!$
, o que permite ignorar arbitrariamente os caracteres no programa de criptografia .Além disso, a maior parte do restante do programa está empurrando números, realizando operações nesses números e encontrando maneiras de exibi-los. Por exemplo, uma construção útil é
~~ -> ""
, que exibe dois valores para o programa de criptografia, mas não empurra nada no programa de descriptografia.> <>, 149 bytes
Aqui está a versão menos interessante, que usa o fato de que as instruções não passadas são efetivamente comentários em linguagens 2D.
Criptografar:
Descriptografar:
Os dois programas são deslocados em 84 e recebem a entrada da mesma maneira que acima. A primeira instrução decide qual metade do programa deve ser executada,
i
mantendo (entrada) o fluxo do programa para a direita no programa de criptografia e^
redirecionando o fluxo do programa para cima (circulando e retornando de baixo) no programa de descriptografia.Explicação
Para a metade relevante do programa de criptografia (o programa de descriptografia é semelhante):
Ferramenta de codificação
Isso não está relacionado ao restante da postagem acima, mas pensei em publicá-la porque preciso usá-la: P
fonte
Perl - 131
Ele recebe entrada da linha de comando args.
Mudar para 26 dá o outro:
fonte