Dans ce défi, vous écrirez un programme qui sort un programme qui est le double de la longueur du programme d'origine. Le programme en sortie doit sortir un nouveau programme, un programme doublant sa longueur.
Exemples
Si mon programme est a
:
< a
> aa
< aa
> aaaa
< aaaa
> aaaaaaaa
Règles
- Pas de quine intégré
- Le programme d'origine doit contenir au moins un octet
- La séquence devrait théoriquement fonctionner à l'infini
- Votre programme n'est pas autorisé à lire à partir de quoi que ce soit (fichier, stdio)
Votre score est de la taille du programme d'origine.
code-golf
sequence
quine
code-generation
Downgoat
la source
la source
Réponses:
CJam, 10 octets
Testez-le ici.
Explication
la source
JavaScript,
626137 octetsMerci à @ Doᴡɴɢᴏᴀᴛ pour l'aide!
Original [37 octets]:
Enfant [74 octets]:
Petit-enfant [148 octets]:
Alternatif (avec impression sur console et en tant que programme complet):
Original [61 octets]:
Enfant [122 octets]:
Petit-enfant [244 octets]:
Comment ça fonctionne!
1.
f=_=>
Définissez la fonction f commeconsole.log(...)
2.
;f()
Exécutez la fonction f.3. (dans la fonction f)
console.log(...)
Imprimez ce qui suit:f=
texte littéral "f ="${'_'.repeat((0+f).length+5)
"_" répété pour la longueur de f, modifié pour tenir compte des caractères non inclus dans la chaîne de f+f}
La stringification de la fonction f;f()
texte littéral "; f ()"Remarques
console.log
est nécessaire au lieu dealert
parcealert
qu'il ne semble pas bien jouer avec des chaînes très longues (au moins sur ma configuration machine / navigateur)_
'sont insérés dans le nom du paramètre (inutilisé) de la fonction f, pour s'assurer qu'ils sont inclus dans la stringification de f.console.log
) de la première solution par rapport à la seconde: ajouter10
à la fonction au lieu de la0
convertir en chaîne la rend un octet plus long, éliminant ainsi la nécessité d'ajouter 1 à la longueur par la suite, économisant un octet.la source
0+f
devrait également fonctionner pour(f=_=>`(f=${'_'.repeat((0+f).length+5)+f})()`)()
Minkolang 0,15 ,
1914 octetsOriginal , enfant , petit - enfant .
Explication
Ce que le bit entre
r
les deux fait est de dupliquer la période de fin suffisamment de fois pour remplir le critère de doublage..
est le caractère "arrêter le programme", donc les nombreuses périodes à la fin ne font rien sauf être là.la source
CJam, 12 octets
Lors de l'exécution, cela imprimera
qui, à son tour, imprimera
etc.
Essayez-le en ligne!
la source
Python 3, 51 octets
Cela inclut une nouvelle ligne de fin.
Quelles sorties:
la source
GolfScript, 11 octets
Essayez-le en ligne!
Comment fonctionne le code source
Si le code source ci-dessus est exécuté une fois, la pile se terminera comme
où la chaîne vide au début correspond à l'état initial de la pile (entrée vide).
Deux copies du code source laisseraient un état final de
etc.
Que se passe-t-il ensuite
Après avoir exécuté le code source, l'interpréteur effectue les opérations suivantes:
Il enveloppe la pile entière dans un tableau et pousse ce tableau sur la pile.
Pour une seule copie du code source, la pile contient maintenant
Il a été exécuté
puts
avec l'intention d'imprimer la pile encapsulée, suivi d'un saut de ligne.puts
est défini comme{print n print}
, il fait donc ce qui suit.print
imprime la copie enveloppée de la pile sans l'inspecter (c'est-à-dire sans la convertir en sa représentation sous forme de chaîne). Cela envoiesur STDOUT et fait apparaître la copie de la pile du haut de la pile.
La pile contient maintenant
exécute le bloc de code que nous avons défini précédemment.
:
commence par enregistrer["" {: ".~"]} ".~"]
le caractère espace, puis se".~"
pousse et]
encapsule la pile dans un tableau.n
pousse une chaîne composée d'un saut de ligne unique.La pile contient maintenant
est exécuté une fois de plus. Cependant, il a été redéfini lorsque nous l'avons appelé pour la première fois et contient maintenant un tableau, pas un bloc de code.
En fait, il pousse
["" {: ".~"]} ".~"]
, laissant la pileEnfin,
print
imprime l'élément de pile le plus haut sans l'inspecter, en envoyantà STDOUT.
la source
𝔼𝕊𝕄𝕚𝕟, 26 caractères / 36 octets
Try it here (Firefox only).
Notez qu'il existe une nouvelle ligne de fin.
Explication
Quine standard:
⟮ⒸⅩ222+ᶈ0
Modifications:
ô
fonction pour sortir les résultats de tous les résultats à la place du dernier résultat (comme pour la sortie implicite)\u27ee⦃ᶈ0}\u27ef\n
et fermez le bloc de copie pour éviter les conflits avec les blocs de copie ultérieurs.ď2
pour répéter la chaîne deux fois.la source