To wyzwanie dla gliniarzy i rabusiów . Przejdź do wątku rabusiów tutaj .
Wyzwanie to obejmuje dwie sekwencje OEIS wybrane przez gliniarzy - S 1 , S 2 - oraz to, jak dobrze te sekwencje można zagrać w golfa i zaciemnić.
Wyzwanie gliniarzy
Twoim wyzwaniem jako gliniarza jest wybranie swobodnie dostępnego języka i dwóch sekwencji OEIS. Następnie napisz kod A w tym języku, który pobiera dane wejściowe n i wytwarza S 1 (n). Kiedy ten kod został zmodyfikowany przez odległość Levenshteina z X znaków (gdzie X nie więcej niż 0.5 * (length A)
) i przekształcony kodu B w tym samym język musi następnie wytwarzać S 2 (n). Musisz napisać ten kod B , ale nie ujawniaj go, dopóki wyzwanie nie będzie bezpieczne (patrz poniżej).
Zgłoszenia gliniarzy muszą zawierać nazwę języka, pełny kod A , liczbę bajtów A , wartość X liczby zmian w dostępie do ich tajnego kodu B oraz wybrane numery sekwencji S 1 i S 2 . Możesz wybrać, czy każda sekwencja ma być indeksowana 0, czy indeksowana 1, ale określ ją w swoim zgłoszeniu.
Aby złamać konkretne zgłoszenie, złodzieje muszą wymyślić program C w tym samym języku (i wersji), który wytwarza S 2 (n) i zmienia znak Y na inny niż A (z Y <= X
). Rabusie niekoniecznie muszą znaleźć dokładnie ten sam kod B, który wyprodukował gliniarz (potajemnie).
Wygrywanie i punktacja
Jeśli twoja odpowiedź policjanta nie zostanie złamana w ciągu 7 dni (168 godzin), możesz ujawnić swoje własne rozwiązanie B , w którym to momencie twoja odpowiedź jest uważana za bezpieczną. Dopóki nie ujawnisz swojego rozwiązania, może ono zostać złamane przez rabusiów, nawet jeśli minęło już 7 dni. Jeśli twoja odpowiedź się popsuła, zaznacz to w nagłówku odpowiedzi wraz z linkiem do odpowiedzi odpowiedniego rabusia.
Gliniarze wygrać mając niezarysowanego przedstawienie z najkrótszym A . W przypadku remisu jako remis zostanie użyty najmniejszy X. Jeśli nadal remisuje, wcześniejsze zgłoszenie wygra.
Dalsze zasady
- Nie wolno używać żadnych wbudowanych funkcji do mieszania, szyfrowania lub generowania liczb losowych (nawet jeśli generator liczb losowych zostanie ustawiony na stałą wartość).
- Dozwolone są programy lub funkcje, ale kod nie może być fragmentem i nie można zakładać środowiska REPL.
- Możesz przyjmować dane wejściowe i przekazywać dane wyjściowe w dowolnym dogodnym formacie . Metody wejścia / wyjścia muszą być takie same dla obu sekwencji.
- Ostatecznym kalkulatorem odległości Levenshteina dla tego wyzwania jest ten na Planet Calc.
- Oprócz bycia wyzwaniem CnR, jest to również golf golfowy, więc obowiązują wszystkie zwykłe zasady gry w golfa.
źródło
(0.5*len(A))
Odpowiedzi:
Brain-Flak , 28 bajtów, Odległość 4, A002817 , A090809PękniętyTa odpowiedź wykorzystuje indeksowanie 1
Wypróbuj online
Dla wszystkich zainteresowanych jest 27475 prawidłowych programów Brain-Flak z Levenshtein 4 w odległości od tego programu i 27707 z 4 lub mniejszą odległością. Tak więc rozwiązanie brutalnej siły byłoby wykonalne na komputerze klasy konsumenckiej.
źródło
X = 4
zamiastLevenshtein distance of 4
.X
jest naprawdę jedyną zmienną, którą muszą znać.7 , 33 znaków, 13 bajtów, X = 10, A000124 → A000142 , Bezpieczny
Wypróbuj online!
Odległość Levenshteina jest mierzona w kategoriach znaków, więc napisałem program w kategoriach znaków, które zawiera powyżej (i Wypróbuj online !, w tym sam język, chętnie uruchamia programy zakodowane w ASCII). Jednak program jest przechowywany na dysku przy użyciu sub-bajtowego kodowania 7, co oznacza, że sam program jest w rzeczywistości następującym zrzutem heksadecymalnym (o długości 13 bajtów):
(Ponieważ odległość Levenshteina mierzona jest liczbą znaków, niekoniecznie dodajesz / usuwasz / zmieniasz 10 bajtów , więc prawdopodobnie najlepiej jest pracować z oryginalnym ASCII.)
Program jak napisano implementuje A000124 (liczby trójkątne + 1); każde pęknięcie musi implementować A000142 (silnia). Oba programy pobierają dane wejściowe ze stdin (jako liczby całkowite dziesiętne), zapisują swoje dane wyjściowe na stdout i traktują wejście 1 jako pierwszy element sekwencji (oraz wejście 2 jako drugi element itp.).
Mam nadzieję, że bardzo wysoka wartość X powstrzyma ludzi przed brutalnym wymuszaniem programu, tym razem (co zawsze stanowi ryzyko w przypadku wpisów policjantów i złodziei w 7).
Rozwiązanie
Wypróbuj online!
Różnice od oryginału:
Nie mam przygotowanych wyjaśnień na temat tego, jak one działają, więc zajmie mi to trochę czasu, aby uzyskać wyjaśnienie, ponieważ będę musiał je zrozumieć od zera. Mam nadzieję, że w końcu będzie wyjaśnienie.
źródło
Pyke, Levenshtein odległość 1, A036487 , A135628 .
Pęknięty!
Wypróbuj tutaj!
źródło
Perl 6 , 10 bajtów, X = 1, A000012 → A001477
Pęknięty!
S 1 = A000012 =
1,1,1,1,1,...
= Sekwencja wszystkich 1. (0-indeksowane)S 2 = A001477 =
0,1,2,3,4,...
= Nieujemne liczby całkowite. (0-indeksowane)Wypróbuj online!
Potwierdzono współpracę z wersją Perl 6 2017.01 i wersją Perl6 działającą na TIO.
( A można dalej grać w golfa
1***
- mam nadzieję, że jest to również dozwolone.)źródło
Perl 6 , 13 bajtów, X = 1, A161680 → A000217
Bezpieczny!
0 0 1 3 6 10 15 21...
= zero, po których następują liczby trójkątne.0 1 3 6 10 15 21 28 ...
= Liczby trójkątne.Wypróbuj online!
(Potwierdzono współpracę z wersją Perl 6 działającą na TIO.)
Rozwiązanie
Jak działa oryginał:
Jak działa rozwiązanie:
Wykorzystuje fakt, że operatory numeryczne, takie jak dodawanie, traktują listę jako liczbę elementów, więc w tym przykładzie suma jest
1 + 2 + 3 + 4 = 10
.I tak, no-op „Reduce with przecinkiem” w oryginale niejako omija zasady gry w golfa, ale wolę patrzeć na to jako na głupiutki algorytm, który został w jak największym stopniu zagrany w golfa (białe znaki itp.) co to jest... :)
źródło
Galaretka , 11 bajtów, X = 5, A005185 → A116881
Jest to pełny program, który przyjmuje liczbę całkowitą jako argument wiersza poleceń i wypisuje liczbę całkowitą.
Obie sekwencje są indeksowane jak w OEIS, tj. A005185 jest indeksowany 1, a A116881 jest indeksowany 0.
Wypróbuj online!
źródło
JavaScript, 41 bajtów, odległość 3, A061313 , A004526 , pęknięty
Wypróbuj online
Wykorzystuje indeksowanie 1, rozwiązanie wykorzystuje indeksowanie 0.
Jeszcze raz inne rozwiązanie ...
źródło
Perl 6 , 19 bajtów, X = 1, A000045 → A000035
Pęknięty!
0 1 1 2 3 5 8 13 21 34...
= „Liczby Fibonacciego”. ( 0-indeksowane )0 1 0 1 0 1 0 1 0 1...
= „Okres 2”. ( 0-indeksowane )Wypróbuj online!
(Potwierdzono współpracę z wersją Perl 6 działającą na TIO.)
źródło
WolframAlpha, 18 bajtów, X = 1Cracked by math_junkie!
Czasami WolframAlpha faktycznie będzie w stanie wyświetlić taką czystą funkcję w formie funkcjonalnej (innym razem się myli); ale można go wesoło wywołać przy użyciu danych wejściowych - na przykład
(sum1to#of n^1)*2&@5
zbiorów30
.S1 = A002378 (liczby stałe)
S2 = A000537 (suma pierwszych
n
kostek)Obie sekwencje mają indeks 0.
źródło
Pyke, Levenshtein odległość 2, A008788 , A007526
Pęknięty!
Wypróbuj tutaj!
Stańmy się nieco trudniej, prawda?
Pierwsza odpowiedź jest oparta na 1, a crack na 0.
źródło
JavaScript, 15704 bajtów, odległość 2, A059841 i A000004 - pęknięty
To rozwiązanie jest bardzo długie, więc możesz znaleźć pełny kod w tym github gist.
Oryginalna odpowiedź (ta) ma 1 indeks. (Wiem, że to zdecydowanie za długo, tylko dla zabawy).
źródło
Brain-Flak , 16 bajtów, odległość Levenshteina 4, A000217 i A002378 - Pęknięty przez Martina Endera!
Wypróbuj online!
To powinno być dość łatwe do złamania.
źródło
JavaScript, 30 bajtów, odległość 4, A000290 , A000079 , - Pęknięty!
Indeksowanie na podstawie 0
@Kritixi Lithos rozwiązanie faktycznie różniło się od mojego
Wypróbuj online
źródło
x**2
i nie2**x
JavaScript (ES6), odległość wynosi 1, A000079 i A000004 - pęknięty
Oryginalna odpowiedź (ta) jest oparta na 0. Teraz, gdy został złamany, oto oryginalna funkcja B:
źródło
Perl 6 , 7 bajtów, X = 2, A059841 → A001477
Pęknięty!
1 0 1 0 1 0 1 0...
= „* Okres 2: Powtórz (1,0)”. (0-indeksowane)0 1 2 3 4 5 6 7...
= „Nieujemne liczby całkowite”. (0-indeksowane)Wypróbuj online!
(Potwierdzono współpracę z wersją Perl 6 działającą na TIO.)
źródło
Java 7, Levenshtein odległość 4, A094683 , A000290 , Pęknięty
0-indeksowane.
Wypróbuj tutaj!
źródło