Para o posto dos policiais, a máquina Cheapo Enigma (Policiais)
O envio de um ladrão consiste em um programa / função que aceita a saída do código de um policial e retorna a entrada para todas as saídas fornecidas pelo código desse policial. (Em outras palavras, você deve escrever a função inversa)
Você não pode usar built-ins com o único objetivo de hash ou criptografia.
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 (como em binário, 1-256, 0-255 ou -128 a 127), que também deve ser o mesmo intervalo usado pelo policial.
Pontuação
Proporção entre a contagem de bytes da policial e a contagem de bytes. Maior pontuação ganha.
Você pode enviar uma tentativa de ladrão contra seu próprio código de policial para referência. (É claro que este código não é elegível para ganhar)
Notificação
Edite a resposta do policial correspondente para incluir sua nova contagem de bytes e a proporção correspondente.
fonte
Respostas:
JavaScript de Christoph , 25/8
(intervalo 0-255)
Infelizmente,
f=(y,x)=>y?f(y/2,x^y):x
funciona para todos os valores, exceto0
.Nota técnica
Usamos, em
y/2
vez dey>>1
salvar, um byte. Isso está abusando do fato de que qualquer valor dey
eventualmente será arredondado para0
devido a um fluxo aritmético .fonte
JavaScript por fəˈnɛtɪk , 13/19
(intervalo 1-256)
fonte
C, por Dave de 64/
959285Experimente aqui !
C, versão mais curta,
64/8971Este é mais específico da implementação, mas funciona no TIO. Mesmo tamanho que a solução PHP, não consegui obtê-lo mais curto que isso.
Experimente aqui !
fonte
JavaScript por fəˈnɛtɪk, 13/12
Outro inverso multiplicativo.
fonte
JavaScript , 13/11
Experimente online!
fonte
Geléia , 22/3 = 7 1/3
Experimente online!
A apresentação bobina por fənɛtɪk foi voltar a n th ( 0 indexados) número decimal lexicograficamente classificados usando o domínio [0255] .
A primeira vez que literalmente revertida a operação descrita,
⁹ḶDÞi⁸‘
- leva a gama reduzida de 256 ,⁹Ḷ
eÞ
instrui a classificá-lo por uma função-chave de conversão para uma lista decimal,D
; em seguida, localiza o índice de,i
, a entrada,⁸
e subtrai 1 ,‘
(listas de geléia são um indexados).Depois, joguei o golfe desenfileirando a lista classificada com
Ḋ
. Quando um item não é encontrado,i
retorna 0 conforme o necessário para o primeiro elemento removido ( 0 ), enquanto todo o resto é encontrado um índice anteriormente, permitindo a remoção do decremento‘
, que por sua vez fornecei
entrada implícita à direita da esquerda (somente ) entrada para o link monádico.fonte
Javascript por Magenta, 32/23
O código basicamente alterna os 4 bits inferiores e os superiores e faz uma adição de módulo em uma parte.
fonte
Javascript por histocrat, 27/29
Infelizmente, são necessários dois códigos rígidos para quebrá-lo.
Observe que a função original não mapeia nenhum valor para 130, mas mapeia um valor para 256 .fonte
PHP, Pontuação 64/71
Felizmente, o PHP
rand
apenas encaminha para o stdlib como C. Portanto, isso funciona enquanto estivermos usando o mesmo stdlib. Isso significa que ele funciona no TIO, mas não no, por exemplo, sandbox.onlinephpfunctions.com . A versão atual do código de Dave apenas repete uma sequência pseudo-aleatória e retorna o enésimo valor exclusivo, então eu acho que pode haver respostas muito mais curtas se uma linguagem de golfe também usar o stdlib.Aqui está uma implementação do código de Dave que não depende do stdlib. Isso também pode ajudar.
fonte
srand(1)
? Também aqui está uma Experimente online!srand(x&&f(x-1))
isso para apenas se,x==0
portanto, for propagado0
na primeira rodada. Não sei por que as próximas chamadas não mudam.srand(0)
quebrasrand
(veja aqui ). Eu acho quesrand(0)
é automaticamente promovido asrand(1)
. Eu acho que se você pudesse usar uma semente diferente a cada vez, seria muito mais difícil quebrá-la.Oitava , 16/18
Experimente online!
fonte
Gelatina , 2/5 (não concorrente)
Experimente online para ver a tabela completa.
fonte
Gelatina , 8/5
Experimente online para ver a tabela completa.
fonte
Geléia , 16/6
Experimente online para ver a tabela completa.
fonte
Jelly , 11/8
Experimente online para ver a tabela completa.
Caso envios de assaltantes em idiomas diferentes não sejam permitidos no futuro, chamo dibs na solução a seguir.
fonte
Jelly , 35/7
Experimente online para ver a tabela completa.
fonte
C (gcc) por Bijan, 32/30
Nos divertimos jogando golfe, obrigado!
x=
permite pular o retorno com gcc e tcc (você pode alterar sua resposta para incluí-lo).g(--x)*205+51&255
é o inverso.fonte
Geléia , 37/11
Usa o mesmo formato de E / S que o policial. Não tenho certeza se isso é necessário.
Experimente online para ver a tabela completa.
Como funciona
Para a entrada n , a resposta do policial calcula f (n): = ((((n + 5)% 256 × 2)% 256 + 2)% 256 × 9)% 256) . Como
%
é um operador linear, isso é equivalente a f (n) = (((n + 5) × 7 + 2) × 9)% 256 . Expandindo o termo certo, obtemos f (n) = (63n + 333)% 256 = (63n + 77)% 256 .Inverter isso é bastante simples. Para desfazer a adição, basta subtrair 77 . Além disso, como 191 × 63% 256 = 12033% 256 = 1 , segue-se que 191 é o módulo inverso 256 de 63 , portanto, multiplicar por 191 desfaz a multiplicação por 63 . Dessa forma, g (n) = (n - 77) × 191% 256 define o inverso de f .
fonte