Wyzwanie
Proste wyzwanie „szpieg kontra szpieg”.
Napisz program o następujących specyfikacjach:
- Program może być napisany w dowolnym języku, ale nie może przekraczać 512 znaków (przedstawionych w bloku kodu na tej stronie).
- Program musi zaakceptować 5 podpisanych 32-bitowych liczb całkowitych jako dane wejściowe. Może mieć postać funkcji, która akceptuje 5 argumentów, funkcji, która akceptuje pojedynczą tablicę 5-elementową lub kompletnego programu, który odczytuje 5 liczb całkowitych z dowolnego standardowego wejścia.
- Program musi wypisać jedną 32-bitową liczbę całkowitą ze znakiem.
- Program musi zwrócić 1 wtedy i tylko wtedy, gdy pięć wejść, interpretowanych jako sekwencja, odpowiada określonej sekwencji arytmetycznej wybranej przez programistę, zwanej „kluczem”. Funkcja musi zwrócić 0 dla wszystkich innych wejść.
Sekwencja arytmetyczna ma właściwość polegającą na tym, że każdy kolejny element sekwencji jest równy swojemu poprzednikowi plus pewna stała stała a
.
Na przykład 25 30 35 40 45
jest sekwencją arytmetyczną, ponieważ każdy element sekwencji jest równy swojemu poprzednikowi plus 5. Podobnie 17 10 3 -4 -11
jest sekwencją arytmetyczną, ponieważ każdy element jest równy jego poprzednikowi plus -7.
Sekwencje 1 2 4 8 16
i 3 9 15 6 12
nie są sekwencjami arytmetycznymi.
Kluczem może być dowolna wybrana przez ciebie sekwencja arytmetyczna, z jedynym ograniczeniem, że sekwencje obejmujące przepełnienie liczb całkowitych są niedozwolone. Oznacza to, że sekwencja musi być ściśle rosnąca, ściśle malejąca lub mieć wszystkie elementy równe.
Jako przykład załóżmy, że wybierasz klucz 98021 93880 89739 85598 81457
. Twój program musi zwrócić 1, jeśli dane wejściowe (w sekwencji) są zgodne z tymi pięcioma liczbami, a 0 w przeciwnym razie.
Należy pamiętać, że środki ochrony klucza powinny być opracowane według własnego projektu. Również rozwiązania probabilistyczne, które mogą zwracać wyniki fałszywie dodatnie z dowolnym niezerowym prawdopodobieństwem, są niedozwolone. W szczególności nie używaj żadnych standardowych skrótów kryptograficznych, w tym funkcji bibliotecznych dla standardowych skrótów kryptograficznych.
Punktacja
Najkrótsze niezłamywane materiały na liczbę znaków zostaną ogłoszone zwycięzcami.
W przypadku jakichkolwiek nieporozumień prosimy pytać lub komentować.
Kontr-wyzwanie
Wszystkich czytelników, w tym tych, którzy przesłali własne programy, zachęca się do „łamania” zgłoszeń. Zgłoszenie jest łamane, gdy jego klucz jest publikowany w powiązanej sekcji komentarzy. Jeśli przesłanie trwa 72 godziny bez modyfikacji lub krakowania, jest uważane za „bezpieczne”, a wszelkie kolejne sukcesy w krakowaniu będą ignorowane ze względu na konkurs.
Zobacz „Zrzeczenie się odpowiedzialności” poniżej, aby uzyskać szczegółowe informacje na temat zaktualizowanych zasad oceny wyników crackingu.
Zgłoszone zgłoszenia są eliminowane ze sporów (pod warunkiem, że nie są „bezpieczne”). Nie należy ich edytować. Jeśli czytelnik chce złożyć nowy program, powinien to zrobić w osobnej odpowiedzi.
Krakersy o najwyższym wyniku zostaną ogłoszone zwycięzcami wraz z twórcami zwycięskich programów.
Proszę nie łamać własnego zgłoszenia.
Powodzenia. :)
Tabela liderów
Klasyfikacja przedostatnia (w oczekiwaniu na bezpieczeństwo zgłoszenia Dennisa CJam 49).
Bezpieczne szafki
- CJam 49, Dennis
- CJam 62, Dennis bezpieczny
- CJam 91, Dennis bezpieczny
- Python 156, Maarten Baert bezpieczny
- Perl 256, bezpieczny dla dzieci
- Java 468, Bezpieczne geobity
Niepowstrzymani krakersy
- Peter Taylor [Ruby 130, Java 342, Mathematica 146 *, Mathematica 72 *, CJam 37]
- Dennis [Pyth 13, Python 86 *, Lua 105 *, GolfScript 116, C 239 *]
- Martin Büttner [Javascript 125, Python 128 *, Ruby 175 *, Ruby 249 *]
- Tyilo [C 459, JavaScript 958 *]
- freddieknets [Mathematica 67 *]
- Ilmari Karonen [Python27 182 *]
- azotawy [C 212 *]
* przesłanie niezgodne
Oświadczenie (zaktualizowane 23.15 EST, 26 sierpnia)
Ponieważ problemy z punktowaniem w końcu osiągnęły masę krytyczną (biorąc pod uwagę, że dwie trzecie zgłoszonych do tej pory zgłoszeń są niezgodne), umieściłem w rankingu najlepszych crackerów pod względem liczby zgłoszonych zgłoszeń (pierwotne) i całkowitej liczby znaków w zgłoszeniach zgłoszonych do złamania (wtórny).
Tak jak poprzednio, dokładnie zgłoszone pęknięcia, długość zgłoszeń oraz ich status zgodności / niezgodności są oznaczone, aby czytelnicy mogli wyciągać własne rankingi, jeśli uważają, że nowe oficjalne rankingi są niesprawiedliwe.
Przepraszam za zmianę zasad w późnej fazie gry.