Wątek gliniarzy
W tym wątku Twoim zadaniem jest utworzenie programu / funkcji opartej na rekurencji w celu wygenerowania dowolnej liczby całkowitej. Rabusie spróbują znaleźć krótsze nierekurencyjne rozwiązanie w wątku Rabusiów .
Wyzwanie streszczenie
W wielu językach funkcje rekurencyjne mogą znacznie uprościć zadanie programowania. Jednak narzut składni dla prawidłowej rekurencji może ograniczyć jego użyteczność w golfowym kodzie.
Te gliny tworzy program lub funkcję biorąc jedną liczbę całkowitą n
, która generuje na pierwszej n
pozycji z roztworów o całkowitą, przy użyciu tylko rekursji 1 . Powinny również upewnić się, że istnieje krótszy nierekurencyjny sposób generowania sekwencji, aby oznaczyć ich wpis jako bezpieczny.
W rabusie spróbuje znaleźć krótszy program lub funkcję w tym samym języku, tworząc taką samą serię całkowitą, używając żadnych rekursji 2 .
Jeśli oświadczenie gliniarzy nie zostanie złamane w ciągu dziesięciu dni (240 godzin), gliniarz udowodni, że w rzeczywistości możliwe było zastosowanie krótszego nierekurencyjnego podejścia, ujawniając własne rozwiązanie. Następnie mogą oznaczyć swoje zgłoszenie jako bezpieczne .
Zwycięzca wyzwania gliniarzy będzie najkrótszy (według code-golfa) ) rekursja oparta na rekurencji oznaczona jako bezpieczna.
Zwycięzcą wyzwania rabusiów będzie rabuś, który złamał najwięcej rozwiązań.
1: Trzeba tylko rekurencyjnie składni; nie musisz się martwić, na przykład, optymalizacją ogona.
2: Ponownie, brak rekurencji w składni; więc nie możesz opublikować rozwiązania rekurencyjnego i twierdzić, że jest ono skompilowane w pętli dzięki optymalizacji wywołania ogona.
Wymagania dotyczące przedłożenia
Każde przesłanie zajmie jedną liczbę całkowitą n
(zero lub jeden). Przesłanie spowoduje następnie wygenerowanie lub zwrócenie pierwszych n
wpisów z wybranej liczby całkowitej. (zauważ, że ta seria liczb całkowitych nie może zależećn
). Metoda wejścia i wyjścia może różnić się między podejściem rekurencyjnym i nierekurencyjnym. Szereg całkowity może być dowolną serią deterministyczną o długości co najmniej 5. Szereg ten należy odpowiednio wyjaśnić.
Twoje zgłoszenie nie musi działać dla dowolnych dużych n
, ale powinno działać przynajmniej n=5
. Podejście nierekurencyjne musi być w stanie działać co najmniej tak samo n
jak podejście rekurencyjne lub do n=2^15-1
, w zależności od tego, które jest mniejsze.
Rekurencja
Ze względu na to wyzwanie rekurencję definiuje się jako tworzenie pożądanej sekwencji przy użyciu funkcji (lub konstruktu podobnego do funkcji), który wywołuje siebie (lub wywołuje sekwencję funkcji, która ostatecznie wywołuje samą siebie; obejmuje to konstrukty takie jak kombinator Y). Głębokość rekurencji powinna osiągnąć nieskończoność, podobnie jak n
nieskończoność. Podejście nierekurencyjne to wszystko, co nie jest rekurencyjne.
źródło
for
odbywa się za pomocą rekurencji, jestfor
rekurencyjne czy pętla?n
jeśli jest teoretycznie poprawny, ale nie można go uruchomić z powodu ograniczeń czasowych lub pamięciowych?n=5
trzeba to obliczyćxfor
jest dostępny poprzez jakiś import?), Więc może ten język nie może konkurować.Odpowiedzi:
Python 3 , 65 bajtów (bezpieczny)
Wypróbuj online!
Kolejna próba w Pythonie.
Sekwencja jest „liczbą sposobów na wypełnienie planszy 2 na n domino w trzech kolorach, tak aby żadne dwa domino tego samego koloru nie stykały się ze sobą”. Nie w OEIS.
Powiedzmy Chodźmy
n=6
. Tablica wygląda następująco:i są to prawidłowe domino w trzech kolorach (
1-3
każdy reprezentuje kolor):ale tak nie jest (dotykają się dwa domino tego samego koloru):
Sekwencja zlicza wszystkie możliwe nachylenia domina, które spełniają reguły dla każdego z nich
n
.Zamierzone rozwiązanie, 58 bajtów
Wypróbuj online!
Niestety wygląda na to, że nikt nie zadał sobie trudu, aby uprościć relację powtarzalności, co wyraźnie pokazano w kodzie rekurencyjnym. Tworzenie programu z podaną podwójną powtarzalnością w stanie „jak jest” nie działa, ponieważ jest to Python 3.
źródło
Oktawa , 47 bajtów, pęknięta przez 14m2
Wypróbuj online!
Jako przykład podajemy wpis Octave, który generuje pierwsze
n
dodatnie liczby całkowite, https://oeis.org/A000027 .źródło
l4m2
cię.Python 3 , 75 bajtów, spakowany przez xnor
Wypróbuj online!
Słynne liczby Hamminga, czyli 5-gładkie liczby ( A051037 ).
Pęknięty roztwór, 51 bajtów
Wypróbuj online!
Zamierzone rozwiązanie, 74 bajty
Wypróbuj online!
źródło
Dalej (gforth) , 39 bajtów, złamany przez NieDzejkob
Wypróbuj online!
źródło
[1,2,...,n]
, wiesz, prawda?Röda , 40 bajtów
Wypróbuj online!
Ta funkcja daje następującą skończoną sekwencję (90 pierwszych liczb Fibonacciego):
Wiem, że może generować więcej liczb Fibonacciego, ale na potrzeby tego wyzwania wystarczy wygenerować te liczby.
źródło
JavaScript (Node.js) , 91 bajtów, Pęknięty przez l4m2
Wypróbuj online!
Drukuje pierwsze n wyrażeń sekwencji OEIS A022559 (zaczynając od i = 1).
l4m2 pasuje 3 dla pętli do
7472 bajtów i złamał mój post gliniarza:Jednak moja zamierzona odpowiedź ma w rzeczywistości tylko 2 pętle:
Wypróbuj online!
źródło
Funkcja x86 .COM, 12 bajtów, Cracked przez NieDzejkob
Wejście DX, Wyjście [DI] ~ [DI + 2 * DX-1]
Rozwiązanie krakersa:
Zamierzone rozwiązanie:
źródło
Python 3 , 62 bajty, Cracked przez mwchase
Wypróbuj online!
Myślę, że ten będzie zbyt łatwy ...
Sekwencja jest sekwencją Fibonacciego
f(n) = f(n-1) + f(n-2)
zf(0) = f(1) = 1
źródło
Gol> <> , 15 bajtów, złamane przez mbomb007
Wypróbuj online!
Seria jest
0,1,2,3,4,5
ale po każdym elemencie występuje tyle zer.Na przykład pierwsze kilka wartości to:
źródło
JavaScript, 63 bajty, pęknięty
Wypróbuj online!
Zwraca pierwsze n elementów w odwróconej tablicy
źródło
Windows .BAT, 80 bajtów
Stosowanie:
Wersja pętli może przyjmować w bieżącym słowniku, ale musi zostać zainicjowana lub zresetowana
źródło
Python, 82 bajty; pęknięty
Jest to rekurencyjna implementacja w Pythonie sekwencji OEIS A004001 w 82 bajtach. Więcej informacji na temat tej serii można znaleźć w Mathworld Wolframa .
Pierwsze 30 liczb w tej sekwencji to:
źródło