Schreiben Sie ein Programm mit der Länge n, das ein anderes Programm ausgibt, dessen Länge die nächste Fibonacci-Zahl nach n ist. Das neue Programm muss dasselbe tun - ein anderes Programm ausgeben, dessen Länge die nächste Fibonacci-Nummer ist usw.
n selbst (die Länge des ursprünglichen Programms) muss keine Fibonacci-Nummer sein, obwohl es schön wäre, wenn dies der Fall wäre.
Kürzester Code gewinnt.
Keine externen Ressourcen, nur ASCII, kostenloser Compiler / Interpreter erforderlich.
Wenn Ihre Ausgabe in einer neuen Zeile endet, wird sie ebenfalls gezählt.
code-golf
quine
fibonacci
code-generation
aditsu
quelle
quelle
int
oderBigInteger
)Antworten:
CJam,
2623Ich habe es gerade mit deiner Sprache versucht.
9 ist
(22*0.618 + 0.5 - 1)/1.618 + 1
.Es berechnet seine eigene Länge,
*1.618
anstatt die beiden Zahlen wiederholt zu addieren. In der ersten Version wird die Ausgabe vorher{
wie folgt gefüllt1)))))))))
, wobei diese Zeichen selbst gezählt werden. Sagen Sie das Ergebnisn
. Die Gesamtlänge istn+22
und die neue Länge{
sollte(n+22)*1.618-22
gerundet sein. Verringern Sie es um eins, um die Anzahl der zu zählen)
. Dann wird es ungefähr gleich sein(n+8)*1.618
.Ältere Version:
Die Nummer 14 ist
24*0.618 + 0.5 - 1
.quelle
Python 2, 160 Bytes
Dies ist eine wahre Quasi-Quine; Es liest keine eigene Quelle, sondern generiert sie. Erste Ausgabe (hat nachgestellte Newline):
Zweite:
Edit: Ups. Ich habe vergessen, die Zeichenfolge zu ändern, als ich von
;
s zu1
s gewechselt habe , sodass bei der zweiten Ausgabe zusätzliche Semikolons ausgegeben wurden (die von Python nicht unterstützt werden). Festquelle
CJam,
4131 BytesProbieren Sie es online aus.
Ausgabe
Wie es funktioniert
quelle
Python - 89
Meine perfekte Anzahl an Charakteren ist verschwunden . ; _; Vielen Dank an TheRare für den Hinweis auf die Newline-Sache und an Quincunx für den Vorschlag, Python 2 zu verwenden und 2 Zeichen abzuschneiden.
BEARBEITEN : Verwendet jetzt nur mehr
#
s anstelle von1
s; 12 Zeichen kürzer.EDIT 2 : 94 Zeichen! Einige Wiederholungen beseitigt. >: 3
EDIT 3 : Kürzere Repr-Alternative für Python 2.
EDIT 4 : Die Ausgabe ist jetzt ein Zeichen kürzer.
EDIT 5 : Die Verwendung von
%r
, um es zu verkürzen, wurde aus einer Antwort auf eine andere Frage von @primo entnommen.EDIT 6 : Kürzer. : D
Hier ist eine Python 3-Version:
Diese Antwort ähnelt der von @Quincunx.
quelle
print
Fügt immer eine neue Zeile hinzu, es sei denn, Sie geben einend=''
Argument an.s,a,b="s,a,b=%s,%i,%i;o=s%%(`s`,b,a+b)+'#';print o+(b-len(o)-1)*'1'",89,144;o=s%(`s`,b,a+b)+'#';print o+(b-len(o)-1)*'1'
JavaScript, 94
Basierend auf einer bekannten JavaScript-Quine gibt dies fast die gleiche Funktion zurück, gefolgt von Schrägstrichen, sodass sich die nächste Fibonacci-Zahl nach N auf 144 summiert. Und so weiter ...
N ist keine Fibonacci-Zahl, aber es war nur "schön zu haben".
quelle
p = (my answer)
und dann getestet und es dauertep = eval(p)
bis 196418 ... danach war die Verarbeitungszeit> 1 Sek. Also habe ich den Test abgebrochen: P Aber ich denke, es kann noch weitergehen.p=eval(p)
, sondern überprüfe es auchp.length
. Nachdem es 987 wird, bekomme ich Länge 1598, keine Fibonacci-Zahl.Mathematica
Dies ist eine sehr einfache Implementierung (dh hier keine Verschleierung). Es ist eine anonyme Funktion, die sich selbst mit ein wenig Abstand zurückgibt, um die richtige Länge zu erreichen. Mathematica ist homoikonisch: Code und Daten werden beide als Mathematica-Ausdrücke dargestellt, wodurch es relativ einfach ist, Code im laufenden Betrieb zu ändern / zu generieren. Dies bedeutet auch, dass die Anzahl der Zeichen kein natürliches Maß für die Codelänge ist. Die Epxressionsgröße ( " Blattzahl " ) beträgt. Diese Version basiert auf Blattzählungen als Maß für die Codelänge.
Wenn wir diese anonyme Funktion einer Variablen zuweisen
f
(damit ich auf lesbare Weise zeigen kann, was passiert) und sie jedes Mal 1, 2, 3, ... Mal aufrufen, wenn wir die Länge des Rückgabewerts messen, ist dies das, was wir bekommen:Zum kostenlosen Dolmetscher: Mathematica ist für den Raspberry Pi kostenlos. Andernfalls sollte sich dieser Code problemlos nach Mathics portieren lassen (Open Source) . Das einzige, was in der Mathematik fehlt, ist
InverseFunction
, dass es wie hier ersetzt werden kann (aber ich bin faul :).quelle
LeafCount
schien viel interessanter als die Verwendung von Zeichenzahlen (was langweilige Code-Manipulation als String-Manipulation implizieren würde). :-) Ich werde es nicht ändern, um die Anzahl der Zeichen zu verwenden, aber ich kann es ohne schlechte Gefühle löschen, wenn Sie es wünschen.