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.
źródło
Odpowiedzi:
JavaScript,
118 bajtów, wynik: 8/5Prosta implementacja szarego kodu. Dekodowanie zwykle wymaga całej pętli. Zobaczmy, kto wymyśli najmniejszy, a nawet bez pętli!
źródło
x^x/4
będzie trudniej, ponieważ nie powinno się na to wbudować ...^
jest bitowy xor, a nie potęgowanie. W każdym razie wygląda magicznieC, 64 bajty, wynik 64/71 = 0,901
Pobiera dane z zakresu [0 255].
Wypróbuj online! - w TIO (przy użyciu GCC) daje to:
Zauważ, że w innych systemach może generować inne (ale nadal prawidłowe) dane wyjściowe, ponieważ C nie wymaga konkretnej
rand
implementacji. Moje zgłoszenie dotyczy konkretnie wersji działającej na TIO (jako link).Jestem bardzo rozczarowany, że nie byłem w stanie uzyskać wersji takiej jak moja oryginalna (
f(x){return rand(srand(x*229))/229%256;}
) do pracy na TIO, ponieważ uważam, że jest to o wiele bardziej eleganckie. Ponieważ działa to tylko na Clang z systemem OS X, nie jest to uczciwe dla konkurencji. Ten wciąż jest dość niewygodny do cofnięcia, więc chyba wystarczy.źródło
srand()
, więc musisz zdecydować, czy jest to dopuszczalne w tej formie.Galaretka , 2/5
Wypróbuj online, aby zobaczyć cały stół.
źródło
JavaScript, 44 bajty 22/3
Używa sortowania leksykograficznego (domyślnie Javascript), aby zmienić kolejność wszystkich liczb od 0-255
Wypróbuj online!
źródło
C (gcc) ,
3227/30 bajtówDzięki Christoph za grę w golfa 5 bajtów.
Wypróbuj online!
źródło
f(x){x=x?f(x*5+1&255)+1:0;}
na wynik27/30
.JavaScript, 11/8 bajtów
Domena / zakres wynosi od 1 do 256.
źródło
x**3
ix**5
powinien działać.JavaScript, 13 bajtów 13/12
Wejścia i wyjścia mieszczą się w zakresie 1-> 256
Wypróbuj online!
źródło
JavaScript, 27/29 bajtów
Edycja: Zakres / Domena to 1..256. Generowane brutalnie, mniej więcej.
źródło
Oktawa , 16/6
Wypróbuj online!
źródło
Java, 35 bajtów
Domena / zakres to 0-255
źródło
Rubinowy, 23 bajty
Zasięg i dziedzina to 0..255. Połącz 228 ze sobą x razy, a następnie weź wynik modulo 257 (0 map na 0). 228 to pierwsza magiczna liczba po 9, która działa dla tego zakresu (daje wyraźne wartości, które nie obejmują 256).
źródło
Python 3, 55 bajtów
Domena / zakres wynosi 0–255.
źródło
Python 3, 32 bajty 32/23
Domena / zakres wynosi 0–255.
Odwraca pierwsze cztery bajty z ostatnimi czterema i dodaje trzy do pierwszych bajtów.
źródło
Mathematica, 13 bajtów
Używa zakresu [1..256], chociaż jest równie poprawny w zakresie [0..255]. Aby zobaczyć całą tabelę, skopiuj / wklej jeden z następujących wierszy kodu do piaskownicy Wolfram :
źródło
pieprzenie mózgu , 37/11
Wypróbuj online!
Niezbyt dobry, ale zakres 0–255
źródło