Você deve escrever um programa que produzirá o código fonte que é
- Maior que o programa original (em termos de caracteres)
- Irá imprimir outro programa maior que ele quando executado (ou seja, o novo programa também é uma resposta válida para esse desafio)
Isso é código-golfe, então a resposta mais curta vence.
code-golf
quine
code-generation
PyRulez
fonte
fonte
:^)
Respostas:
GS2 (8636 esposa) , 0 bytes
Isso imprime uma única nova linha, que imprime duas novas linhas, que imprime três novas linhas, etc.
Experimente online!
fonte
H9 + : 1 caracter
Está certo. Um personagem. Produz a letra para 99 garrafas de cerveja , que é um programa válido. Todos os dados estranhos não contam, mas há muitos
9
s nele.A saída do programa produzido é a letra de 99 garrafas de cerveja 59 vezes.
Esta função fornece o número de vezes que as letras são exibidas se você executar os
n
tempos do programa (se meu cálculo estiver correto):fonte
2*59^n-2
instâncias de "Olá, mundo!", Devido ao "h" em "the".GolfScript, 9 caracteres
Este código gera:
quais saídas:
quais saídas:
e assim por diante.
Acredito que esta seja a resposta mais curta em uma linguagem de programação "real" completa de Turing até agora.
Explicação:
Basicamente, o código original acima é uma "camada de quine": ele gera uma quine normal seguida por ela mesma.
No GolfScript, qualquer literal de bloco de código (por exemplo
{foo}
), se não for perturbado na pilha, é uma solução. Assim, por si só,{.'.~'}
simplesmente se produz, como qualquer outro bloco de código.O
.~
no final do código pega o último bloco de código na pilha, duplica e executa a cópia. Quando executado, o código.'.~'
dentro do bloco de código duplica o item mais alto da pilha (isto é, a cópia de si mesmo) e anexa a string.~
.No final do programa, o intérprete GolfScript codifica e gera tudo na pilha, que, nesse caso, consiste em mais um
{.'.~'}
bloco do que na entrada, mais a string.~
.Bônus:
Adicionar um
]
antes do primeiro.
(para coletar todos os blocos de código na pilha em uma matriz antes de serem duplicados) faz com que cresça exponencialmente:saídas:
quais saídas:
quais saídas:
e assim por diante.
fonte
{].'.~'}.~︵ ┻━┻
Caracteres Java 7: 0
Salve como arquivo
Blank.java
. Se você salvá-lo como qualquer outro arquivo, substitua qualquer instância deBlank
pelo nome do arquivo apropriado.Em seguida, execute na linha de comandos, primeiro compilando e depois executando. Se a compilação falhar, pare.
Eu listo isso como Java 7, porque pode gerar resultados diferentes para diferentes versões do Java.
Primeiras saídas (enviadas para stderr):
fonte
stdout
), nada é realmente saída.HQ9 +, HQ9 ++ e similares, 2 caracteres
Esta é a saída:
fonte
2^2^n
, onde o programa inicial é a geração 0. O comprimento se repetem -> m^2
.n
, a saída se tornan^n
. No entanto, isso é falso; quando o comprimento do código én
, o tamanho da saída é #n^2
Ruby 27
Uma versão muito modificada disso ( via ):
O número de vezes que a
puts
linha é impressa aumenta exponencialmente.fonte
Cálculo Lambda - 29
Um termo lambda simples
Reduzir esse termo em uma redução beta rende
E assim por diante. É uma variante simples do clássico,
(λu.u u)(λu.u u)
que é uma solução no cálculo lambda. A aplicação dupla aqui significa que obtemos o dobro da produção.fonte
Script SH, 9
Cresce a uma taxa exponencial.
Execute como
sh whatever.sh
ou defina-o como executável.A versão do Windows está aqui .
fonte
dc 11
Bem simples:
A primeira linha é repetida uma vez a cada geração:
A última linha consiste nas seguintes instruções:
d
duplica o último valor colocado na pilha (6579792) (para obter mais uma cópia cada vez que a rodamos),f
imprime a pilha inteira (que é um monte do mesmo número) eP
imprime o número (6579792) como um fluxo de bytes, exibido comodfP
.fonte
redcode (solução recursiva)
Este é o código do guerreiro mais fácil de escrever no redcode , o famoso Imp:
Quando executado, o código grava uma cópia de sua única instrução no próximo endereço na memória; depois executa, etc.
fonte
Python 3-55
Isso poderia ser mais curto, substituindo __ file__ por um único nome de arquivo e salvando o arquivo como tal, mas achei que essa resposta estava mais no espírito da pergunta. Após uma iteração, ele gera:
fonte
Conversa pequena,
125 6157A versão do golf parece quase ilegível, então vou explicar primeiro (e usar identificadores reais).
Essa é uma variante do método de modificação automática "maneira mais estranha de produzir um estouro de pilha".
O método imprime uma mensagem de saudação e sua fonte atual (apenas para demonstração). Em seguida, o código é modificado para gerar uma string mais longa e instalado. Finalmente, o novo código é chamado recursivamente.
Para me proteger de um fugitivo imediato, ele permite que o usuário confirme em cada ciclo.
compilar em Object:
comece o show enviando "eatMe_alice" para qualquer objeto; nada fará:
nil eatMe_alice
Uma boa variante é não chamar o novo código recursivamente, mas iterativamente, desenrolando a pilha de chamadas e retornando ao novo método. Isso tem a vantagem de não levar a uma exceção de recursão. Para fazer isso, substitua a chamada recursiva ("self eatMe_alice") por:
Golfe:
Obviamente, a impressão e a chamada automática não foram solicitadas; portanto, o mais curto (para golfe) é simplesmente anexar um comentário à minha própria fonte e devolvê-lo. Como efeito colateral, ele também é instalado para a próxima chamada ...
fonte
Script SH,
1287Armazene um arquivo com
em seu próprio diretório vazio e execute a partir desse diretório usando
sh [file]
ou definido executável.Alternativa antiga com 8 caracteres , mas não precisa de diretório próprio. Armazene um arquivo com
e execute usando
sh [file]
ou defina executável.Alternativa antiga com 12 caracteres :
Na verdade, isso resultará no próprio arquivo de programa, mas o local onde a saída não foi especificada. Se replica a uma taxa exponencial.
fonte
ed
, não queria olhar através de sua página man ...JavaScript,
41, 40 caracteresA primeira vez que você o executa, ele se apresenta com outro
;f()
no final. Execuções subsequentes da saída resultam em cada fonte de "entrada" impressa duas vezes.alert
seria mais curto do que,console.log
mas não considero várias caixas de diálogo de alerta como "a" saída, embora pareça razoável chamar várias linhas no console como saída.fonte
"f(f())"
vez de"f();f()"
J , 1 byte
Experimente online!
A citação aberta fornece, obviamente, o erro de citação aberta:
Observe que, pela natureza do interpretador J, os erros são impressos em STDOUT , não em STDERR.
Quando o acima é executado como código, ele imprime:
Então
e assim por diante. Cada vez que o código é executado, a segunda linha é preenchida à esquerda com quatro bytes
|
, cumprindo os requisitos deste desafio.J , variante quine adequada, 25 bytes
Experimente online!
Saídas
E então ele se produz duas vezes, em linhas separadas:
então
e assim por diante.
A primeira saída é uma variante simples do J Quine padrão . A adição
,:~
concatena-se verticalmente, onde a matriz 2D resultante é impressa como duas linhas da mesma string.fonte
Windows .BAT, 25
Cresce a uma taxa exponencial.
Versão SH equivalente aqui .
fonte
reticular, 11 bytes, não-competitivo
Essa é a estrutura padrão do quine, exceto que um extra
1
é impresso após cada iteração. Experimente online!Primeiras saídas:
fonte
Microscript II, 6 bytes
Não-competitivo, o idioma adia o desafio.
A primeira iteração adiciona um extra
qp
ao final, e cada iteração sucessiva adiciona uma cópia extra desse programa original ao início.fonte
Encantos Rúnicos , 6 bytes
Experimente online!
Este foi estranho. Tudo o que eu tinha que fazer era remover um
~
dos resultados encontrados por Jo King .Cada execução adicional acrescenta outra
<
ao final, por exemplo:Todos os quais não fazem nada.
fonte
EcmaScript 6 (51 bytes):
Ele produz uma versão mais longa de si mesmo, que pode produzir uma versão mais longa de si mesmo, que pode produzir uma versão mais longa de si mesmo, etc.
fonte
PHP, 38
Ele adicionará um ponto-e-vírgula a cada execução.
fonte
';'
. Então você obterá resultados mais longos.<?=fgets(fopen(__FILE__,'r')).';';
?;<?echo fgets(fopen(__FILE__,'r'));
ECMAScript 6 (38 caracteres)
Quais saídas:
Editar
Você poderia fazer (28 caracteres):
No entanto, ele será repetido infinitamente e nunca retornará nada ... mas isso pode ser resolvido fazendo algo assim (42 caracteres):
Qual saída:
fonte
+_+ =_=
+1 para emoticonsLisp comum, 16 caracteres
(print `(or ,-))
Concedido, é apenas interativo, mas poder fazer referência ao formulário atual de nível superior é provavelmente a melhor maneira de minimizar um programa não trivial que atenda às especificações.
O que seria realmente interessante é o que explode mais rápido. Talvez algo como
(print `(progn ,@(loop repeat (length -) collect -)))
fonte
`
e,
?or
:(print -)
Julia, 66 caracteres
Saída (134 caracteres):
Resultado da execução do resultado (268 caracteres):
próximo resultado (536 caracteres):
Próximo resultado (1072 caracteres):
Espero que isso esteja de acordo com as regras.
Produz uma saída maior e a saída em si é um código-fonte válido que produz uma saída maior novamente.
fonte
05AB1E, 15 bytes, não competidor
Experimente online!
Impressões
0"DÐ34çý"DÐ34çý"DÐ34çý"DÐ34çý
,que imprime
0"DÐ34çý"DÐ34çý"DÐ34çý"DÐ34çý"DÐ34çý"DÐ34çý"DÐ34çý"DÐ34çý
,etc.
fonte
DD
podem ser substituídas porÐ
.Evoloop, retângulo 9 × 9 (81 células)
O autômato celular Evoloop incluído no Golly suporta padrões que se reproduzem de maneira "semelhante a um quine". Especificamente, esses padrões contêm um "programa"; um padrão se reproduz executando primeiro o programa (que cria o "corpo" da filha) e, em seguida, copiando o programa para a filha.
O exposto acima se aplica aos mais famosos autômatos celulares "Langton's Loops", bem como ao Evoloop, mas o Evoloop tem uma diferença interessante: é fácil criar um padrão que cresce a cada geração sucessiva.
(Muito mais interessante, na minha opinião, é o fato de o Evoloop ser um autômato celular simples que contém padrões que se reproduzem e evoluem de uma maneira muito semelhante à vida! Acho que os únicos autômatos celulares conhecidos que fazem isso são o Evoloop e seus descendentes Uma falha do Evoloop, no entanto, é que existe um genoma "melhor" em particular; a evolução sempre acaba convergindo para esse genoma.)
Agora, existem duas deficiências nessa submissão. Uma é que não está claro qual é a "saída" de um autômato celular. Mas acho que um autômato auto-reprodutivo é "suficientemente próximo" para ser um quine; certamente não é menos interessante! A outra falha é que esses padrões não criam apenas uma única cópia de si mesmos; cada cópia do padrão original tenta criar infinitas cópias de si mesma, e essas cópias acabam interagindo umas com as outras de maneira destrutiva. Então, acho que cumpri os requisitos desse desafio em espírito, mas não em letra.
Sem mais delongas, o padrão é:
Aqui está o padrão novamente, em um formato que pode ser copiado e colado no Golly:
Ok, mas como é? Se parece com isso:
Na animação acima, você pode ver o padrão inicial criar uma filha maior, que cria uma neta maior, depois uma bisneta maior e, finalmente, uma bisneta ainda maior, que começa a construir uma terceira bisneta ainda maior. neta. Se você seguisse esse padrão por um longo tempo, ele continuaria assim para sempre (ou talvez eles acabassem sendo ultrapassados pelos organismos desenvolvidos, que são capazes de se reproduzir muito mais rápido; não tenho certeza).
fonte
LOTE, 26
Coloque esse código em qualquer arquivo .bat e ele continuará sendo executado (em um loop infinito) e o arquivo também aumentará.
fonte
%0
é o comando usado para invocar o script, que pode não ter uma.BAT
extensão. Você pode usar%~nx0
para obter o nome completo do arquivo em lotes..bat
ser executado. Se o nome do arquivo forexecute.bat
, você pode inserirexecute
ouexecute.bat
. Ambos irão funcionar..bat
extensão para executar, mas você pode deixar a extensão off quando você executá-lo (quando você digita um comando com nenhuma extensão, o Windows tenta.com
,.exe
, em seguida,.bat
nesta ordem). Se o nome do arquivo forhello.bat
, ele>> %0
gravará um arquivo chamadohello
, que não é o originalhello.bat
(e não pode ser executado).PYG (6)
Imprime seu próprio código-fonte, separado por novas linhas. A segunda geração seria
e assim por diante.
fonte
ÓLEO , 83 bytes
Primeiro imprime duas linhas com zero nelas e, em seguida, compara cada linha com a linha 1, se elas são iguais (como é o caso quando o arquivo está esgotado), imprimimos o que está na célula 26. A saída resultante será semelhante à mesmo, exceto com uma adição
33
, que não faz nada. Da próxima vez, outra linha será adicionada e assim por diante.fonte
Ajuda, WarDoq! , 1 byte.
Imprime
Hello, World!
.Outros caracteres além de H são códigos fonte válidos (e seguros) (que imprimem outras variantes do Hello World).
fonte