Wyzwanie
Napisz funkcję / program, który wypisuje albo ten n
element, albo pierwsze n
elementy, w dobrze znanej sekwencji liczb:
1, 2, 4, 8, 16 ...
Och, czekaj ... Zapomniałem kilku pierwszych cyfr:
1, 1, 1, 1, 2, 4, 8, 16 ...
Do licha, dodam jeszcze kilka dla dobrego pomiaru:
1, 1, 1, 1, 2, 4, 8, 16, 33, 69, 146, 312, 673, 1463, 3202, 7050, 15605, 34705 ...
Liczby są uogólnionymi liczbami katalońskimi podanymi według formuły (indeksowanej zerem):
gdzie
To jest OEIS A004149 .
Możesz wybrać, czy chcesz, aby sekwencja była zerowa czy indeksowana jednokrotnie. Sekwencja musi oczywiście być taka sama, więc musisz przepisać formułę, jeśli masz indeksowanie jednoindeksowe.
a(n-1-k)
naa(n-k)
, prawda?Odpowiedzi:
Python , 51 bajtów
Wypróbuj online!
Trochę upraszcza formułę:
źródło
Perl 6 , 44 bajtów
Wypróbuj online!
Anonimowy blok kodu, który zwraca leniwą nieskończoną sekwencję wartości. To prawie implementuje sekwencję, jak opisano, za pomocą skrótu, który zip powoduje pomnożenie wszystkich elementów do tej pory po drugim elemencie z odwrotnością listy, zaczynając od czwartego elementu i dodając dodatkowy
1
na końcu.Wyjaśnienie:
źródło
05AB1E ,
141311 bajtówWypróbuj online!
Zwraca n-ty element indeksowany według 0.
źródło
JavaScript (ES6), 42 bajty
Port rozwiązania xnor .
0-indeksowane.
Wypróbuj online!
JavaScript (ES6),
8375 bajtówSzybsze, mniej rekurencyjne, ale znacznie dłuższe rozwiązanie.
0-indeksowane.
Wypróbuj online!
źródło
Haskell,
494339 bajtówWypróbuj online!
Dla jest 0, więc podnosi go do
n<3
sum
max ... 1
1
.Edycja: -6 bajtów dzięki @Jo King.
źródło
Wolfram Language (Mathematica) , 36 bajtów
Wypróbuj online!
1-indeksowany.
2-indeksowane sekwencja 4 bajty krótszy:
Sum[#0@i#0[#-i],{i,#-4}]/. 0->1&
. Wypróbuj online!źródło
CatalanNumber
!05AB1E ,
1713 bajtówNie krótszy niż istniejąca odpowiedź 05AB1E , ale chciałem wypróbować rekurencyjną funkcjonalność nowej wersji 05AB1E jako praktykę dla siebie.
Może być golfem o kilka bajtów.EDYCJA: I rzeczywiście może, zobacz rekurencyjną wersję odpowiedzi 05AB1E @Grimy poniżej, która ma 13 bajtów .£
è
£
.Wyjaśnienie:
13 bajtów wersję @Grimy (upewnij się upvote jego odpowiedź , jeśli nie masz jeszcze!):
Można ponownie zmienić na indeksowanie 0 lub nieskończoną listę:a ( 0 ) = 1 domyślnie.)
- Indeksowanie (0)
1λèλ1šÂ¨¨¨øPO
: Wypróbuj online ;- Nieskończona lista
λλ1šÂ¨¨¨øPO
: Wypróbuj online . (Zauważ, że zapisywane są tutaj 2 bajty zamiast 1, ponieważ środowisko rekurencyjne zaczyna się odWyjaśnienie:
Zamiast tego implementuje formułę znalezioną przez @xnor dla jego odpowiedzi w języku Python w następujący sposób:
a ( n ) = ∑n - 1k = 2( a ( k ) ⋅ a ( n - 2 - k ) )
źródło
n=100
w 0,65 sekundy , ale kiedy wyłączę leniwe ładowanie, upłynie limit czasu po 60 sekundach, nawet przezn=25
.Python 3 , 59 bajtów
naprawdę nieefektywny,
a(13)
nie kończy się na TIO.Wypróbuj online!
źródło
Galaretka , 17 bajtów
Wypróbuj online!
Monadyczny link przyjmujący indeksowane zeron i zwracając listę uogólnionych liczb katalońskich z 0 do n .
źródło
Haskell , 76 bajtów
Wypróbuj online!
źródło
APL (Dyalog Extended) , 34 bajty SBCS
-2 dzięki dzaima.
Anonimowy przedrostek lambda.
Wypróbuj online!
źródło
Japt ,
191716 bajtówWysyła
n
th termin, indeksowany 1.Spróbuj
źródło
Haskell , 65 bajtów
Wypróbuj online!
Możesz użyć albo,
f
aby uzyskać pojedynczy element sekwencji, lub przekazać listę wartościg
i uzyskać wszystkie indeksy dla tej listy.źródło
Dalej (gforth) ,
9981 bajtówWypróbuj online!
Dane wyjściowe to n-ty termin, a dane wejściowe mają indeks 1
Edycja: Zapisano 17 bajtów, przechodząc do formuły xnor. Zapisano kolejny 1 bajt za pomocą 1-indeksowanego
Objaśnienie kodu
źródło
Węgiel drzewny , 26 bajtów
Wypróbuj online! Link jest do pełnej wersji kodu. Wyświetla n-tą indeksowaną liczbę 0, chociaż oblicza się ją przy użyciu wewnętrznego indeksowania 1. Wyjaśnienie:
Zacznij od
a[0] = a[1] = a[2] = a[3] = a[4] = 1
. Tak, jest to indeks 1, ale z dodatkową wartością zerową. To dla ciebie kod golfowy.Oblicz dodatkowe
n
warunki. Jest to przesada, ale ułatwia znalezienie pożądanego terminun<5
.Dla każdego terminu oblicz następny termin jako sumę dotychczasowych warunków pomnożoną termicznie przez odwrotność dotychczasowych warunków, z wyłączeniem trzech terminów.
To nie jest operacja używana do oszukiwania Węgla w analizie 2-argumentowej formy
Slice
, w przeciwnym razie musiałbym użyć mniej golfowego sposobu usunięcia trzech terminów.Wyjście 4. ostatniego terminu.
źródło
Pyth , 30 bajtów
Wypróbuj online!
Zwraca pierwszyn elementy sekwencji.
Alternatywa: Wymieńn -ty element sekwencji, indeksowany 0.
<
się@
do powrotuźródło
Rubin ,
4241 bajtówWypróbuj online!
1 indeksowany (aby zapisać 1 bajt)
źródło
Oktawa , 73 bajty
Wypróbuj online!
-2 bajty dzięki Stewie Griffin. Po raz kolejny podejście imperatywne wygrywa z funkcjonalnym podejściem rekurencyjnym. Ten pokazano poniżej.
Oktawa , 75 bajtów
Wypróbuj online!
Captcha chciał sprawdzić, czy opublikowałem to jako człowiek. Szczerze mówiąc, nie jestem tego taki pewien .
źródło
n<4
.Perl 5
-MList::Util=sum
, 61 bajtówWypróbuj online!
źródło
C / C ++ ,
706967 bajtów-1 bajty dzięki Jonathanowi.
Wypróbuj online!
źródło
a(n-1-k)
byća(n+~k)
?a(++k)*a(n-k)
zadziałać i zrzuca kolejne 2 bajtyfor
. Ale wyczuwam niezdefiniowane zachowanie.