Dado un nivel de anidamiento de entero positivo n
y una cadena s
de caracteres ascii imprimibles ( para
~
generar un programa que, cuando se ejecuta en el mismo idioma, genera un programa que genera un programa ... que genera la cadena) s
.
Se n
debe generar un total de programas, todos los cuales se deben ejecutar en el mismo idioma que su respuesta.
Nota: puede generar programas o funciones, cualquier cosa que se le permita de forma predeterminada como envío.
Puede ingresar s
con caracteres de escape, cómo un programa o función en su idioma generalmente ingresará una cadena.
Ejemplo
Por ejemplo, dado n=1
y s="recursion"
, un programa Python 2 podría generar:
print "recursion"
Ejecutar esto generaría:
recursion
Dado n=2
y s = "PPCG", un programa Python 2 podría generar:
print "print \"PPCG\" "
Ejecutando estas salidas:
print "PPCG"
Ejecutando estas salidas:
PPCG
Relacionado (+ inspiración del título): un LUL más y estoy fuera
También relacionado (en sandbox, ahora eliminado, pero aún se puede ver con suficiente reputación): Recursión de código fuente
Casos de prueba
Asegúrese de que su código funcione para los siguientes casos de prueba (uno por línea):
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
fuente
0
?Respuestas:
Jalea , 2 bytes
Pruébalo en línea!
jeje incorporado
fuente
'"hi"'
para ver el resultado esperadoJavaScript (ES6),
4744 bytesGuardado 3 bytes gracias a @HermanLauenstein
Toma entrada en la sintaxis de curry
(n)(s)
.Ejemplo
Saldrá:
Que imprimirá:
Que imprimirá:
Manifestación
Un ejemplo más complejo donde
alert()
se ha anulado para que los resultados intermedios se impriman en la consola y se ejecuten automáticamente.Mostrar fragmento de código
Versión alternativa, 40 bytes.
Sugerido por @Shaggy
Este devuelve una función anónima en lugar de un programa completo.
fuente
alert
? 41 bytesn=>g=s=>BTalert(atob("${btoa(--n?g(s):s)}"))BT
(reemplace BT con backticks)sh + coreutils, 31 bytes
Toma
n
como parámetro de línea de comandos ys
en STDIN.fuente
yes
imprime repetidamente su línea de comando, que esexec sed 1d $0
($
es un metacarácter de shell, por lo que debe ser citado).sed $1q
deja de imprimir después de$1
(es decirn
) líneas.cat
luego copia la cadena de entrada. El archivo resultante es unsh
script que le dice al shell que se reemplace con una copia desed
los parámetros1d
y el nombre del archivo del script.sed
luego omite la primera línea del archivo y genera el resto. Cada script tiene unexec sed 1d $0
prefijo menos , hasta después de lasn
ejecuciones, solo se imprime la entrada original.Python 2 , 40 bytes
Pruébalo en línea!
-4 bytes gracias a xnor
fuente
Haskell, 17 bytes
A partir de cuando escribo esto, esta es la respuesta más corta para un lenguaje no específico de golf .
Es una función que toma
s
yn
en ese orden, y devuelve el resultado o el código fuente de una expresión que, cuando se evalúa, devuelve el siguiente código fuente.Argumento de por qué esto cuenta:
Si
f
se proporcionaPPCG
y2
como sus parámetros, el resultado es el texto"\"PPCG\""
(primera función generada), que cuando se evalúa devuelve el texto"PPCG"
(segunda función generada), y cuando se evalúa, devuelvePPCG
.Gracias a nimi por sugerir un acortamiento.
fuente
APL (Dyalog) ,
2423 bytes-1 gracias a ngn.
Este es un programa completo que solicita
s
y luegon
imprime en STDOUT.Pruébalo en línea! (el caso 17 Deep se omite porque excede el límite de salida de TIO; funciona sin conexión)
⍞
solicitars
⊢
ceder eso (para separar⎕
y⍞
)''''{
...}⍣⎕
mensaje paran
y aplicar este lambda con una comilla simple como argumento de la izquierda que en muchas ocasiones.⍺
representa el argumento izquierdo (la cita) y⍵
es el argumento correcto (el texto de entrada):⍵=⍺
Booleano donde el texto es igual a una cita1+
Agrega uno⍵/⍨
replicar cada carácter del argumento el número correspondiente de veces⍺,
anteponer una cotización⍺,⍨
agregar una citaEsto funciona porque las cadenas en APL están
'
delimitadas y las comillas simples en las cadenas se duplican, mientras que ningún otro carácter necesita escapar.Dyalog APL también se envía con una utilidad (
⎕SE.Dyalog.Utils.repObj
) que genera una expresión APL que se evalúa según su argumento (similar al novato de Jelly ). Por lo tanto, el siguiente programa es equivalente al anterior, pero funciona para todas las matrices:Pruébalo en línea!
fuente
⍺
.- que ahorra (al menos) un byte.Firefox JavaScript,
4135 bytesFirefox tiene una
uneval
cadena agradable , que hace lo que parece: desvaloriza un objeto determinado, en este caso.fuente
Java 8,
9593 bytes-2 bytes gracias a @Lynn .
Escapar de caracteres especiales es muy molesto en Java.
Pruébelo aquí y pruebe el método resultante aquí .
Explicación:
Explicación adicional para el reemplazo de expresiones regulares:
¿Por qué todas estas barras?
fuente
"
en una clase de caracteres regex, por lo que\\\\\"
(cinco barras invertidas) debería estar bien.Baja carga , 11 bytes
Pruébalo en línea!
La entrada debe comenzar en la pila, con el número en la parte superior en forma de un número de iglesia . No sé si este es un método de entrada válido, pero la especificación no tiene entrada, y colocar la entrada en la parte superior de la pila parece un método varado utilizado en dichos idiomas.
fuente
GolfScript , 5 bytes
Pruébalo en línea!
fuente
QuadR , 8 bytes
Traducción simple de la respuesta de ngn .
Toma
n
como argumento ys
como entrada.Pruébalo en línea!
PCRE R EColoque todas las instancias de
^|'|$
Comienzo de línea O Cita O Fin de línea'&
con una cita y todo el partidoEl argumento especifica cuántas veces repetir la transformación.
fuente
R , 62 bytes
Pruébalo en línea!
Llámalo así:
f(n,s)
seguido den
copias de()
Una función con nombre; devuelve una función anónima Todo lo que hace es modificar los valores predeterminados de
formals
off
, permitiendo que se llame a la función resultante (y luego el resultado de esa llamada,n
veces). cuandon
llega0
, vuelves
.¡R no es realmente malo para escapar! Utiliza el escape de estilo C, por lo que solo tiene que tomar la entrada, reemplazar
"
con\"
y\
con\\
, y luego envolver todo" "
.fuente
Pyth, 21 bytes
Pruébalo aquí
Lamentablemente, la función recursiva (no es un programa completo como el anterior) es más larga (24 bytes):
fuente
APL (Dyalog Classic) , 19 bytes
Pruébalo en línea!
fuente
Ruby , 34 bytes
%p
es un indicador printf específico de Ruby que obtiene elinspect
valor de su argumento, similar a%r
Python.$><<
significa imprimir.Pruébalo en línea!
fuente
Excel VBA (32 bits), 67 bytes
Versión restringida a Excel VBA de 32 bits porque se
2^i
evalúa sin error en VBA de 32 bits, pero no en VBA de 64 bitsFunción de ventana inmediata anónima VBE que toma entradas
n
ys
de rangos[A1]
y[B1]
emite una función anónima que cuando se evalúa solo en un terminal (después de lasn
iteraciones) se genera solos
como ese terminalMuestra de entrada / salida
fuente