Tâche
Vous recevrez une chaîne dans l'entrée composée uniquement des caractères de a
à z
, c'est- à -dire que l'entrée correspondra à l'expression régulière /^[a-z]*$/
.
Votre sortie doit être un programme complet dans la même langue, dont le code source contient l'entrée et est un quine approprié.
Exemple
Votre programme recevrait les entrées abc
et les sorties:
...abc...
Ce qui précède devrait être un programme complet dans la même langue qui ne prend aucune entrée et sortie:
...abc...
c'est à dire qu'il sort lui-même.
Notation
C'est du code-golf . La réponse la plus courte en octets l'emporte.
Réponses:
Python 3,
5761 octetsPrend une quine python 3 de base d' ici et remplace le nom de la variable par l'entrée.
Remarque: Comme l' a souligné Hyper Neutrino dans les commentaires, cela ne fonctionne pas pour les mots - clés réservés commefor
,if
, etc.L'ajout d'un caractère auquel aucun des mots clés réservés ne se termine par tel que
'x'
ou n'importe quel nombre corrige cela. (Ørjan Johansen).la source
"for"
ou tout autre mot réservé en Python.'x'
.Gelée , 9 octets
Générateur
Essayez-le en ligne!
Comment ça fonctionne
Quine
Si l'entrée est
quine
, le programme suivant est généré.Essayez-le en ligne!
Comment ça fonctionne
Ceci est la quine Jelly standard. Premier,
définit l'argument gauche et la valeur de retour sur la chaîne
"quine\nØv"
.Imprime ensuite
Ṙ
une représentation sous forme de chaîne (le code du bloc précédent) et renvoie la chaîne non modifiée.Ensuite,
v
prend l'argument de gauche et le passe comme entrée au programme JellyDans tous les programmes Jelly, seul le lien principal (défini sur la dernière ligne) est exécuté, donc la première ligne est entièrement ignorée.
Enfin,
Øv
définit la valeur de retour sur"Ṙv"
, qui est imprimée implicitement lorsque le programme externe se termine.la source
Haskell , 51 octets
q
prend une chaîne et renvoie une chaîne.Essayez-le en ligne!
Exemple de sortie pour
putStr$q"test"
:Essayez-le en ligne!
fst
pour extraire le texte principal.show
pour transformer le tuple entier en chaîne.mappend
de combiner les deux fonctions précédentes. Idéalementmappend
sur deux fonctions donne une fonction qui applique chaque fonction à son argument et combine les résultats avecmappend
pour le type de résultat (ici la concaténation de chaînes).la source
Sous-charge , 14 octets
Essayez-le en ligne!
Utilisez comme
(test)(~aSaS(:^)S):^
- qui est en soi une quine.Comment ça fonctionne
(test)
et(~aSaS(:^)S)
sont des littéraux de chaîne, alors placez-vous sur la pile, cette dernière en haut.:
duplique la(~aSaS(:^)S)
chaîne au-dessus de la pile, puis^
exécute son contenu en tant que sous-programme.~
échange les deux premiers éléments de la pile, c'est donc maintenant le(test)
plus haut.a
enveloppements(test)
entre parenthèses supplémentaires.S
prend la chaîne((test))
au-dessus de la pile et l'imprime sans les parenthèses externes (qui ne sont que la syntaxe littérale).aS
Imprime le reste(~aSaS(:^)S)
de la pile de manière similaire (avec les parenthèses).(:^)S
imprime la finale:^
.la source
)(
comme entrée, je pense.a
-z
.Sous-charge , 14 octets
Essayez-le en ligne!
Une approche différente de l'autre réponse Underload; plutôt que d'être lui-même un quine, cela construit un quine. Fait intéressant, cela revient au même nombre d'octets. Il s'agit d'une fonction qui prend son argument de la pile et sort en sortie standard.
Explication
La fonction résultante ressemble à ceci:
En d'autres termes, il imprime un littéral de chaîne se contenant, suivi de
:^
. Il s'agit clairement d'une quine (car ce qui vient d'être imprimé est le même que le code que nous avons exécuté pour l'exécuter en premier lieu).la source
a
, tant que vous ne vous occupez pas de l'erreur de segmentation imprimée sur stderr lorsque l'entrée contienta
.(
être un caractère qui apparaît dans l'entrée, tous les programmes ne feront nécessairement rien ou planteront. Je ne pense même pas que ce soit spécifique à TIO; le programme n'est pas valide, mais il a déjà produit la sortie souhaitée au moment où il se bloque.V , 9 octets
Essayez-le en ligne!
Il s'agit d'une modification du quine V standard , et je suis fier que ce ne soit qu'un octet de plus.
Hexdump:
Explication:
Ensuite, l'enregistrement s'arrête implicitement et est lu. Cela générera la sortie suivante:
Puisque la
j
lecture de la macro sera interrompue, rien neHello
sera jamais exécuté.la source
Python 2, 38 octets
Bien que l'entrée ne soit nécessaire que pour la prise en charge
a-z
, cela devrait fonctionner avec toute entrée sur une seule ligne qui ne contient pas d'octets NUL.Essayez-le en ligne
Pour l'entrée,
abc
le quine résultant est:Essayez-le en ligne
la source
RProgN 2 , 15 octets
Expliqué
Utilisation du format
où
%q
est l'entrée qouted, construit une quine de la saveurqui est un quine RProgN2 standard,
{']C'.}]C
qui, avant la fin, ajoute et détruit la chaîne entrée.Essayez-le en ligne!
la source
Rétine , 14 octets
Le nombre d'octets suppose un codage ISO 8859-1.
Essayez-le en ligne!
Pour l'entrée
x
, cela génère:Explication
La sortie est une modification mineure du quine standard . Nous utilisons simplement l'expression régulière
|x
au lieu de l'expression régulière vide. Étant donné que le|
permet toujours (et priorise) et la correspondance vide, la fonctionnalité elle-même n'est pas affectée, et puisqu'ellex
ne contiendra que des lettres, il est garanti que la syntaxe regex est elle-même valide.L'impression utilise en fait une technique similaire à la quine elle-même. Pour éviter la duplication de la quine, nous n'insérons
¶\(*S1`|
qu'une seule fois au début de la chaîne. C'est exactement la moitié du code source. Pour l'imprimer deux fois sans saut de ligne, nous utilisons la configuration\(\
, qui enveloppe tout le programme dans un groupe et fait que la scène elle-même ainsi que le groupe le contenant impriment le résultat sans saut de ligne.la source
Japt , 14 octets
Testez-le en ligne! Pour une entrée de
abc
, sortiesqui sort lui-même. Testez-le en ligne!
Explication
Il s'agit d'une extension de la norme Japt compatible avec la charge utile:
La seule différence est que nous ajoutons
ª`abc
à la fin, ce qui est fondamentalement en JavaScript||"abc"
. Puisque le résultat de la première partie est toujours une chaîne non vide (véridique), le||
ne s'exécute jamais.Il existe plusieurs versions alternatives de la même longueur:
la source
CJam ,
1614 octetsEssayez-le en ligne!
Comment ça fonctionne
Qui sort quelque chose comme
"`_~\"test\";"`_~"test";
.la source
JavaScript, 21 octets
la source
Perl 5 , 35 octets
Essayez-le en ligne!
la source