Herausforderung
In dieser Aufgabe würden Sie eine ganze Zahl N (weniger als 10 6 ) erhalten, um herauszufinden, wie Sie mit Fibonacci-Zahlen mindestens zu N summieren können. Diese Partition wird als Zeckendorf-Darstellung bezeichnet .
Sie können jede Fibonacci-Zahl mehr als einmal verwenden und wenn es mehr als eine Repräsentationsausgabe gibt.
Wenn die Eingabe beispielsweise 67 ist, könnte eine mögliche Ausgabe die Fibonacci-Zahlen 1,3,8,55 verwenden, was auch die minimale Anzahl von Fibonacci-Zahlen ist, die verwendet werden können, um die Summe 67 zu erhalten .
Der Eingang N steht in einer einzigen Zeile, die Eingänge werden mit EOF abgeschlossen.
Beispiele
Im Format angegeben input: output
0: 0
47: 34+13
3788: 2584+987+144+55+13+5
1646: 1597+34+13+2
25347: 17711+6765+610+233+21+5+2
677: 610+55+8+3+1
343: 233+89+21
3434: 2584+610+233+5+2
Einschränkungen
- Die Anzahl der Eingänge würde 10 6 Werte nicht überschreiten .
- Ihr Programm sollte für alle Eingaben nicht länger als 5 Sekunden ausgeführt werden.
- Sie können jede Sprache Ihrer Wahl verwenden.
- Kürzeste Lösung gewinnt!
code-golf
fibonacci
integer-partitions
Quixotic
quelle
quelle
Antworten:
Motorola 68000-Assembly - 34 Byte
(GNU-Assembler-Syntax)
36 → 34: Der Fibonacci-Generator wurde nicht durch Zählen, sondern durch Überlauf gestoppt und das
0
Gehäuse so repariert, dass es[0]
stattdessen ausgibt[]
. AllerdingsN
stürzt das Übergeben eines Negativs jetzt ab.Der Kommentar oben ist der C-Prototyp dieser Funktion und verwendet eine Spracherweiterung , um zu identifizieren, welche Parameter wohin gehen (standardmäßig werden sie auf dem Stapel abgelegt).
Mein TI-89 mit seinem 10-MHz-Prozessor benötigt 5 Minuten, um diese Funktion auf 1 - 1.000.000 auszuführen.
Obwohl der Maschinencode (derzeit) weniger Bytes enthält als die GolfScript-Lösung, wäre es wahrscheinlich unfair, dies als kürzeste Lösung zu akzeptieren, weil:
Wenn Sie einen TI-89/92 / V200 haben, können Sie das vollständige Projekt hier herunterladen (veraltet):
https://rapidshare.com/files/154945328/minfib.zip
Viel Glück beim Überreden von RapidShare, Ihnen die eigentliche Datei zu geben. Kennt jemand einen guten Host für so große Dateien? 8940 ist eine Menge Bytes.
quelle
Javascript (142)
Verarbeitet jeweils nur eine Eingabe. Weil mehrzeilige Eingabe für JavaScript unbrauchbar ist.
http://jsfiddle.net/EqMXQ/
quelle
C 244 Zeichen
Mit Leerzeichen:
Dieses Programm liest Zahlen aus der Standardeingabe und schreibt sie in die Standardausgabe.
quelle
Golfscript, 43 Zeichen
Ich denke, dass dies mit mehr Aufwand um 3 bis 5 Zeichen reduziert werden kann. ZB fühlt sich die Entfaltung, um dann das Array wegzuwerfen, verschwenderisch an.
quelle
F # -
282 252241 Zeichenquelle
Python - 183 Zeichen
Der Großteil des Codes verarbeitet mehrere Eingaben :(
quelle
n=input()
am Ende der vorherigen Zeile setzen?print
Mathematica 88
Ausgabebeispiel
quelle
EXCEL: 89 Zeichen im eindeutigen Code:
quelle
Scala - 353 Zeichen (100 Zeichen für die Verarbeitung mehrerer Eingaben)
quelle
Iterator.continually(Console.readLine).takeWhile(_ != "").foreach(line => h(Integer.parseInt(line)))
könnteio.Source.stdin.getLines.foreach(l=>h(Integer.parseInt(l)))
auf 40 Zeichen gekürzt werden .Python 3 (170 Zeichen)
Mehrzeilige Eingabe, in Leerzeile anhalten
quelle
C 151 Zeichen
lesbare Version:
quelle
R 170
Verarbeitet mehrere Eingaben und übergibt das Ergebnis an STDOUT
quelle
R (460 Zeichen)
Eine andere Version mit R.
Lesen aus der Datei "Eingabe", Ausgabe in die Datei "Ausgabe"
Beispiel "Eingabe"
Beispiel "Ausgabe"
Mehr lesbare Version:
quelle
D (196 Zeichen)
Laufen Sie mit
rdmd --eval=…
. Dies verbirgt bequem die Kesselplatte vonimport x, y, z;
undvoid main() {…}
:quelle
Java verwenden
quelle