Dado um nível positivo de aninhamento de número inteiro n
e uma sequência s
de caracteres ascii imprimíveis ( para
~
gerar um programa que, quando executado no mesmo idioma, gera um programa que gera um programa ... que gera a strings
.
Um total de n
programas deve ser gerado, todos os quais devem ser executados no mesmo idioma da sua resposta.
Nota: você pode gerar programas ou funções - qualquer coisa que você permita por padrão como envio.
Você pode inserir s
com caracteres de escape, como um programa ou função em seu idioma usualmente inseria uma string.
Exemplo
Por exemplo, dado n=1
e s="recursion"
, um programa Python 2 pode gerar:
print "recursion"
Executar isso resultaria em:
recursion
Dado n=2
es = "PPCG", um programa Python 2 pode gerar:
print "print \"PPCG\" "
Executando estas saídas:
print "PPCG"
Executando estas saídas:
PPCG
Relacionado (+ inspiração do título): Mais um LUL e estou fora
Também relacionado (na sandbox - agora excluído, mas ainda pode ser visto com reputação suficiente): Recursão do código-fonte
Casos de teste
Verifique se o seu código funciona para os seguintes casos de teste (um por linha):
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
fonte
0
?Respostas:
Geléia , 2 bytes
Experimente online!
hehe builtins
fonte
'"hi"'
para ver o resultado esperadoJavaScript (ES6),
4744 bytesGuardado 3 bytes graças a @HermanLauenstein
Recebe entrada na sintaxe de currying
(n)(s)
.Exemplo
Saída:
Qual será impresso:
Qual será impresso:
Demo
Um exemplo mais complexo em
alert()
que foi substituído para que os resultados intermediários sejam impressos no console e executados automaticamente.Mostrar snippet de código
Versão alternativa, 40 bytes
Sugerida por @Shaggy
Este retorna uma função anônima em vez de um programa completo.
fonte
alert
? 41 bytesn=>g=s=>BTalert(atob("${btoa(--n?g(s):s)}"))BT
(substitua BT por backticks)sh + coreutils, 31 bytes
Toma
n
como um parâmetro de linha de comando es
em STDIN.fonte
yes
imprime repetidamente sua linha de comando, que éexec sed 1d $0
($
é um metacaractere do shell e deve ser citada).sed $1q
para de imprimir após$1
(ou sejan
) linhas.cat
depois copia a sequência de entrada. O arquivo resultante é umsh
script que solicita que o shell se substitua por uma cópia dossed
parâmetros1d
e pelo nome do arquivo do script.sed
depois pula a primeira linha do arquivo e gera o restante. Cada script possui umexec sed 1d $0
prefixo a menos , até que após asn
execuções apenas a entrada original seja impressa.Python 2 , 40 bytes
Experimente online!
-4 bytes graças ao xnor
fonte
Haskell, 17 bytes
A partir de quando escrevo isso, esta é a resposta mais curta para uma área específica para quem não joga golfe. idioma .
É uma função que pega
s
en
nessa ordem e retorna o resultado ou o código fonte de uma expressão que, quando avaliada, retorna o próximo código fonte.Argumento por que isso conta:
Se
f
é dadoPPCG
e2
como seus parâmetros, o resultado é o texto"\"PPCG\""
(primeira função gerada), que quando avaliado retorna o texto"PPCG"
(segunda função gerada) e, quando avaliado, retornaPPCG
.Obrigado a nimi por sugerir um encurtamento.
fonte
APL (Dyalog) ,
2423 bytes-1 graças a ngn.
Este é um programa completo que solicita
s
,n
imprime e imprime em STDOUT.Experimente online! (o caso 17 Deep é omitido por exceder o limite de saída do TIO - funciona offline)
⍞
solicitars
⊢
produzir que (separar⎕
e⍞
)''''{
…}⍣⎕
Soliciten
e aplique esse lambda com uma única citação como argumento à esquerda, muitas vezes.⍺
representa o argumento da esquerda (a citação) e⍵
representa o argumento da direita (o texto de entrada):⍵=⍺
Booleano em que o texto é igual a uma citação1+
Adicione um⍵/⍨
replicar cada caractere do argumento o número correspondente de vezes⍺,
anexar uma cotação⍺,⍨
acrescentar uma cotaçãoIsso funciona porque as seqüências de caracteres no APL são
'
delimitadas e as aspas simples são duplicadas, enquanto outros caracteres não precisam ser escapados.O Dyalog APL também é fornecido com um utilitário (
⎕SE.Dyalog.Utils.repObj
) que gera uma expressão de APL que é avaliada em seu argumento (semelhante ao não-valor de Jelly ). O programa a seguir é, portanto, equivalente ao acima, mas funciona para todas as matrizes:Experimente online!
fonte
⍺
.- que economiza (pelo menos) um byte.Firefox JavaScript,
4135 bytesO Firefox possui uma
uneval
string legal , que faz o que parece - desvaloriza um determinado objeto, neste caso -.fonte
Java 8,
9593 bytes-2 bytes graças a @Lynn .
Escapar caracteres especiais é tão irritante em Java ..
Experimente aqui e tente o método resultante aqui .
Explicação:
Explicação adicional para a substituição do regex:
Por que todas essas barras?
fonte
"
em uma classe de caracteres regex, portanto\\\\\"
(cinco barras invertidas) deve ficar bem.Subcarga , 11 bytes
Experimente online!
A entrada precisa começar na pilha, com o número no topo na forma de um número de igreja . Não sei se esse é um método de entrada válido, mas a especificação não tem entrada, e colocar a entrada no topo da pilha parece um método ocioso usado em tais linguagens.
fonte
GolfScript , 5 bytes
Experimente online!
fonte
QuadR , 8 bytes
Tradução simples da resposta de ngn .
Toma
n
como argumento es
como entrada.Experimente online!
PCRE R EColoque todas as instâncias de
^|'|$
Início da linha OU Cotação OU Fim da linha'&
com uma cotação e a partida inteiraO argumento especifica quantas vezes repetir a transformação.
fonte
R , 62 bytes
Experimente online!
Chame assim:
f(n,s)
seguido den
cópias de()
Uma função nomeada; retorna uma função anônima. Tudo o que faz é modificar os valores padrão de
formals
off
, permitindo que a função resultante seja chamada (e, em seguida, o resultado da chamada,n
times). quandon
chega0
, retornas
.R não é realmente tão ruim em escapar! Ele usa escape no estilo C, então você só precisa pegar a entrada, substituir
"
por\"
e\
com\\
e depois envolver tudo" "
.fonte
Pitão, 21 bytes
Experimente aqui.
Infelizmente, a função recursiva (não o programa completo como acima) é mais longa (24 bytes):
fonte
APL (Dyalog Classic) , 19 bytes
Experimente online!
fonte
Rubi , 34 bytes
%p
é um sinalizador printf específico do Ruby que obtém oinspect
valor de seu argumento, semelhante ao%r
Python.$><<
significa imprimir.Experimente online!
fonte
Excel VBA (32 bits), 67 bytes
Versão restrita ao VBA do Excel de 32 bits porque
2^i
avaliada sem erro no VBA de 32 bits, mas não no VBA de 64 bitsAnonymous VBE funo de janela de imediato que leva entradas
n
es
a partir de gamas[A1]
e[B1]
e gera uma função anónima que quando avaliado para apenas um terminal (depois den
iterações) transmite apenass
como aquele terminalEntrada / Saída de amostra
fonte