Ecrivez un programme (ou une fonction) (appelons-le P1) qui, une fois lancé, génère un autre programme P2 du même langage, avec exactement un octet de plus que P1.
Le programme P2, lorsqu'il est exécuté, devrait générer un 3ème programme P3 de 1 octet plus long que P2. P3 doit sortir un programme P4 plus long d'un octet que P3, etc. Il en va de même pour P5, P6, ..., P.
La chaîne de programmes doit aller indéfiniment ou dans un endroit où l'interprète ne peut plus gérer (mais doit rester un programme théoriquement valide dans la langue)
Règles
- Lacunes standard interdites
- Tous les programmes de la chaîne doivent être dans une langue
- Aucune entrée n'est donnée. La sortie passe à stdout ou à la valeur de retour de la fonction
- Le programme doit se terminer après un certain temps. Un programme qui arrête de générer une sortie après un certain intervalle de temps mais ne se termine jamais n'est pas éligible
Le programme le plus court P1 en octets dans chaque langue gagne!
"puts <<2*2,2\nputs <<2*2,2\n\n2"
grandit de 2 à chaque itération en Ruby. Je n'ai rien trouvé de mieux. : - /. Défi intéressant!Réponses:
JavaScript (ES6),
1412 octets-2 octets grâce à @Shaggy
Extrait de test
Afficher l'extrait de code
la source
"f=_"
ajoute un supplément_
avant le nom du paramètre, ce qui augmente sa longueur à chaque itération.7 , 4 octets d'ASCII
Essayez-le en ligne!
Je sais que 7 n'est pas normalement codé en ASCII, mais cette fois, il s'agit d'un codage plus pratique, de sorte que nous ajoutons 1 octet à chaque exécution, et non 3 bits.
Je ne suis pas sûr non plus que cela compte pour la triche ou non. (Il est habituel de ne pas savoir si un 7-quine est en train de tricher, car il chevauche la limite de plusieurs façons.) Vous pouvez argumenter de manière décente que le
0
code code le6
, mais en général, on ne sait pas exactement d'où viennent les caractères qui en résultent. "dans 7 parce qu'il a tellement de comportements implicites, assez bizarres.Ce programme s’imprime avec les éléments
1
ajoutés et le fera même si vous y ajoutez un certain nombre de1
s. Voici une trace de débogage commentée de160311
:(Il ne
|
reste plus rien dans le programme, donc lee
quittera immédiatement en tant qu’effet secondaire, ce qui signifie que la finale7
ne sera jamais exécutée).La confusion fondamentale à propos de la provenance de tous les caractères est que la plupart des commandes sur 7 ne produisent que des données lors de leur exécution, puis
6
tente de reconstruire une séquence de commandes qui produirait le fragment de données donné; cela finit souvent par se rapprocher de l'original, sans toutefois l'identifier. (Pour des raisons de quining, vous écrivez normalement un programme de telle sorte que le résultat soit presque identique, différant normalement entre les deux titres7
.) Ainsi, par exemple,1
les données deviennent716
, ce qui est le moyen le plus facile de1
à la chaîne de données actuelle. Nous l'avions initialement produit avec16
une séquence de caractères différente (mais similaire), éliminant de manière destructive l'un des|
marqueurs les données ont commencé avec. (J'imagine que le meilleur argument selon lequel il ne s'agit pas d'une quine littérale, c'est que la sortie est différente de l'entrée!)la source
Haskell ,
7466 octetsMODIFIER:
<>
, puis -6 en déplaçant le(10*)<$>
.Ceci utilise maintenant le nouvel
<>
opérateur libre (Semigroup
multiplication, nécessite que GHC 8.4 fonctionne sans importation.)Essayez-le en ligne! (Cheats avec une importation puisque TIO n'a pas encore GHC 8.4.)
Comment ça marche
main=putStr$
est boilerplate pour sortir la valeur de chaîne suivante.fst<>show
est une fonction qui prend un tuple et retourne une chaîne constituée du premier élément du tuple concaténé avec la représentation sous forme de chaîne du tuple. C'est à dire(10*)<$>
multiplie le dernier élément du tuple suivant par 10, en ajoutant un chiffre0
à sa représentation sous forme de chaîne.la source
(<>)
(10*)<$>
.C (gcc) ,
134132 octetsLégère retouche de la quine canonique. Terriblement long.
Essayez-le en ligne!
la source
Fission 2 , 7 octets
Essayez-le en ligne!
La série Fission standard , mais avec un extra
!
qui imprime un 0x01 supplémentaire au début du code à chaque itération.la source
Pari / GP , 35 octets
Essayez-le en ligne!
la source
Python 2 , 38 octets
Essayez-le en ligne!
la source
brainfuck , 420 octets
Essayez-le en ligne!
Il s’agit d’une modification du quine "standard" BrainFuck , avec un point
.
final qui pointe sur un extra à.
chaque itération.Le quine lui-même code les caractères de Brainfuck comme une pile de chiffres hexadécimaux: spécifiquement, les chiffres hexadécimaux de
c-0x2b
, qui sont commodément les suivants:L'encodage couvre deux fragments de code:
>++[[>>+[>]++>++[<]<-]>+[>]<+<+++[<]<+]>>->[>]++++>++
pousse l'encodage de l'encodage lui-même,[[<++++++++++++++++>-]<+++++++++.<]
parcourt la pile et imprime le tout.la source
Sale , 9 octets
Essayez-le en ligne!
Si la lecture de code source est autorisée:
Sale , 8 octets
Essayez-le en ligne!
A expliqué:
Peut-être valide:
Sale , 4 octets
Essayez-le en ligne!
Il imprime le code source avec une nouvelle ligne.
(Et un tas d'espaces, à cause d'un bug. Cela fonctionne pareil sans eux cependant.)
Notez que cela ne fonctionne que dans le jeu de caractères natif, et non lorsque vous utilisez le frontal UTF8. Par conséquent, pour l'essayer sur TIO, vous devez remplacer le caractère qu'il sort entre les
[]
s‼
, ce qui correspond à l'équivalent UTF8. .la source
Java 8,
162146 octetsEssayez-le en ligne.
Essayez le premier programme de sortie . Essayez le deuxième programme de sortie . Essayez le troisième programme de sortie .
Explication:
quine-part :
String s
contient le code source non formaté.%s
est utilisé pour entrer cette chaîne en elle-même avec le fichiers.format(...)
.%c
,%1$c
et les34
sont utilisés pour formater les guillemets.s.format(s,34,s)
met tout cela ensembleDéfi:
+1
ajoute un 1 aux programmes non formatés et formatés..replaceAll("1+$","");}
: Parce que nous voulons seulement augmenter le nombre d'octets du programme de un au lieu de deux, nous supprimons tous les 1 avant de revenir.la source
> <> , 9 octets
Essayez-le en ligne!
Variation sur un classique> <> quine, qui ajoute simplement une autre commande dupe pour copier le
#
au premier plan.la source
Perl 5 , 32 octets
Essayez-le en ligne!
la source
GolfScript , 9 octets
Essayez-le en ligne!
CJam , 9 octets
Essayez-le en ligne!
Je publie ces deux solutions dans la même réponse, car elles ne sont que des variantes triviales et fonctionnent exactement de la même manière. Ils sont tous deux basés sur la quine commune de GolfScript
{'.~'}.~
(ou{"_~"}_~
dans CJam), qui est décrite plus en détail, par exemple dans ma précédente réponse.La seule différence est que cette variante ajoute un
1
octet à la fin de sa sortie. En l'occurrence, toute chaîne de1
s (ou tout autre littéral entier sans zéros) est elle-même une séquence simple dans GolfScript et CJam. Par conséquent, les chaînes déjà présentes à la fin du code ci-dessus sont simplement copiées intégralement dans la sortie. Étant donné que GolfScript (et CJam) utilise des entiers de longueur arbitraire, cela fonctionnera pour des programmes de longueur arbitraire, du moins tant que l'ordinateur qui exécute le code dispose de suffisamment de mémoire pour le stocker.la source
Attaché ,
767261 octetsEssayez-le en ligne!
Quine standard qui ajoute un espace à la fin de
x
chaque itération.Premières itérations:
etc.
Attaché, 72 octets
Essayez-le en ligne!
Il s’agit simplement d’une variante du format standard quine, avec une variable
y
définie10*y
après chaque itérationLes premières itérations:
etc.
la source
Swift 4 , 89 octets
Inclut un retour à la ligne
Essayez-le en ligne!
la source
Haskell , 88 octets
Essayez-le en ligne! Se développe en ajoutant des caractères
#
à la chaîne de données.la source
show
ajoutant plus qu’une chaîne et en utilisant un filtrage par motif. Essayez-le en ligne!Stax ,
20 à18 octetsExécuter et déboguer
Génère un espace supplémentaire avant le 2e guillemet à chaque itération.
Explication
Utilise le programme
"34s+cTZL "34s+cTZL
pour expliquer.la source
Jstx , 4 octets
Essayez-le en ligne!
la source
Enchantements runiques , 6 octets
Essayez-le en ligne!
Copie directe de cette réponse sur un défi connexe. Il est juste arrivé que la taille augmente déjà d'un octet à chaque itération (l'argument fort pour que ce défi soit un doublon de celui-ci ou vice versa).
la source
Gelée , 11 octets
Essayez-le en ligne!
la source
Merveille , 33 octets
Une variante intéressante sur la quine normale qui ajoute un 1 après chaque itération.
Progression:
Explication
L'un des aspects intéressants de cette quine est que Wonder peut travailler avec des nombres de précision arbitraire, de sorte que la progression ne soit pas interrompue après un certain nombre de valeurs.
la source
ColdFusion, 277 octets
Il s’agit d’une modification anodine de mon cycle ColdFusion qui ajoute une nouvelle ligne à chaque appel supplémentaire.
Testé localement sur lucee-express-5.2.6.60
la source
Lot Windows,
3836 octetsCe code crée un fichier appelé "q", contenant la lettre "q", puis l'ajoute au fichier d'origine. Notez que "::" est un alias pour "rem" qui ne nécessite pas d'espace supplémentaire.
Sauvegardé 2 octets grâce à user3493001.
la source
Gol> <> , 7 octets
Essayez-le en ligne! Essayez-le en ligne !! Essayez-le en ligne !!!
Il s’agit d’une simple variante du jeu classique Gol> <>, mais en ajoute une copie à
H
chaque exécution. Étant donné que laH
commande arrête le programme, des opérations supplémentairesH
à la fin ne modifient pas le comportement.la source
T-SQL , 175 octets
J'ai d'abord écrit une quine SQL, puis je l'ai modifié pour ajouter un espace supplémentaire (quelque peu inspiré par cette réponse ).
la source
Befunge-98 (PyFunge) ,
2219 octetsEssayez-le en ligne!
Ajoute un <avant la dernière "à chaque génération.
la source
C # (compilateur interactif Visual C #) , 89 octets
Inspiré par la réponse de Kevin Cruijssen.
Essayez-le en ligne!
la source