Étant donné un niveau d'imbrication d'entier positif n
et une chaîne s
de caractères ascii imprimables ( à
~
, produire un programme qui, lorsqu'il est exécuté dans la même langue, génère un programme qui génère un programme ... qui génère la chaîne s
.
Un total de n
programmes doit être généré, tous doivent être exécutés dans la même langue que votre réponse.
Remarque: vous pouvez produire des programmes ou des fonctions - tout ce qui vous est autorisé par défaut en tant que soumission.
Vous pouvez entrer s
avec des caractères d'échappement, comment un programme ou une fonction dans votre langue entrerait habituellement une chaîne.
Exemple
Par exemple, étant donné n=1
et s="recursion"
, un programme Python 2 peut générer:
print "recursion"
L'exécution de ceci produirait:
recursion
Étant donné n=2
et s = "PPCG", un programme Python 2 peut générer:
print "print \"PPCG\" "
Exécution de ces sorties:
print "PPCG"
Exécution de ces sorties:
PPCG
Connexes (+ inspiration du titre): Encore un LUL et je suis sorti
Également lié (dans le bac à sable - maintenant supprimé, mais peut toujours être affiché avec suffisamment de réputation): Récursion du code source
Cas de test
Assurez-vous que votre code fonctionne pour les cas de test suivants (un par ligne):
n s
2 PPCG
4 Robert'); DROP TABLE Students;--
17 Deep
2 Spaces In Here
3 "Don't forget quotes!"
5 'Backt`cks might be a h`tch'
6 5%s
8 [Brackets]<Are>(Great){Usually}
3 !"#$%&'()*+,-./ 0123456789:;<=>?@ABCDEFGHIJKLMN
6 OPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
7 THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG
3 the quick brown fox jumps over the lazy dog
la source
0
?Réponses:
Gelée , 2 octets
Essayez-le en ligne!
hehe builtins
la source
'"hi"'
pour voir le résultat escomptéJavaScript (ES6),
4744 octetsEnregistré 3 octets grâce à @HermanLauenstein
Prend une entrée dans la syntaxe de curry
(n)(s)
.Exemple
Sortira:
Qui imprimera:
Qui imprimera:
Démo
Un exemple plus complexe où
alert()
a été remplacé afin que les résultats intermédiaires soient imprimés sur la console et exécutés automatiquement.Afficher l'extrait de code
Version alternative, 40 octets
Proposé par @Shaggy
Celui-ci renvoie une fonction anonyme au lieu d'un programme complet.
la source
alert
? 41 octetsn=>g=s=>BTalert(atob("${btoa(--n?g(s):s)}"))BT
(remplacez BT par des backticks)sh + coreutils, 31 octets
Prend
n
comme paramètre de ligne de commande ets
sur STDIN.la source
yes
imprime à plusieurs reprises sa ligne de commande, qui estexec sed 1d $0
(le$
est un métacaractère shell donc il doit être cité).sed $1q
arrête l'impression après$1
(c.-à-d.n
) les lignescat
copie ensuite la chaîne d'entrée. Le fichier résultant est unsh
script qui indique au shell de se remplacer par une copie desed
avec les paramètres1d
et le nom de fichier du script.sed
saute ensuite la première ligne du fichier et sort le reste. Chaque script a unexec sed 1d $0
préfixe de moins , jusqu'à ce qu'après lesn
exécutions, seule l'entrée d'origine soit imprimée.Python 2 , 40 octets
Essayez-le en ligne!
-4 octets grâce à xnor
la source
Haskell, 17 octets
Au moment où j'écris ceci, c'est la réponse la plus courte pour un non-spécifique au golf langue .
C'est une fonction qui prend
s
etn
dans cet ordre, et retourne le résultat ou le code source d'une expression qui, une fois évaluée, retourne le code source suivant.Argument pour pourquoi cela compte:
Si
f
est donnéPPCG
et2
comme ses paramètres, le résultat est le texte"\"PPCG\""
(première fonction générée) qui, lorsqu'il est évalué, renvoie le texte"PPCG"
(deuxième fonction générée), et lorsqu'il est évalué, il renvoiePPCG
.Merci à nimi d' avoir proposé un raccourcissement.
la source
APL (Dyalog) ,
2423 octets-1 grâce à ngn.
Il s'agit d'un programme complet qui vous invite
s
, puis pourn
et imprime sur STDOUT.Essayez-le en ligne! (le cas 17 Deep est omis car il dépasse la limite de sortie de TIO - fonctionne hors ligne)
⍞
demanders
⊢
céder que (pour séparer⎕
et⍞
)''''{
…}⍣⎕
Demandern
et appliquer ce lambda avec une seule citation comme argument de gauche autant de fois.⍺
représente l'argument de gauche (la citation) et⍵
est l'acronyme de droite (le texte d'entrée):⍵=⍺
Booléen où le texte est égal à une citation1+
ajoute un⍵/⍨
répliquer chaque caractère de l'argument le nombre de fois correspondant⍺,
ajouter un devis⍺,⍨
joindre un devisCela fonctionne car les chaînes dans APL sont
'
délimitées et les guillemets simples dans les chaînes sont doublés, alors qu'aucun autre caractère n'a besoin d'être échappé.Dyalog APL est également livré avec un utilitaire (
⎕SE.Dyalog.Utils.repObj
) qui génère une expression APL qui évalue son argument (similaire à l'inégalité de Jelly ). Le programme suivant est donc équivalent au précédent, mais fonctionne pour tous les tableaux:Essayez-le en ligne!
la source
⍺
.- qui économise (au moins) un octet.Firefox JavaScript,
4135 octetsFirefox a une belle
uneval
chaîne qui fait ce que cela ressemble - égalise un objet donné, dans ce cas.la source
Java 8,
9593 octets-2 octets grâce à @Lynn .
Échapper à des caractères spéciaux est tellement ennuyeux en Java.
Essayez-le ici et essayez la méthode résultante ici .
Explication:
Explication supplémentaire pour le remplacement de l'expression régulière:
Pourquoi toutes ces barres obliques?
la source
"
dans une classe de caractères regex, donc\\\\\"
(cinq contre-obliques) devraient être corrects.Sous-charge , 11 octets
Essayez-le en ligne!
L'entrée doit commencer sur la pile, avec le numéro en haut sous la forme d'un chiffre d'église . Je ne sais pas s'il s'agit d'une méthode d'entrée valide, mais la spécification n'a pas d'entrée, et placer l'entrée en haut de la pile semble être une méthode échouée utilisée dans de tels langages.
la source
GolfScript , 5 octets
Essayez-le en ligne!
la source
QuadR , 8 octets
Traduction simple de la réponse de ngn .
Prend
n
comme argument ets
comme entrée.Essayez-le en ligne!
PCRE R EPlacez toutes les instances de
^|'|$
Début de ligne OU Devis OU Fin de ligne'&
avec un devis et tout le matchL'argument spécifie combien de fois répéter la transformation.
la source
R , 62 octets
Essayez-le en ligne!
Appelez-le ainsi:
f(n,s)
suivi den
copies de()
Une fonction nommée; renvoie une fonction anonyme. Il ne fait que modifier les valeurs par défaut de
formals
off
, permettant d'appeler la fonction résultante (puis le résultat de celle appelée,n
times). quandn
atteint0
, il revients
.R n'est en fait pas trop mal à s'échapper! Il utilise l'échappement de style C, il vous suffit donc de prendre l'entrée, de remplacer
"
par\"
et\
avec\\
, puis de boucler le tout" "
.la source
Pyth, 21 octets
Essayez-le ici.
Malheureusement, la fonction récursive (pas le programme complet comme ci-dessus) est plus longue (24 octets):
la source
APL (Dyalog Classic) , 19 octets
Essayez-le en ligne!
la source
Rubis , 34 octets
%p
est un indicateur printf spécifique à Ruby qui obtient lainspect
valeur de son argument, similaire à%r
Python.$><<
signifie imprimer.Essayez-le en ligne!
la source
Excel VBA (32 bits), 67 octets
Version limitée à Excel VBA 32 bits car
2^i
évalue sans erreur dans VBA 32 bits, mais pas dans VBA 64 bitsFonction de fenêtre immédiate VBE anonyme qui prend des entrées
n
ets
des plages[A1]
et[B1]
et génère une fonction anonyme qui, lorsqu'elle est évaluée uniquement sur un terminal (aprèsn
itérations), sort uniquement ens
tant que terminalExemple d'entrée / sortie
la source