Cette quine ouroboros en 128 langues (un programme qui sort un programme dans une autre langue, qui sort un programme dans une autre langue encore, (125 langues plus tard), qui sort le programme original) est assez impressionnante. Mais malheureusement, il a un nombre statique d'itérations.
Ecrire un programme qui sort un programme (pas nécessairement dans une autre langue, mais il peut l'être), qui sort un programme, qui sort un programme, etc., qui après n itérations, sort le programme original pour la première fois (ie pas d'intermédiaire devrait être le même que l'original, car sinon un quine qui ignore son entrée fonctionnerait), où n est un entier non négatif fourni en entrée. L'entrée ne peut pas être juste un nombre dans le code source d'origine (par exemple, mettre x = <the value of n>
au début de votre programme), il doit être l'un des suivants:
- Passé comme argument de ligne de commande
- Lire à partir de l'entrée standard
- Passé comme argument à une fonction, qui retourne / sort le nouveau programme.
Pour les étapes intermédiaires des ouroboros, votre programme peut être soit un programme pleinement fonctionnel, soit une fonction sans arguments, qui, une fois appelée, renverra / affichera la suivante.
Vous ne pouvez pas lire à partir du fichier source lui-même, ou utiliser des modules internes de type quine (je ne pense pas qu'il y en ait qui le feraient, mais il pourrait y en avoir)
Pour être clair, si n = 0
, le programme doit sortir son propre code source.
Si n = 1
, le programme doit sortir un programme différent, qui sort le code source d'origine.
Etc...
Le moins d'octets gagne!
Éditer:
J'aurais dû écrire "Pour les étapes intermédiaires des ouroboros, votre programme peut être soit un programme pleinement fonctionnel sans entrée , soit une fonction sans argument". Si votre programme sort le suivant dans la chaîne, puis attend l'entrée, c'est bien, mais votre programme ne devrait pas avoir besoin de la valeur d'origine de n.
getInput()
serait utilisé sans aucune entrée fournie. Ou peut-on dire que nous entrons quelque chose de aléatoire qui n'est pas utilisé pour des itérations ultérieures, pour éviter les erreurs pour le getInput()
? Aka la réponse Python actuelle est-elle valide?
n
, génère un programme qui est le "programme initial" d'un quine ouroboros d' n
itérations, et que notre réponse ne devrait pas compter comme l'une des n
itérations. Est-ce correct?