W bardzo nietypowym wypadku z udziałem małej próbki radu, porażonego prądem wieloryba i trzech gumowatych niedźwiedzi, część kodu źródłowego The Management ™ została zmutowana. Mało kto wie, że zarząd Management ™ wiedział, że to właściwie policjanci © byli odpowiedzialni za próbę udaremnienia „złych” planów zarządzania ™. Więc Robbers® został zatrudniony w celu odzyskania oryginalnego kodu, bo kto czasami nie lubi być zły?
Uwaga: To wyzwanie było w dużej mierze zainspirowane przez Rozszyfrowanie kodu źródłowego .
Opis
To wyzwanie dla gliniarzy i rabusiów .
- Do policjantów będzie napisanie programu (zmutowana kod), który wykonuje zadania nr 1 (a także napisać program, który wykonuje zadania nr 2, ale jest trzymana w tajemnicy).
- W rabusie będą próbować odwrócić „mutacja” i zmienić ten oryginalny kod do kodu, który wykonuje zadania # 2.
W tym wyzwaniem, Zadanie nr 1 będzie wysyłać n
th liczba pierwsza i Zadanie nr 2 będzie wyjście z n
th liczby Fibonacciego (który jest w jakiś sposób zło, zgodnie z Cops © każdym razie). Sekwencja Fibonacciego zdefiniowany jako ( n=1
→ 1
; n=2
→ 1
; n=3
→ 2
, ...), i z liczb pierwszych jest zdefiniowany jako ( n=1
→ 2
; n=2
→ 3
; n=3
→ 5
, ...).
Celem gliniarzy jest zminimalizowanie różnicy między programami, które wykonują Zadanie nr 1 i Zadanie nr 2, jednocześnie uniemożliwiając złodziejom odtworzenie kodu wykonującego Zadanie nr 2.
Zasady gliny
Policjanci napiszą dwa programy (jeden, który wykonuje Zadanie nr 1 i drugi, który wykonuje Zadanie nr 2) i podają do wiadomości publicznej następujące informacje:
- Pierwszy program (czyli wyjść z
n
th liczba pierwsza) - Edit odległość Levenshteina pomiędzy pierwszym i drugim programie programu
- Język programowania, w którym napisane są oba programy (musi być ten sam język dla obu programów)
Oba programy dotyczą następujących ograniczeń:
- Muszą mieć maksymalnie 128 znaków.
- Muszą używać tylko ASCII do wydruku (oraz nowych linii, które są również dozwolone).
- Uruchomienie musi zająć mniej niż 10 sekund
n=45
i nie jest wymagane, aby wygenerować poprawny wynik dla żadnego z nichn>45
. - Nie mogą używać żadnych funkcji mieszających ani kryptograficznych.
Zasady rabusiów
Rabuś spróbuje zmienić program gliniarza (który wykonuje Zadanie 1) w program, który wykonuje Zadanie 2 (niekoniecznie oryginalny program napisany przez gliniarza) w odległości edycji określonej przez gliniarza.
Już złamane zgłoszenie nie może zostać ponownie złamane (tylko pierwszy złodziej, który złamie zgłoszenie, otrzymuje kredyt).
Po złamaniu zgłoszenia wykonaj następujące czynności:
- Opublikuj odpowiedź na pytanie towarzyszące temu wyzwaniu (link) , podając język, swoje rozwiązanie i link do oryginalnej odpowiedzi.
- Pozostaw komentarz z tekstem „Pęknięty”, który prowadzi do opublikowanej odpowiedzi.
- Edytuj odpowiedź policjanta, jeśli masz uprawnienia do edycji (jeśli nie, zaczekaj, aż zrobi to za ciebie ktoś inny z wymaganymi uprawnieniami lub zasugeruj edycję).
Punktacja
Jeśli program gliniarza pozostanie bez krakowania przez 1 tydzień, policjant może opublikować oryginalny kod, który wykonuje Zadanie nr 2 (w określonej odległości edycji), a przesyłanie jest odtąd uważane za „bezpieczne”. Zwycięskie zostanie bezpieczne zgłoszenie o najmniejszej odległości do edycji. W przypadku remisu wygrywa najkrótszy program (oryginał, który wykonuje Zadanie nr 1). Jeśli dwa zgłoszenia są nadal powiązane, to jedno opublikowane wcześniej wygrywa.
Jeśli złodziej z powodzeniem złamie ułożenie gliny, jego ocena wzrośnie o odległość edycji tego ułożenia. Na przykład bandyta, który złamie przesłanie przy odległości edycji 3 i jeden przy odległości 5, otrzymuje 8 punktów. Złodziej z najwyższym wynikiem wygrywa. W przypadku remisu złodziej, który zdobył wynik jako pierwszy, wygrywa.
Tabela liderów
Małe narzędzie do obliczania odległości Levenshteina
źródło
Odpowiedzi:
Python 2, distance = 8 [ cracked ]
Nareszcie dostałem ten poniżej limitu char. Nie powinno to być zbyt trudne, ale pomyślałem, że pomysł był interesujący.
Zamierzone rozwiązanie:
Chodziło o to, aby to wykorzystać
F(n+2) = 1 + (sum over F(k) from k = 1 to n)
, a fakt, że kolejne liczby Fibonacciego są chronione prawem autorskim. Argument1
w redukowaniu miał dostarczyć+1
.Wygląda na to, że feersum znalazło inną linię ataku!
źródło
J, odległość = 5 [ pęknięty ]
Stosowanie:
źródło
Rubin, dystans 6 [bezpieczny]
Wymyślanie par formuł z krótkimi odległościami edycji jest fajne, ale wydaje się, że takie podejście może być bardziej skuteczne / denerwujące. Możesz dokładnie zrozumieć, co zrobiłem, ale to nie znaczy, że możesz to odwrócić.
Rozwiązanie:
Wyjaśnienie:
źródło
e
tam w dół, gdy robię brutalną siłę. Naprawdę podstępne rozwiązanie. :)Python 2 - LD = 13 Cracked
Miło, łatwo (mam nadzieję, że nie za łatwo) na początek :)
Wygląda na to, że było to zbyt łatwe;) Czuję się raczej głupio, że zapomniałem, że możesz użyć komentarzy: /
źródło
Haskell, odległość = 13
Może to być bardziej czytelne, ale
import
zjadło zbyt wiele bajtów, więc musiałem trochę zagrać w golfa.źródło
Rubinowy, dystans 14 ( Pęknięty )
źródło
CJam, dystans 10 (Cracked)
Po prostu włóż
n
STDIN. Sprawdź to tutaj.Dla porównania w oryginalnym rozwiązaniu zastosowano rzadkie
j
.Oryginalny:
źródło
J, odległość = 4 [bezpieczny]
Rozwiązanie:
Metoda:
źródło
Python 3, distance = 14 [ cracked ]
Miałem trochę wolnych znaków, więc wstawiłem trochę spacji dla jasności :)
źródło
JAGL Alpha 1.2 - Distance = 16 [ Cracked ]
Nie powinno być zbyt trudne, zobaczymy, co się stanie ...
źródło
TI-BASIC , odległość 38
>
reprezentujeSTO→
klucz i$
symbol pierwiastka kwadratowego.źródło
Python 2 - distance = 12 [ Cracked ]
Jestem trochę zadowolony z tego, jak to się potoczyło.
Zobaczmy, ile to zajmie ... Zakładam, że nadal będzie pęknięty.
Edycja: nieco skrócony kod, bez wpływu na działanie / odległość.
Zamierzone rozwiązanie
Starałem się nie dodawać komentarzy ani zmian w nowej linii.
źródło
Python 3 - Distance = 14 [ Cracked ]
Zobaczymy, jak długo to potrwa ...
źródło