Para o posto de ladrões, máquina Cheapo Enigma (ladrões)
O envio de um policial consiste em um programa / função que aceita um único byte de dados e retorna um único byte de dados. Toda entrada possível deve produzir uma saída única. (Em outras palavras, sua função deve ser bijetiva)
Os ladrões tentarão criar a sua função inversa usando um código o mais curto possível. Portanto, seu objetivo é dificultar a inversão de sua função.
Você não pode usar built-ins com o único objetivo de hash ou criptografia.
Sua contagem de bytes não pode exceder 64 bytes. As soluções de 0 byte não são elegíveis para ganhar.
Formato de entrada / saída
8 bits (0 ou 1) ou um número inteiro de base 10 no intervalo de 1-256, 0-255 ou -128 a 127. Pode usar E / S padrão ou E / S de arquivo. A função também pode retornar um valor como saída. A entrada e a saída devem pertencer ao mesmo intervalo (binário, 1-256, 0-255 ou -128 a 127). O ladrão também precisará usar esse intervalo para entrada e saída.
Pontuação
A proporção da contagem de bytes é a da melhor tentativa de ladrão contra você. Menor pontuação ganha.
Você é elegível para ganhar (como policial) somente se um ladrão tentar derrotá-lo. (Este ladrão pode ser você)
Exemplo
C ++, usa intervalo de 0 a 255, 31 bytes
int x;
cin>>x;
cout<<(x+1)%256;
Possível envio de ladrão em C ++, 32 bytes
int f(int x)
{return x?x-1:255;}
Usar a mesma linguagem ou algoritmo semelhante não é um requisito
Isso dá uma pontuação de 31/32 = 0,97 para o policial e o ladrão.
fonte
Respostas:
Javascript,
118 bytes, Pontuação: 8/5Implementação simples do código cinza. A decodificação geralmente precisa de um loop inteiro. Vamos ver quem cria o menor ou mesmo sem loop!
fonte
x^x/4
vai ser mais difícil porque não deve haver builtins para ele ...^
é xor bit a bit, não exponenciação. De qualquer forma, parece mágico #C, 64 bytes, Pontuação 64/71 = 0,901
Recebe entrada no intervalo [0 255].
Experimente online! - no TIO (usando o GCC), isso produz:
Observe que em outros sistemas, ele pode produzir resultados diferentes (mas ainda válidos), pois C não exige uma
rand
implementação específica . Minha submissão é especificamente a versão em execução no TIO (como vinculada).Estou muito decepcionado por não ter conseguido que uma versão como a original (
f(x){return rand(srand(x*229))/229%256;}
) funcionasse no TIO, pois acho que é muito mais elegante. Como isso só funciona no Clang rodando no OS X, não é justo para a concorrência. Esse ainda é bastante difícil de reverter, então é o suficiente, eu acho.fonte
srand()
, então você terá que decidir se é aceitável neste formulário.Gelatina , 2/5
Experimente online para ver a tabela completa.
fonte
JavaScript, 44 bytes 22/3
Usa classificação lexicográfica (Javascript padrão) para reorganizar todos os números de 0 a 255
Experimente online!
fonte
C (gcc) ,
3227/30 bytesAgradecimentos a christoph por jogar 5 bytes.
Experimente online!
fonte
f(x){x=x?f(x*5+1&255)+1:0;}
para uma pontuação de27/30
.Javascript, 11/8 bytes
O domínio / intervalo é de 1 a 256.
fonte
x**3
ex**5
deve funcionar.JavaScript, 13 bytes 13/12
Entrada e saída estão no intervalo de 1 a 256
Experimente online!
fonte
Javascript, 27/29 bytes
Editar: intervalo / domínio é 1..256. Gerado por força bruta, mais ou menos.
fonte
Oitava , 16/6
Experimente online!
fonte
Java, 35 bytes
Domínio / intervalo são de 0 a 255
fonte
Ruby, 23 bytes
O intervalo e o domínio são 0..255. Concatene 228 para si mesmo x vezes e, em seguida, pegue o módulo de resultado 257 (0 mapeia para 0). 228 é o primeiro número mágico após 9 que funciona para esse intervalo (fornece valores distintos que não incluem 256).
fonte
Python 3, 55 bytes
O domínio / intervalo é de 0 a 255.
fonte
Python 3, 32 bytes 32/23
O domínio / intervalo é de 0 a 255.
Inverte os quatro primeiros bytes com os últimos quatro e adiciona três aos primeiros bytes.
fonte
Mathematica, 13 bytes
Usa o intervalo [1..256], embora seja igualmente válido no intervalo [0..255]. Para ver a tabela inteira, copie / cole uma das seguintes linhas de código na caixa de proteção Wolfram :
fonte
brainfuck , 37/11
Experimente online!
Não é muito bom, mas faixa de 0 a 255
fonte