Per posta di ladri, macchina Cheapo Enigma (ladri)
L'invio di un poliziotto consisterà in un programma / funzione che accetta un singolo byte di dati e restituisce un singolo byte di dati. Ogni possibile input deve produrre un output unico. (In altre parole, la tua funzione deve essere biiettiva)
I ladri tenteranno di creare la tua funzione inversa usando un codice il più breve possibile. Quindi il tuo obiettivo è rendere la tua funzione difficile da invertire.
Non è possibile utilizzare i componenti integrati che hanno il solo scopo di eseguire l'hashing o la crittografia.
Il conteggio dei byte non può superare i 64 byte. Le soluzioni a 0 byte non sono idonee alla vincita.
Formato di input / output
8 bit (0 o 1) o un numero intero di base 10 nell'intervallo 1-256, 0-255 o da -128 a 127. Può utilizzare I / O standard o I / O di file. La funzione può anche restituire un valore come output. Ingresso e uscita devono appartenere allo stesso intervallo (binario, 1-256, 0-255 o da -128 a 127). Il ladro dovrà inoltre utilizzare questo intervallo per l'input e l'output.
punteggio
Il rapporto del tuo byte conta con quello del miglior tentativo di ladro contro di te. Il punteggio più basso vince.
Hai diritto a vincere (come poliziotto) solo se un ladro ha tentato di sconfiggerti. (Questo ladro potresti essere tu)
Esempio
C ++, utilizza l'intervallo 0-255, 31 byte
int x;
cin>>x;
cout<<(x+1)%256;
Possibile invio di ladri in C ++, 32 byte
int f(int x)
{return x?x-1:255;}
L'uso della stessa lingua o di un algoritmo simile non è un requisito
Questo dà un punteggio di 31/32 = 0,97 sia al poliziotto che al ladro.