Ein Brunnen ist eine Anordnung von Münzen in Reihen, so dass jede Münze zwei Münzen in der Reihe darunter berührt oder sich in der unteren Reihe befindet und die untere Reihe verbunden ist. Hier ist ein 21-Münzen-Brunnen:
Ihre Herausforderung besteht darin, zu zählen, wie viele verschiedene Brunnen mit einer bestimmten Anzahl von Münzen hergestellt werden können.
Sie erhalten als Eingabe eine positive ganze Zahl n
. Sie müssen die Anzahl der verschiedenen vorhandenen n
Münzbrunnen ausgeben.
Standard-E / A-Regeln, Standard-Regelungslücken verboten. Lösungen sollten n = 10
in weniger als einer Minute rechnen können .
Gewünschte Ausgabe für n = 1 ... 10
:
1, 1, 2, 3, 5, 9, 15, 26, 45, 78
Diese Sequenz ist OEIS A005169 .
Das ist Code Golf. Wenigste Bytes gewinnt.
code-golf
sequence
combinatorics
isaacg
quelle
quelle
n
für die das Programm garantiert funktionieren muss? (dh danach kann es brechen)n
, bis auf Einschränkungen des Datentyps, der Hardware usw.Antworten:
Python, 57 Bytes
Wie in OEIS beobachtet , bilden die Spaltengrößen eine Folge positiver Ganzzahlen mit einem maximalen Aufwärtsschritt von 1, wenn Sie jede Zeile um einen halben Schritt relativ zur darunter liegenden Zeile verschieben.
Die Funktion
f(n,i)
zählt die Folgen mit Summen
und letzter Nummeri
. Diese können für jede Auswahl der nächsten Spaltengröße von1
bisi+1
, also rekursiv aufsummiert werdenrange(1,i+2)
. Das Abschneiden aufrange(1,i+2)[:n]
verhindert , dass Spalten mehr Münzen verbrauchen als übrig bleiben, und vermeidet es, zu sagen, dass Negativen
geben0
. Darüber hinaus wird ein expliziter Basisfall vermieden, da die leere Summe0
rekursiv ist und nicht, sondernf(0)
auf gesetzt1
werden muss, wofüror 1
(wie gewünscht) ausreicht+0**n
.quelle
M|sgL-Gd<ShHG1gQ0
Mathematica, 59 Bytes
Basierend auf dem Mathematica-Programm zu OEIS von Jean-François Alcover.
quelle
1/(1-x/(1-x^2/(1-x^3/(1-x^4/(1-x^5/(...))))))
.Haskell,
6048 BytesVielen Dank an @nimi für die Bereitstellung einer viel kürzeren Lösung!
Alte Version.
Die Funktion zur Berechnung des Wertes ist die
s
Implementierung der hier angegebenen rekursiven Formel: https://oeis.org/A005169quelle
t (n-p) q
. Golf - Tipps: Verwenden Sie einen Infixoperator fürt
, tauschen die Wachen und verwendenmap
statt der Liste Verständnis:n#p|p>n=0|p<n=sum$map((n-p)#)[1..p+1]|1<2=1
.s
wirds=(#1)
, aber Sie müssen der Hauptfunktion keinen Namen geben, das(#1)
reicht. 48 Bytes.#
und$
hier zuerst =)#
ist eine frei wählbare Infix Funktion wie+
,*
usw. Infix Funktionen vorgegeben.$
ist eine andere Möglichkeit, die Priorität anzupassen (neben Klammern)f (g (h x))
->f$g$h x
oder in unserem Fallsum(map(...)[...])
->sum$map(...)[...]
.Haskell, 43 Bytes
Siehe Python-Antwort für eine Erklärung.
Gleiche Länge mit
min
anstatttake
:quelle
Pyth,
21 bis20 BytesProbieren Sie es online aus. Testsuite.
Dies ist eine direkte Implementierung der rekursiven Formel auf der OEIS-Seite , wie die Matlab-Antwort .
quelle
Matlab,
115105 BytesDie Implementierung der rekursiven Formel finden Sie hier: https://oeis.org/A005169
quelle
Julia,
4443 BytesDies verwendet eine rekursive Formel in OEIS.
Erläuterung
Hat jemand anderes bemerkt, dass Strike Through 44 regulär 44 ist?
quelle
Python 3, 88 Bytes
quelle
JavaScript (ES6), 63
Implementierung der rekursiven Formel auf der OEIS-Seite
quelle