To wyzwanie dla gliniarzy i rabusiów . Dla gwintu policjantów, przejdź 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ć.
Gliniarze konstruują kod A, który wytwarza S 1, i podają liczbę X, która według nich jest najlepszą możliwą odległością Levenshteina (w znakach) do stworzenia B, która wytwarza S 2 .
Wyzwanie rabusiów
Aby złamać zgłoszenie konkretnego gliniarza, złodzieje muszą wymyślić program C w tym samym języku (i wersji), co ta odpowiedź, która wytwarza S 2 (n) i zmiana znaku Y w stosunku do A (z Y <= X
). Rabusie niekoniecznie muszą znaleźć dokładnie ten sam kod B, który wyprodukował gliniarz (potajemnie). Zgłoszenia złodziei muszą być zgodne z tym samym indeksem 0 lub 1 indeksem, jak określono w oświadczeniu gliniarza.
Jeśli sobie z tym poradzisz, opublikuj odpowiedź z rozwiązaniem, łącząc się z odpowiedzią policjanta, i zostaw komentarz na temat odpowiedzi policjanta z powrotem do twojej.
Każdą odpowiedź gliniarza można złamać tylko raz i oczywiście nie wolno ci złamać własnej odpowiedzi. Jeśli odpowiedź gliniarza okaże się nieprawidłowa przed lub po pęknięciu, nie jest liczona do wyniku rabusia.
Wygrywanie i punktacja
Rabusie są punktowani (X - Y)*5 + 5
za każde z ich pęknięć, a rabuś z najwyższym wynikiem ogółem wygrywa.
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 także golf golfowy, więc obowiązują wszystkie zwykłe zasady gry w golfa.
źródło
Odpowiedzi:
Pyke, Levenshtein odległość 1, A036487 , A135628 - wynik 5
Pęknięcie wejścia przez błotniaka
Wypróbuj tutaj!
Oryginalny kod
X*e
, placów wejście,X
, który rozmnaża się przez wejście*
, a następnie połówki podłogi rezultaciee
.Sztuczka polega na tym, że
'X'
jest to 56 w podstawowej reprezentacji 96w
, więcwX
daje 56, pomnóż to przez dane wejściowe, następnie piętro i połowę, a otrzymasz 28-krotność danych wejściowych w razie potrzeby.źródło
Brain-Flak , 28 bajtów, odległość 4, A002817 , A090809
Ta odpowiedź została odkryta za pomocą brutal-forcer, który wygenerował 35 000 możliwych programów (wiele z nich było niezrównoważonych, a zatem nieprawidłowy kod wyłamywania mózgu, ale i tak rzuciłem błąd i znalazłem odpowiedź). Było to około 20-tysięcznego przetestowanego programu i znalezienie go zajęło około godziny (choć nie wiem dokładnie, ile czasu minęło, kiedy mnie nie było, kiedy zakończyło się).
Nie chciałem jeszcze publikować tej odpowiedzi, ponieważ nie mam jeszcze pełnego zrozumienia, jak działa ten program. Jednak odpowiedź będzie wkrótce bezpieczna, więc nie chcę, żeby wygasła. Mam nadzieję, że zaktualizuję tę odpowiedź jeszcze raz, gdy ją w pełni zrozumiem, a także opublikuję kod użyty do znalezienia tej odpowiedzi. Ale na razie opublikuję tylko częściowe wyjaśnienie.
Ma to sens, ponieważ OEIS stwierdza:
A A000124 to liczby trójkątne + 1. Jednak nie wiem dokładnie, czym jest forumla, więc nie mogę w pełni wyjaśnić, jak to działa.
źródło
Perl 6, 19 bajtów, X = 1, A000045 → A000035
+>
zamiast+<
działałby również.Wypróbuj online!
Jak to działa
infix ... jest całkiem użyteczny w przypadku prostych sekwencji rekurencyjnych.
(0,1,*+*...*)
Częścią oryginalnego kodu, który jest skrótemokreśla sekwencję, która zaczyna się od 0 i 1 , a następnie dodaje elementy, obliczając sumę dwóch poprzednich pozycji w sekwencji.
W przeciwieństwie do tego,
(0,1,*+<*...*)
wykorzystuje lewe przesunięcie bitowe (+>
prawe przesunięcie bitowe również działałoby) do skonstruowania sekwencji parzystości. Ponieważ przesunięcie 1 jednostki zerowej w lewo wynosi 1 , a przesunięcie 0 jednej jednostki w lewo wynosi 0 , otrzymujemy pożądane naprzemienne wzory zer i jedynek.źródło
Perl 6 , 10 bajtów, odległość 1 - wynik 5
Pęknięcie wpisu przez smls
Staje się:
Wypróbuj online!
źródło
*[0]o
aby tam być. Myślę, że to oznacza, że mogę wymyślić inne wyzwanie oparte na mojej „sztuczce” ... :)***
i pomyślałem, że wygląda na to, że może rozwinąć dynastyczną operację mnożenia*
, przy poprzednich argumentach naprawdę nie wiem, co właściwie robi kod. Edytuj wyjaśnienia!1***
jest analizowany jako1 ** *
, tj. lambda, która wykonuje „1 do potęgi x”.1*+*
jest analizowany jako1 * (+*)
, tj. lambda, która robi „1 pomnożone przez (x zamienione na liczbę)”.Perl 6 , dystans 2, smls
Oryginalny:
Pęknięcie:
Wypróbuj online!
źródło
+(^*Z%2)
. Chyba nie jestem zbyt dobry w przygotowaniu tych wyzwań.WolframAlpha, Distance 1, Greg Martin , A002378 , A000537
Jak to działa
Zrozumiałem, że co ciekawe, (n * (n + 1) / 2) ^ 2 to wzór na drugą sekwencję. Ponieważ suma (1 do n) jest równoważna n * (n + 1) / 2, po prostu musiałem zmienić * na ^.
źródło
Brain-Flak , 20 bajtów, DJMcMayhem
Wypróbuj online!
Dodano
({})
na początku pętli, aby podwoić wartość w każdej iteracji.źródło
({(({}[()])){}}{})
JavaScript, Distance 4, LliwTelracs
Oryginalny:
Pęknięcie:
Wypróbuj online!
źródło
JavaScript (ES6), dystans 1, Advancid
Oryginalny:
Pęknięcie:
Wypróbuj online!
lub
Wypróbuj online!
Jakoś udało mi się sprawić, żeby zachowywał się inaczej między TIO a repl.it (absolutnie nie mam pojęcia, dlaczego 2 * 1 ^ ... byłoby równe 0, zgodnie z repl.it)
źródło
as=function(){ return 2*2**((1^1)*-1*~arguments[0]/11-(4-(as+[]).length%89))-(as+[]).length%7}
.JavaScript, 41 bajtów, odległość 3, A061313, A004526
Wypróbuj online!
źródło
Java, Distance 4, Peech , A094683 , A000290
Oryginalny:
Pęknięcie:
zwraca n * n
źródło
JavaScript, Advancid , odległość 2, A059841 i A000004
Pozostawia kod tylko za linkiem TIO, ponieważ wydaje się, że psuje stronę.
Dzięki @nderscore, którego kodu użyłem do odszyfrowania kodu początkowego
Wystąpił nadmiarowy kod, taki jak użycie !! [] + [] + [] zamiast !! [] + [].
Dodanie! + [] - (! + []) (+ 1-1) początkowo uniemożliwiło odszyfrowanie.
Wypróbuj online
źródło
Pyke, Levenshtein odległość 2, A008788, A007526
Wypróbuj tutaj!
Jak to działa
To powoduje mieszaną konwersję bazy.
'S
pobiera dane wejściowe n i stosuje, pchając [1, ..., n] na stosie. NastępnyS
pobiera dane wejściowe n i ponownie wypycha tę samą tablicę.'
wydaje się, że powoduje, że następne polecenie zostanie zastosowane do poprzedniego szczytu stosu; Jestem trochę rozmyślny w szczegółach.Wreszcie
^
stosuje konwersję mieszanej zasady, więc [1, ..., n] [1, ..., n]f
obliczaa (n): = [1] n + n + (n) (n-1) .. . + [n!] 1 gdzie nawiasy oznaczają wartość miejsca i cyfrę po prawej stronie.
Teraz a (n) = (1 + (1) (n-1) + (n-1) (n-2) (n-3) + ... + (n-1)!) N = n ( a (n) + 1) , która jest tą samą rekurencyjną formułą, która definiuje a (n) w [A007526]. Ponieważ pusta suma wynosi zero, a (0) = 0 i przypadek podstawowy również się zgadzają.
źródło