Faites une quine.
Semble facile non? Eh bien, cette quine doit sortir elle-même plus son premier caractère, qui sort alors elle-même plus son deuxième caractère, et ainsi de suite.
De cette façon, le quine devrait en plusieurs générations produire deux copies.
Exemple: laisse votre code être x
. L'exécuter devrait sortir x + x[:1]
. L'exécution du programme résultant devrait produire x + x[:2]
et ainsi de suite ...
Si votre code l'était foobar
, son exécution devrait sortir foobarf
. L'exécution devrait produire foobarfo
. Et ainsi de suite et ainsi de suite suivant ce modèle:
foobar
foobarf
foobarfo
foobarfoo
foobarfoob
foobarfooba
foobarfoobar
foobarfoobarf
Votre programme doit être plus long que 2 octets et ne doit produire qu'un seul caractère supplémentaire de son propre code à chaque itération.
Réponses:
Zsh ,
110108100 octetsEssayez-le en ligne!
C'est donc possible.
Explication
la source
R, 289 octets
crédit à cette quine d'inspiration. Fonctionne uniquement s'il est exécuté dans le même environnement R que le quine précédent.
la source
cat
ajoutant des nouvelles lignes.main
ou aucune autre structure obligatoire comme celle de R. En outre, la question ne demande pas explicitement un programme complet, donc une fonction ou similaire ferait l'affaire.Alice , 29 octets
Essayez-le en ligne!
Le caractère non imprimable est 0x18.
Explication
Le problème avec les
"
quines Fungeoid habituelles est que si nous répétons tout le code source, nous obtenons également des informations supplémentaires"
et la chaîne ne couvre plus l'intégralité du code source. Je suppose que c'est pourquoi la réponse existante utilise à lag
place l'approche de triche .Cette réponse utilise l'
"
approche basée sur, mais au lieu d'inclure un"
dans la source, nous l'écrivons dans le programme au moment de l'exécution. De cette façon, il n'y en aura jamais qu'une,"
quelle que soit la fréquence de répétition du programme (car nous ne l'écrivons que sur une coordonnée spécifique, indépendamment de la taille du programme).L'idée générale est alors que nous créons une représentation de tout le code source sur la pile, mais ne parcourons que les 29 premiers caractères (c'est-à-dire la longueur du programme) avec la longueur de la boucle déterminée par la taille du code. Par conséquent, nous pouvons ajouter des caractères arbitraires (sauf les sauts de ligne) après
@
et le résultat sera toujours une répétition cyclique du programme principal, un caractère de plus que la source.la source
Perl 5 , 83 octets (y compris la nouvelle ligne finale)
Essayez-le en ligne!
Le bon vieux
__DATA__
jeton permet d'ajouter facilement une chaîne arbitraire à n'importe quel programme Perl, auquel le programme principal peut ensuite accéder via le<DATA>
descripteur de fichier (et en fait l'utiliser__END__
, ce qui fait la même chose pour la compatibilité descendante, au lieu d'__DATA__
enregistrer deux octets supplémentaires) .Notez que ce programme ne lit pas son propre code source, mais uniquement les données d'entrée supplémentaires ajoutées à sa source après le
__END__
jeton. En effet, le__END__
jeton et tout ce qui se trouve après fonctionne un peu comme un littéral de chaîne terminé à la fin de l'entrée.Notez également que, pour répondre exactement aux spécifications, ce programme doit se terminer par une nouvelle ligne. Si ce n'est pas le cas, la nouvelle ligne est en fait automatiquement ajoutée après la seconde
__END__
, mais la première sortie d'itération ne sera plus précisément égale au code plus son premier octet.la source
Befunge-98 , 30 octets
Essayez-le en ligne!
J'essaie d'utiliser Befunge-98 qui utilise une quine terminée par un espace qui compte également le nombre de caractères sortis. Utilise cependant la
g
commande.la source
PHP, 146 octets
Il doit être exécuté à l'aide
-r
de la ligne de commande.la source
php -r 'command'
.Enchantements runiques , 61 octets
Essayez-le en ligne!
Utilise une approche similaire à la réponse d'Alice: écrit de manière réfléchie la
"
commande de chaîne dans le code afin qu'il n'y en ait qu'un. Il reste beaucoup de manipulation de chaînes et de piles pour récupérer le programme d'origine, combien d'octets supplémentaires sont nécessaires et imprimer les morceaux nécessaires.La
}͍
séquence fait pivoter la représentation de la chaîne en mémoire autour de sorte que le803X4+kw
s'affiche au début plutôt qu'à la fin, en raison de la position du"
et il n'y a pas de moyen plus facile de gérer cette opération sans avoir à calculer beaucoup de nombres maladroits .Alors que le programme d'origine est de 61 octets, sa longueur de chaîne n'est que de 50, ce qui est facile à construire car
5X
ce n'est qu'une coïncidence que cela n'a pas besoin d'être complété après avoir contenu toutes les fonctionnalités nécessaires (par exemple, un programme de longueur 49 serait plus facile pour coder comme50
avec un octet de remplissage que pour coder un littéral49
, tandis que51
serait codé comme5X3+
ou 53, devant tenir compte de ses propres octets supplémentaires).la source