Dla stanowiska rabusiów maszyna Cheapo Enigma (Rabusie)
Zgłoszenie gliniarza będzie się składało z programu / funkcji, która akceptuje jeden bajt danych i zwraca jeden bajt danych. Każde możliwe wejście musi dawać unikalny wynik. (Innymi słowy, twoja funkcja musi być bijectywna)
Rabusie spróbują utworzyć twoją funkcję odwrotną, używając możliwie najkrótszego kodu. Twoim celem jest utrudnienie odwrócenia funkcji.
Nie można używać wbudowanych funkcji, których jedynym celem jest mieszanie lub szyfrowanie.
Liczba bajtów nie może przekraczać 64 bajtów. Rozwiązania 0-bajtowe nie kwalifikują się do wygranej.
Format wejścia / wyjścia
8 bitów (0 lub 1) lub liczba całkowita base-10 w zakresie 1-256, 0-255 lub od -128 do 127. Może używać standardowych we / wy lub we / wy pliku. Funkcja może również zwrócić wartość jako wynik. Wejścia i wyjścia powinny należeć do tego samego zakresu (binarny, 1-256, 0-255 lub od -128 do 127). Złodziej będzie również zobowiązany do korzystania z tego zakresu na wejściu i wyjściu.
Punktacja
Stosunek twojego bajtu liczy się do próby najlepszej rabusia przeciwko tobie. Najniższy wynik wygrywa.
Możesz wygrać (jako policjant) tylko wtedy, gdy złodziej próbował cię pokonać. (Ten rabuś może być tobą)
Przykład
C ++, używa zakresu 0-255, 31 bajtów
int x;
cin>>x;
cout<<(x+1)%256;
Możliwe złożenie rabusia w C ++, 32 bajty
int f(int x)
{return x?x-1:255;}
Używanie tego samego języka lub podobnego algorytmu nie jest wymagane
Daje to wynik 31/32 = 0,97 zarówno gliniarzowi, jak i rabusiom.