Neste desafio, você escreverá um programa que emite um programa com o dobro da duração do programa original. O programa emitido deve gerar um novo programa ou um programa com o dobro de seu comprimento.
Exemplos
Se meu programa for a
:
< a
> aa
< aa
> aaaa
< aaaa
> aaaaaaaa
Regras
- Sem embutidos de quine
- O programa original deve ter pelo menos um byte
- A sequência deve teoricamente funcionar infinitamente
- Seu programa não tem permissão para ler nada (arquivo, stdio)
Sua pontuação é do tamanho do programa original.
code-golf
sequence
quine
code-generation
Downgoat
fonte
fonte
Respostas:
CJam, 10 bytes
Teste aqui.
Explicação
fonte
JavaScript,
626137 bytesObrigado a @ Doᴡɴɢᴏᴀᴛ pela ajuda!
Original [37 bytes]:
Filho [74 bytes]:
Neto [148 bytes]:
Alternativo (com impressão no console e como um programa completo):
Original [61 bytes]:
Filho [122 bytes]:
Neto [244 bytes]:
Como funciona!
1.
f=_=>
Defina a função f comoconsole.log(...)
2.
;f()
Execute a função f.3. (na função f)
console.log(...)
Imprima o seguinte:f=
texto literal "f ="${'_'.repeat((0+f).length+5)
"_" repetido para o comprimento de f, alterado para incluir caracteres não incluídos na string de f+f}
A stringificação da função f;f()
texto literal "; f ()"Notas
console.log
é necessário em vez dealert
porquealert
parece não funcionar bem com seqüências muito longas (pelo menos na configuração da minha máquina / navegador)_
são inseridos no nome do parâmetro (não utilizado) da função f, para garantir que sejam incluídos na string de f.console.log
) da primeira solução em relação à segunda: adicionar10
à função em vez de0
convertê-la em string o torna um byte mais longo, eliminando a necessidade de adicionar 1 ao comprimento posteriormente, economizando um byte.fonte
0+f
também deve trabalhar para lançar a função de uma corda(f=_=>`(f=${'_'.repeat((0+f).length+5)+f})()`)()
Capítulo 0.15 ,
1914 bytesOriginal , filho , neto .
Explicação
O que o bit entre
r
s faz é duplicar o período final vezes o suficiente para atender ao critério de duplicação..
é o caractere "parar programa", então os muitos períodos no final não fazem nada, exceto estar lá.fonte
CJam, 12 bytes
Quando executado, isso imprimirá
que, por sua vez, imprimirá
e assim por diante.
Experimente online!
fonte
Python 3, 51 bytes
Isso inclui uma nova linha à direita.
Quais saídas:
fonte
GolfScript, 11 bytes
Experimente online!
Como o código fonte funciona
Se o código fonte acima for executado uma vez, a pilha terminará como
onde a cadeia vazia no início corresponde ao estado inicial da pilha (entrada vazia).
Duas cópias do código fonte deixariam um estado final de
e assim por diante.
O que acontece depois
Depois de executar o código fonte, o intérprete faz o seguinte:
Ele agrupa a pilha inteira em uma matriz e empurra essa matriz na pilha.
Para uma única cópia do código fonte, a pilha agora contém
É executado
puts
com a intenção de imprimir a pilha empacotada, seguida por um avanço de linha.puts
é definido como{print n print}
, assim faz o seguinte.print
imprime a cópia embrulhada da pilha sem inspecioná-la (ou seja, sem convertê-la em sua representação de sequência). Isso enviapara STDOUT e abre a cópia da pilha da parte superior da pilha.
A pilha agora contém
executa o bloco de código que definimos anteriormente.
:
começa salvando["" {: ".~"]} ".~"]
o caractere de espaço,".~"
empurra a si próprio e]
agrupa a pilha em uma matriz.n
empurra uma sequência que consiste em um único avanço de linha.A pilha agora contém
é executado mais uma vez. No entanto, foi redefinido quando o chamamos pela primeira vez e agora contém uma matriz, não um bloco de código.
Na verdade, ele empurra
["" {: ".~"]} ".~"]
, deixando a pilha comoPor fim,
print
imprime o item mais alto da pilha sem inspecioná-lo, enviandopara STDOUT.
fonte
, 26 caracteres / 36 bytes
Try it here (Firefox only).
Observe que há uma nova linha à direita.
Explicação
Quine padrão:
⟮ⒸⅩ222+ᶈ0
Modificações:
ô
função para gerar todos os resultados do quines em vez do último resultado (como feito usando a saída implícita)\u27ee⦃ᶈ0}\u27ef\n
e feche o bloco de cópias para evitar conflitos com os blocos de cópias posteriores.ď2
para repetir a string duas vezes.fonte