Vous devez écrire un programme qui générera le code source qui est
- Plus grand que le programme original (en termes de personnage)
- Imprimera un autre programme plus grand que lui-même lors de son exécution (le nouveau programme constitue également une réponse valable à ce défi)
C'est du code-golf, donc la réponse la plus courte gagne.
code-golf
quine
code-generation
PyRulez
la source
la source
:^)
Réponses:
GS2 (8636 , 0e octet)
Ceci imprime une nouvelle ligne, qui imprime deux nouvelles lignes, qui en imprime trois, et cetera.
Essayez-le en ligne!
la source
H9 + : 1 caractère
C'est vrai. Un personnage. Affiche les paroles de 99 bouteilles de bière , ce qui est un programme valide. Toutes les données superflues ne comptent pas, mais il y a beaucoup de choses
9
là-dedans.La sortie du programme généré est les paroles de 99 bouteilles de bière 59 fois.
Cette fonction donne le nombre de fois que les paroles sont sorties si vous exécutez le programme
n
(si mon calcul est correct):la source
2*59^n-2
instances de "Hello, world!", En raison du "h" dans "the".GolfScript, 9 caractères
Ce code affiche:
qui produit:
qui produit:
etc.
Je crois que c'est la réponse la plus courte dans un "vrai" langage de programmation complet de Turing jusqu'à présent.
Explication:
Fondamentalement, le code original ci-dessus est un "quine-layer": il génère un quine normal suivi de lui-même.
Dans GolfScript, tout littéral de bloc de code (par exemple
{foo}
), s'il n'est pas perturbé sur la pile, est une séquence. Ainsi, par lui-même,{.'.~'}
sort simplement tout seul, comme le ferait n'importe quel autre bloc de code.La
.~
fin du code prend le dernier bloc de code sur la pile, le duplique et exécute la copie. Lorsqu'il est exécuté, le code.'.~'
à l'intérieur du bloc de code duplique l'élément le plus haut de la pile (c'est-à-dire sa copie) et ajoute la chaîne.~
.À la fin du programme, l'interpréteur GolfScript stringie et affiche tout ce qui se trouve sur la pile, qui, dans ce cas, consiste en un
{.'.~'}
bloc de plus que dans l'entrée, plus la chaîne.~
.Prime:
Ajouter un
]
avant le premier.
(pour rassembler tous les blocs de code de la pile dans un tableau avant de les dupliquer) le fait croître de façon exponentielle:les sorties:
qui produit:
qui produit:
etc.
la source
{].'.~'}.~︵ ┻━┻
Java 7: 0 caractères
Enregistrer en tant que fichier
Blank.java
. Si vous enregistrez un fichier dans un autre fichier, remplacez toute instanceBlank
par le nom de fichier approprié.Ensuite, lancez en ligne de commande en compilant d'abord, puis en cours d'exécution. Si la compilation échoue, arrêtez.
J'énumère ceci en tant que Java 7, car il se peut que la sortie diffère d'une version à l'autre.
Premières sorties (sorties sur stderr):
la source
stdout
), rien n’est réellement produit.HQ9 +, HQ9 ++ et similaires, 2 caractères
C'est la sortie:
la source
2^2^n
cas où le programme initial est la génération 0. La longueur est récurrentem -> m^2
.n
, la sortie devientn^n
. Cependant, c'est faux; quand la longueur du code estn
, la longueur de la sortie estn^2
Ruby 27
Une version très légèrement modifiée de cela ( via ):
Le nombre de fois que
puts
-line est imprimée augmente de manière exponentielle.la source
Lambda Calculus - 29
Un simple terme lambda
Réduire ce terme d'un rendement de réduction bêta
Ainsi de suite. C'est une variante simple du classique
(λu.u u)(λu.u u)
qui est un quine in lambda calcul. Double application, nous obtenons ici deux fois plus de résultats.la source
Script SH, 9
Croît à un taux exponentiel.
Exécutez-le
sh whatever.sh
ou définissez-le comme exécutable.La version Windows est ici .
la source
dc 11
Assez facile:
La première ligne est répétée une fois par génération:
La dernière ligne est composée des instructions suivantes:
d
duplique la dernière valeur placée sur la pile (6579792) (pour obtenir une copie supplémentaire à chaque exécution),f
imprime la pile entière (qui est un groupe du même nombre) etP
affiche le nombre (6579792) sous forme de flux d'octets, qui s'affiche sous la formedfP
.la source
redcode (solution récursive)
C'est le code du guerrier le plus facile à écrire dans Redcode , le célèbre Imp:
Lorsqu'il est exécuté, le code écrit une copie de sa seule instruction à l'adresse suivante en mémoire. puis l'exécute, etc.
la source
Python 3 - 55
Cela pourrait être raccourci en remplaçant __file__ par un nom de fichier à caractère unique et en enregistrant le fichier ainsi, mais j’ai eu l’impression que cette réponse correspondait davantage à l’esprit de la question. Après une itération, il affiche:
la source
Smalltalk,
125 6157La version de golf semble presque illisible, donc je vais d'abord expliquer (et utiliser de vrais identifiants).
Il s'agit d'une variante de la méthode d'auto-modification "Le plus bizarre moyen de produire un dépassement de pile".
La méthode affiche un message Hello et sa source actuelle (pour la démonstration uniquement). Ensuite, le code est modifié pour générer une chaîne plus longue et installé. Enfin, le nouveau code est appelé de manière récursive.
Afin de me protéger d'une emballement immédiat, il permet à l'utilisateur de confirmer chaque cycle.
compiler dans Object:
démarrez le spectacle en envoyant "eatMe_alice" à n'importe quel objet; nil fera:
nil eatMe_alice
Une variante intéressante consiste à ne pas appeler le nouveau code de manière récursive, mais itérative, en déroulant la pile d'appels et en entrant à nouveau dans la nouvelle méthode. Cela présente l'avantage de ne pas conduire à une exception de récursivité. Pour ce faire, remplacez l'appel récursif ("self eatMe_alice") par:
Golf:
De toute évidence, l'impression et les appels à domicile n'étant pas demandés, le plus court (pour le golf) consiste simplement à ajouter un commentaire à ma propre source et à le renvoyer. Comme un effet secondaire, il est également installé pour le prochain appel ...
la source
Script SH,
1287Stocker un fichier avec
dans son propre répertoire vide et exécuté à partir de ce répertoire à l'aide de
sh [file]
ou set executable.Ancienne alternative de 8 caractères , mais n’ayant pas besoin de son propre répertoire. Stocker un fichier avec
et exécuter en utilisant
sh [file]
ou définir un exécutable.Ancienne alternative à 12 caractères :
Cela va réellement sortir dans le fichier programme lui-même, mais l'endroit où sortir n'a pas été spécifié. Se réplique à un taux exponentiel.
la source
ed
, vous ne voulez pas parcourir sa page de manuel ...JavaScript,
41, 40 caractèresLa première fois que vous l'exécutez, il en sort avec un autre
;f()
à la fin. Des exécutions ultérieures des résultats de sortie dans chaque source "d'entrée" imprimée deux fois.alert
serait plus court queconsole.log
mais je ne considère pas que plusieurs dialogues d'alerte soient "la" sortie alors qu'il semble raisonnable d'appeler plusieurs lignes dans la console en tant que sortie.la source
"f(f())"
lieu de"f();f()"
Windows .BAT, 25
Croît à un taux exponentiel.
Version SH équivalente ici .
la source
réticulaire, 11 octets, non compétitif
C'est le framework standard de Quine, sauf qu'un extra
1
est imprimé après chaque itération. Essayez-le en ligne!Premières sorties:
la source
Microscript II, 6 octets
Non compétitif, le langage postdate le défi.
La première itération ajoute un extra
qp
à la fin et chaque itération suivante ajoute une copie supplémentaire de ce programme original au début.la source
J , 1 octet
Essayez-le en ligne!
La citation ouverte donne évidemment l'erreur de citation ouverte:
Notez que, de par la nature de l'interpréteur J, les erreurs sont imprimées dans STDOUT et non dans STDERR.
Lorsque ce qui précède est exécuté en tant que code, il affiche:
ensuite
etc. Chaque fois que le code est exécuté, la deuxième ligne est complétée à gauche avec quatre octets
|
, ce qui répond à l'exigence de ce défi.J , bonne variante de quine, 25 octets
Essayez-le en ligne!
Les sorties
Et puis, il sort deux fois, sur des lignes séparées:
ensuite
etc.
La première sortie est une variante simple de la norme J Quine . L'ajouté se
,:~
concatène verticalement, où le tableau 2D résultant est imprimé sous forme de deux lignes de la même chaîne.la source
Enchantements runiques , 6 octets
Essayez-le en ligne!
Celui-ci était bizarre. Tout ce que je devais faire était d'enlever un
~
de la quine originale trouvée par Jo King .Chaque exécution supplémentaire en ajoute une autre
<
à la fin, par exemple:Ce qui ne fait rien.
la source
EcmaScript 6 (51 octets):
Il produit une version plus longue de lui-même, qui peut produire une version plus longue de lui-même, qui peut produire une version plus longue de lui-même, etc.
la source
PHP, 38
Il ajoutera un point-virgule à chaque exécution.
la source
';'
. Ensuite, vous auriez des sorties plus longues.<?=fgets(fopen(__FILE__,'r')).';';
?;<?echo fgets(fopen(__FILE__,'r'));
ECMAScript 6 (38 caractères)
Quelles sorties:
Modifier
Vous pouvez faire (28 caractères):
Cependant, il recurse à l'infini et ne retournera jamais rien ... mais cela peut être résolu en faisant quelque chose comme ceci (42 caractères):
Quel sera le résultat:
la source
+_+ =_=
+1 pour les émoticônesCommon Lisp, 16 caractères
(print `(or ,-))
Certes, il est uniquement interactif, mais le fait de pouvoir référencer le formulaire de niveau supérieur actuel est probablement le meilleur moyen de minimiser un programme non trivial et conforme à la spécification.
Ce qui serait vraiment intéressant, c'est ce qui explose le plus rapidement. Peut-être quelque chose comme
(print `(progn ,@(loop repeat (length -) collect -)))
la source
`
et,
?or
:(print -)
Julia, 66 caractères
Sortie (134 caractères):
Résultat de l'exécution du résultat (268 caractères):
résultat suivant (536 caractères):
Résultat suivant (1072 caractères):
J'espère que c'est selon les règles.
Il produit une sortie plus grande et la sortie elle-même est un code source valide qui produit à nouveau une sortie plus grande.
la source
05AB1E, 15 octets, sans compétition
Essayez-le en ligne!
Impressions
0"DÐ34çý"DÐ34çý"DÐ34çý"DÐ34çý
,qui imprime
0"DÐ34çý"DÐ34çý"DÐ34çý"DÐ34çý"DÐ34çý"DÐ34çý"DÐ34çý"DÐ34çý
,etc.
la source
DD
peuvent être remplacées parÐ
.Evoloop, rectangle 9 × 9 (81 cellules)
L' automate cellulaire Evoloop inclus avec Golly supporte des motifs qui se répliquent de manière "quine". Plus précisément, ces modèles contiennent chacun un "programme"; un motif se reproduit en exécutant d'abord le programme (qui crée le "corps" de la fille), puis en copiant le programme dans la fille.
Ce qui précède s’applique au plus célèbre automate cellulaire "Langton's Loops" ainsi qu’à Evoloop, mais Evoloop présente une différence intéressante, c’est qu’il est facile de créer un motif qui se développe à chaque génération.
(Beaucoup plus intéressant, à mon avis, est le fait qu'Evoloop est un simple automate cellulaire qui contient des motifs qui se reproduisent et évoluent de manière très réaliste! Je pense que les seuls automates cellulaires connus qui le font sont Evoloop et ses descendants Cependant, l’un des inconvénients d’Evoloop est qu’il existe un «meilleur» génome: l’évolution converge toujours vers ce génome.)
Maintenant, il y a deux lacunes à cette soumission. La première est qu’on ne sait pas ce qu’est la "sortie" d’un automate cellulaire. Mais je pense qu'un automate se reproduisant est "assez proche" pour être un quine; ce n'est certainement pas moins intéressant! L'autre inconvénient est que ces modèles ne créent pas simplement une copie d'eux-mêmes; chaque copie du motif original tente de créer une infinité de copies de lui-même et ces copies finissent par interagir de manière destructive. Donc, je pense avoir répondu aux exigences de ce défi dans l’esprit mais pas dans la lettre.
Sans plus tarder, le motif est le suivant:
Voici à nouveau le motif, dans un format qui peut être copié et collé dans Golly:
D'accord, mais à quoi ça ressemble? Cela ressemble à ceci:
Dans l'animation ci-dessus, vous pouvez voir que le motif initial crée une fille plus grande, ce qui crée une petite-fille plus grande, puis une arrière-petite-fille plus grande et enfin un arrière-arrière-petite-fille encore plus grand qui commence à construire un troisième plus grand encore. petite fille. Si vous suiviez ce modèle pendant longtemps, il continuerait ainsi pour toujours (ou peut-être serait-il éventuellement dépassé par les organismes évolués, qui sont capables de se reproduire beaucoup plus rapidement; je ne suis pas sûr).
la source
LOT, 26
Placez ce code dans n'importe quel fichier .bat et il continuera à s'exécuter (dans une boucle infinie) et le fichier s'agrandira également.
la source
%0
est la commande utilisée pour appeler le script, qui peut ne pas avoir d’.BAT
extension. Vous pouvez utiliser%~nx0
pour obtenir le nom de fichier complet du fichier de commandes..bat
d'être exécuté. Si le nom de fichier estexecute.bat
, vous pouvez entrerexecute
ouexecute.bat
. Les deux vont marcher..bat
extension à exécuter , mais vous pouvez laisser l'extension lorsque vous l' exécutez (lorsque vous tapez une commande sans extension, Windows tente.com
,.exe
puis.bat
dans cet ordre). Si le nom de fichier esthello.bat
, alors>> %0
écrira un fichier nomméhello
, qui n'est pas l'originalhello.bat
(et ne peut pas être exécuté).PYG (6)
Imprime son propre code source, séparé par des nouvelles lignes. La deuxième génération serait
et ainsi de suite.
la source
OIL , 83 octets
Il commence par imprimer deux lignes avec un zéro, puis compare chaque ligne à la ligne 1 si elles sont égales (ce qui est le cas lorsque le fichier est épuisé). Nous imprimons le contenu de la cellule 26. Le résultat obtenu sera alors idem, sauf avec un ajouté
33
qui ne fait rien. La prochaine fois, une autre ligne sera ajoutée, et ainsi de suite.la source
Aidez-moi, WarDoq! , 1 octet.
Impressions
Hello, World!
.Les autres caractères que H sont un code source valide (et sûr) (imprimant d’autres variantes de Hello World).
la source