Fontanny jest układ monet w rzędach tak, że każda moneta porusza dwie monety w wierszu poniżej, lub jest w dolnym rzędzie, a dolny rząd jest podłączony. Oto fontanna na 21 monet:
Twoim zadaniem jest policzyć, jak wiele różnych fontann można stworzyć za pomocą określonej liczby monet.
Otrzymasz jako dane wejściowe dodatnią liczbę całkowitą n
. Musisz n
podać liczbę różnych fontann na monety, które istnieją.
Standardowe reguły we / wy, standardowe luki zabronione. Rozwiązania powinny być w stanie obliczyć n = 10
w niecałą minutę.
Pożądana moc wyjściowa dla n = 1 ... 10
:
1, 1, 2, 3, 5, 9, 15, 26, 45, 78
Ta sekwencja to OEIS A005169 .
To jest kod golfowy. Wygrywa najmniej bajtów.
code-golf
sequence
combinatorics
isaacg
źródło
źródło
n
dla którego należy zagwarantować działanie programu? (tj. po którym może się złamać)n
, do ograniczeń typu danych, sprzętu itp.Odpowiedzi:
Python, 57 bajtów
Jak zaobserwowano w OEIS , jeśli przesuniesz każdy wiersz o pół kroku względem wiersza poniżej, rozmiary kolumn tworzą sekwencję dodatnich liczb całkowitych z maksymalnym krokiem w górę wynoszącym 1.
Funkcja
f(n,i)
zlicza sekwencje z sumąn
i ostatnią liczbąi
. Można je rekursywnie sumować dla każdego wyboru następnego rozmiaru kolumny od1
doi+1
, czylirange(1,i+2)
. Obcinanie w celurange(1,i+2)[:n]
uniemożliwienia kolumnom korzystania z większej liczby monet niż pozostało, unikając konieczności mówienia, że wartość negatywnan
daje0
. Co więcej, unika się wyraźnego przypadku podstawowego, ponieważ pusta suma jest0
i nie powtarza się, ale zamiast tegof(0)
należy ją ustawić na1
, coor 1
wystarcza (jak by to było+0**n
).źródło
M|sgL-Gd<ShHG1gQ0
Mathematica, 59 bajtów
Na podstawie programu Mathematica na OEIS autorstwa Jean-François Alcover.
źródło
1/(1-x/(1-x^2/(1-x^3/(1-x^4/(1-x^5/(...))))))
.Haskell,
6048 bajtówDzięki @nimi za dostarczenie krótszego rozwiązania!
Stara wersja.
Funkcją obliczającą wartość jest
s
implementacja wzoru rekurencyjnego znalezionego tutaj: https://oeis.org/A005169źródło
t (n-p) q
. Wskazówki golfa: użyj operatora Infix dlat
przestaw strażników i używaćmap
zamiast listowego:n#p|p>n=0|p<n=sum$map((n-p)#)[1..p+1]|1<2=1
.s
staje sięs=(#1)
, ale nie musisz wcale nadawać głównej funkcji nazwy, więc(#1)
wystarczy. 48 bajtów.#
i$
tutaj pierwsze =)#
czy zdefiniowana przez użytkownika funkcja poprawki jest taka+
, jak*
itd., Są predefiniowanymi funkcjami poprawki.$
jest innym sposobem dostosowania pierwszeństwa (oprócz nawiasów)f (g (h x))
->f$g$h x
lub w naszym przypadkusum(map(...)[...])
->sum$map(...)[...]
.Haskell, 43 bajty
Zobacz odpowiedź na Python na wyjaśnienia.
Ta sama długość z
min
zamiasttake
:źródło
Pyth,
2120 bajtówWypróbuj online. Zestaw testowy.
Jest to bezpośrednia implementacja formuły rekurencyjnej na stronie OEIS , podobnie jak odpowiedź Matlaba .
źródło
Matlab,
115105 bajtówWdrożenie rekurencyjnej formuły znalezionej tutaj: https://oeis.org/A005169
źródło
Julia,
4443 bajtyWykorzystuje rekurencyjną formułę w OEIS.
Wyjaśnienie
Czy ktoś jeszcze zauważył, że strajk przez 44 jest normalny 44?
źródło
Python 3, 88 bajtów
źródło
JavaScript (ES6), 63
Wdrożenie formuły rekurencyjnej na stronie OEIS
źródło