Concept
Écrivez un programme qui génère du code dans son langage de programmation. Ce code, une fois exécuté, doit sortir le programme d'origine.
Règles
- Comme il s'agit d'une quine de triche, vous pouvez lire le code source d'origine.
- Le premier programme de sortie doit être dans la même langue que le programme d'origine.
- Vous ne pouvez pas générer de quine normal. Les deux programmes doivent être différents.
- Des échappatoires standard s'appliquent.
- C'est le code-golf donc la réponse la plus courte l'emporte, mais elle ne sera pas sélectionnée.
Réponses:
Bash + coreutils, 11 octets
Ceci imprime
Essayez-le en ligne!
À son tour, qui imprime
la source
tr
commande est redirigée vers$0
son propre code source. C'est donc "tricheur".Escargots, 0 octets
Le deuxième programme est
Le premier programme compte le nombre de correspondances du motif vide sur l'entrée vide (qui a vraiment la zone 0, mais le motif est toujours exécuté au moins une fois comme un hack pour permettre aux programmes de décider ce qu'ils veulent imprimer sur l'entrée vide). Le deuxième programme commence par un quantificateur (comme
{1}
dans regex), ce qui provoque une erreur d'analyse. Étant donné que le programme n'analyse pas correctement, STDOUT est la chaîne vide.la source
7 , 2 octets
7 utilise un jeu de caractères à 3 bits, mais prend les entrées emballées en octets (et selon la méta, les langues avec des jeux de caractères sous-octets sont comptées en utilisant des octets pour le fichier sur le disque ). Voici un
xxd
vidage du programme:Lorsque vous donnez ce fichier à l'interpréteur 7, il affichera le programme suivant:
qui à son tour sortira à nouveau le programme d'origine.
Alors qu'est-ce qui se passe ici? Il n'y a pas de lecture de source impliquée (en fait, je ne pense pas qu'il soit possible de lire la source en 7), bien que sans doute le programme triche d'une autre manière; laissez-moi savoir ce que vous pensez. Voici comment fonctionne le programme. (Notez que chaque commande 7 a deux variantes, dont certaines n'ont pas de nom et ne peuvent pas apparaître dans le programme d'origine. Il y a douze commandes au total, en six paires. J'utilise gras pour les commandes actives, non gras pour passif et dans les cas où la commande active n'a pas de nom, je lui donne le même nom que la commande passive correspondante et je compte sur les caractères gras pour les distinguer. Dans le cas où les deux sont nommés, par exemple,
7
qui est la variante active de1
, chaque commande obtient son propre nom et le gras est juste une mise en évidence de la syntaxe.)À ce stade, l'interpréteur 7 voit que le haut de la pile contient des commandes (
2
et3
) qui ne sont pas représentables, il échappe donc au haut de la pile, produisant723
(ce qui est). La première sortie de commande sélectionne le format de sortie; dans ce cas, c'est le format 7, "formatez la sortie de la même manière que le programme". Les commandes sont donc compressées en octets. Ensuite, le programme continue:À ce stade, il n'y a que des éléments de pile vides sur la pile, donc le programme se ferme. Nous sortons
23
plus tôt. Si nous nous échappons237
(et nous devons le faire, car il contient des commandes non représentables), nous obtenons7231
. Cela obtient la sortie directement, ce qui rend la sortie finale du programme237231
(formaté de la même manière que le programme, c'est-à-dire compressé en octets). Voilà4fa67f
. (On peut noter que cela1
était totalement inutile en termes d'affecter la sortie; la seule raison pour laquelle il est là est de rendre les deux programmes différents.)La course se
237231
déroule presque exactement de la même manière; la différence est que l'inutile1
s'exécute juste après la première impression (et l'élément vide est implicitement supprimé la deuxième fois que la fin actuelle du programme est atteinte). Encore une fois, les résultats231
finissent par se produire eux-mêmes, les résultats23
finissent par se produire précédés par un7
, et nous obtenons231723
, le programme original.L'observateur pourrait noter que les deux programmes, bien qu'ils soient de la même longueur dans l'octal "natif" de la langue, sont de longueurs différentes sur le disque. En effet, un programme 7 peut être rempli avec un nombre arbitraire de 1 bits et le format compressé supprime le remplissage de fin. Voici comment l'encodage se produit:
En d'autres termes, deux octets,
4C
F4
suffisent pour représenter le programme, c'est donc tout ce que j'ai utilisé.la source
Python 3,
297279251243225218208180126 126111 octetsNon-triche:
Cela imprime:
qui, une fois exécuté, imprime le programme original.
la source
Lot, 14 octets
Qui, lorsqu'ils sont exécutés en tant que
cyclicquine.bat
sortiesQui lors de l'exécution génère le fichier de commandes d'origine.
la source
RProgN , 4 octets.
La communauté semble considérer ce genre de chose comme une quine de triche , qui satisfait ainsi les critères.
Avec une nouvelle ligne de fin.
Ceci imprime
Avec une nouvelle ligne de fin, qui imprime le premier code.
RProgN imprime la pile en éclatant, donc de haut en bas.
Essayez-le en ligne!
la source
1\n1\n
dans RProgN, il y aurait une quine sans tricherie, car chacun des 1 s'imprime mutuellement (et cela ne serait considéré comme de la triche que si chacun d'eux s'imprimait). Tout cela implique vraiment que la tricherie dans les quines peut parfois être difficile à définir. (Cependant, cette réponse est correcte dans les deux cas, car la question ne nécessite pas réellement la quine pour tricher, elle le permet simplement .)1\n
est techniquement un quine valide, comme ce1
n'est pas une constante, mais un appel à une fonction qui pousse1
vers la pile.Jolf, 6 octets
Lorsqu'il est exécuté, cela génère:
Qui à son tour sort
1q_a_q
.Essayez-le ici!
Explication
la source
JavaScript (ES6),
696059 octetsLes sorties:
-1 octet (@ETHProductions): utilisez 0 dans l'expression régulière au lieu de \ d
la source
n=>1-n
plutôtn=>+!+n
.1
testament finira par être remplacé par l'expression régulière.Bash + Sed, 15 octets
Même idée que la réponse de Dennis .
la source
Bash,
Catet Rev,1916 octets-3 grâce à @izabera
la source
Bash
,Tac
et `Rev?rev $0 # 0$<space><space>ver
pour une raison quelconque, je ne peux pas mettre deux espaces dans un commentairetac
rev
-ed l'estcat
.> <>, 16 octets
Essayez-le ici!
Les sorties
Il s'agit d'une modification de celle fournie ici . Je ne sais pas si c'est de la triche, il lit la boîte de code et la sort.
la source