Dieses 128-sprachige Quine Ouroboros (ein Programm, das ein Programm in einer anderen Sprache ausgibt, das ein Programm in einer weiteren Sprache ausgibt (125 Sprachen später), das das ursprüngliche Programm ausgibt) ist ziemlich beeindruckend. Leider hat es eine statische Anzahl von Iterationen.
Schreiben Sie ein Programm, das ein Programm ausgibt (nicht unbedingt in einer anderen Sprache, aber es kann sein), das ein Programm ausgibt, das ein Programm ausgibt usw., das nach n Iterationen das ursprüngliche Programm zum ersten Mal ausgibt (dh kein Zwischenprodukt) Das Programm sollte mit dem Original identisch sein, da sonst ein Quine funktionieren würde, der seine Eingabe ignoriert. Dabei ist n eine nicht negative Ganzzahl, die als Eingabe bereitgestellt wird. Die Eingabe kann nicht nur eine Zahl im ursprünglichen Quellcode sein (z. B. x = <the value of n>
beim Start Ihres Programms), sondern sollte eine der folgenden sein:
- Als Befehlszeilenargument übergeben
- Lesen Sie von der Standardeingabe
- Als Argument an eine Funktion übergeben, die das neue Programm zurückgibt / ausgibt.
Für Zwischenstufen im Ouroboros kann Ihr Programm entweder ein voll funktionsfähiges Programm oder eine Funktion ohne Argumente sein, die beim Aufruf das nächste zurückgibt / ausgibt.
Sie können möglicherweise nicht aus der Quelldatei selbst lesen oder quine-ähnliche integrierte Funktionen verwenden (ich glaube nicht, dass es solche gibt, die dies tun würden, aber möglicherweise).
Um klar zu sein, sollte n = 0
das Programm seinen eigenen Quellcode ausgeben.
Wenn n = 1
, sollte das Programm ein anderes Programm ausgeben, das den ursprünglichen Quellcode ausgibt.
Und so weiter...
Wenig Bytes gewinnen!
Bearbeiten:
Ich hätte schreiben sollen: "Für Zwischenstufen im Ouroboros kann Ihr Programm entweder ein voll funktionsfähiges Programm ohne Eingabe oder eine Funktion ohne Argumente sein." Wenn Ihr Programm das nächste in der Kette ausgibt und dann auf die Eingabe wartet, ist das in Ordnung, aber Ihr Programm sollte nicht den ursprünglichen Wert von n benötigen.
getInput()
ohne Eingabe verwendet wird. Oder können wir sagen, wir geben etwas Zufälliges ein, das für spätere Iterationen nicht verwendet wird, um Fehler für das zu vermeiden getInput()
? Aka ist die aktuelle Python-Antwort gültig?
n
ein Programm ausgeben müssen, das das "Anfangsprogramm" einer Ouroboros-Reihe von n
Iterationen ist, und dass unsere Antwort nicht als eine der n
Iterationen gelten sollte. Ist das richtig?