Programa que cria versões maiores de si mesmo (variante quine)


109

Você deve escrever um programa que produzirá o código fonte que é

  1. Maior que o programa original (em termos de caracteres)
  2. 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.


4
@ Kevin, a definição é recursiva. A saída deve ser um programa cuja saída seja maior que ela própria e uma resposta a esta pergunta. Portanto, a saída da saída deve ser maior que a saída, e a saída da saída deve ser ainda maior, etc.
ugoren

8
Eu acho que você deveria esclarecer suas regras. Por um lado, qualquer código adicional gerado por esse programa é "obviamente inútil"; por outro lado, todo o código adicional na saída é "útil", pois promove o objetivo de responder a esse desafio.
Jason C

5
Desculpe por destruir seu desafio. :^)
Justin

2
Eu acho que esse desafio seria muito melhor como um concurso de popularidade do que um código de golfe. Isso permitiria muito mais criatividade!
corsiKa

30
Naturalmente, esse programa deve ser conhecido como quinino.
Jonathan Van Matre

Respostas:


89

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!


3
Isso não é tecnicamente competitivo, já que o gs2 é mais novo que o desafio?
DJMcMayhem

24
Esse comprometimento antecede o desafio em um mês e meio. Acabei de o testar e funciona como pretendido.
Dennis

1
Como isso não é uma brecha ???
Mama Fun Roll

14
@MamaFunRoll Por que seria? Isso não é diferente de um programa Retina vazio imprimindo 1 , um programa Jelly vazio imprimindo 0 ou um programa Stuck vazio imprimindo Olá, Mundo! .
Dennis

2
@Cyoce Acontece que uma nova linha gera outra nova no GS2.
Esolanging Fruit

299

H9 + : 1 caracter

9

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 9s 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 ntempos do programa (se meu cálculo estiver correto):

f(n) = 59n-1

32
Um programa de 0 caracteres em um determinado idioma, dado que é válido, provavelmente produzirá 0 caracteres. E como 0 * x = 0 para qualquer valor finito x, posso afirmar que meu programa de saída é realmente 9999999999999999 vezes maior que o código-fonte.
Nitro2k01 23/02

39
@JohannesH. Para todos os problemas (solucionáveis), existe uma linguagem de programação que resolve o problema em 0 caracteres.
Cruncher

15
Continuo afirmando que denominamos "Teorema do Cruncher's", a menos que já tenha sido descoberto.
Erty Seidohl

22
Um recurso interessante é que ele também conterá 2*59^n-2instâncias de "Olá, mundo!", Devido ao "h" em "the".
AJMansfield

8
Parece que você foi derrotado.
PyRulez 17/10/16

118

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.


196
{].'.~'}.~︵ ┻━┻
Nitro2k01 23/02


2
@ nitro2k01 meus primeiros pensamentos exatamente: D
Songo

1
"Real" é entre aspas porque o HQ9 + não é real ou porque o GolfScript não é real, ou ambos?
Roger Pate

1
@thepiercingarrow o código-fonte se assemelha a isso #
Rod Rod

108

Caracteres Java 7: 0



Salve como arquivo Blank.java. Se você salvá-lo como qualquer outro arquivo, substitua qualquer instância de Blankpelo 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):

Error: Could not find or load main class Blank
Blank.java:1: error: class, interface, or enum expected
Error: Could not find or load main class Blank
^
Blank.java:1: error: reached end of file while parsing
Error: Could not find or load main class Blank
                                              ^
2 errors
Blank.java:1: error: class, interface, or enum expected
Blank.java:1: error: class, interface, or enum expected
^
Blank.java:1: error:  expected
Blank.java:1: error: class, interface, or enum expected
                          ^
Blank.java:1: error:  expected
Blank.java:1: error: class, interface, or enum expected
                                     ^
Blank.java:1: error: as of release 5, 'enum' is a keyword, and may not be used as an identifier
Blank.java:1: error: class, interface, or enum expected
                                          ^
  (use -source 1.4 or lower to use 'enum' as an identifier)
Blank.java:1: error: = expected
Blank.java:1: error: class, interface, or enum expected
                                               ^
Blank.java:2: error:  expected
Error: Could not find or load main class Blank
     ^
Blank.java:2: error: ';' expected
Error: Could not find or load main class Blank
      ^
Blank.java:2: error: = expected
Error: Could not find or load main class Blank
                      ^
Blank.java:2: error: = expected
Error: Could not find or load main class Blank
                                   ^
Blank.java:2: error:  expected
Error: Could not find or load main class Blank
                                              ^
Blank.java:3: error: = expected
^
^
Blank.java:3: error: ';' expected
^
 ^
Blank.java:4: error: illegal start of type
Blank.java:1: error: reached end of file while parsing
     ^
Blank.java:4: error: = expected
Blank.java:1: error: reached end of file while parsing
          ^
Blank.java:4: error: illegal start of type
Blank.java:1: error: reached end of file while parsing
           ^
Blank.java:4: error:  expected
Blank.java:1: error: reached end of file while parsing
            ^
Blank.java:4: error: = expected
Blank.java:1: error: reached end of file while parsing
          ^
Blank.java:4: error: illegal start of type
Blank.java:1: error: reached end of file while parsing
           ^
Blank.java:4: error:  expected
Blank.java:1: error: reached end of file while parsing
            ^
Blank.java:4: error: = expected
Blank.java:1: error: reached end of file while parsing
              ^
Blank.java:4: error: ';' expected
Blank.java:1: error: reached end of file while parsing
                   ^
Blank.java:4: error: = expected
Blank.java:1: error: reached end of file while parsing
                                 ^
Blank.java:4: error:  expected
Blank.java:1: error: reached end of file while parsing
                                        ^
Blank.java:4: error: = expected
Blank.java:1: error: reached end of file while parsing
                                         ^
Blank.java:4: error: ';' expected
Blank.java:1: error: reached end of file while parsing
                                              ^
Blank.java:5: error:  expected
Error: Could not find or load main class Blank
     ^
Blank.java:5: error: ';' expected
Error: Could not find or load main class Blank
      ^
Blank.java:5: error: = expected
Error: Could not find or load main class Blank
                      ^
Blank.java:5: error: = expected
Error: Could not find or load main class Blank
                                   ^
Blank.java:5: error:  expected
Error: Could not find or load main class Blank
                                              ^
Blank.java:6: error: = expected
                                              ^
                                              ^
Blank.java:6: error: ';' expected
                                              ^
                                               ^
Blank.java:7: error: reached end of file while parsing
2 errors
        ^
30 errors

23
"Você deve escrever um programa que produzirá o código fonte que é" O resultado não pode ser o código fonte. Além disso, dependendo da definição de saída (se a saída deve vir especificamente stdout), nada é realmente saída.
Nitro2k01

43
@ nitro2k01 Cito o mesmo: "Você deve escrever um programa que produzirá o código fonte ". Qualquer coisa é código fonte. Mas apenas algumas coisas são código fonte válido . Além disso, não foi especificado o que é considerado saída, por isso tenho liberdade lá.
Justin

15
@PyRulez Isso mesmo. Eu explorei suas regras. Você não precisa aceitar esta resposta. Quando publiquei isso, eu sabia que uma controvérsia se seguiria, com muitos votos positivos e negativos. Eu decidi que valeria a pena, no entanto.
23714 Justin

29
Tem certeza de que o próprio programa imprimiu a saída? Não era apenas o compilador? O programa nunca é compilado e ele próprio não é interpretado nem executado, portanto, não foi capaz de produzir nenhuma saída.
VX

12
@ blabla999 Eu discordo - as pessoas não tentam esses desafios porque alguém faz algo louco. Nós apenas nos desafiamos a fazê-lo de outra maneira. Como diz Mark Rosewater, "restrições de raça criatividade"
corsiKa

79

HQ9 +, HQ9 ++ e similares, 2 caracteres

QQ

Esta é a saída:

QQQQ

36
Vi isso e pensei: "Ah, não, nada pode superar isso". Comecei a tentar inventar alguma coisa, então isso me atingiu. Então eu postei uma resposta.
Justin

1
@Quincunx Bravo, votou positivamente na sua resposta.
Victor Stafusa

4
@ Quincunx Não, acho que é 2^2^n, onde o programa inicial é a geração 0. O comprimento se repete m -> m^2.
Vortico 23/02

3
@Vortico Bom ponto. Mesmo que eu tenha dito errado, eu quis dizer: No comprimento do código n, a saída se torna n^n. No entanto, isso é falso; quando o comprimento do código é n, o tamanho da saída é #n^2
Justin

2
É engraçado, porque até as duas primeiras iterações são possíveis candidatos para essa pergunta.
PyRulez 23/02

29

Ruby 27

Uma versão muito modificada disso ( via ):

puts <<3*3,3
puts <<3*3,3
3

O número de vezes que a putslinha é impressa aumenta exponencialmente.

$ ruby quine.rb | ruby | ruby
puts <<3*3,3
puts <<3*3,3
puts <<3*3,3
puts <<3*3,3
puts <<3*3,3
puts <<3*3,3
puts <<3*3,3
puts <<3*3,3
puts <<3*3,3
puts <<3*3,3
puts <<3*3,3
puts <<3*3,3
puts <<3*3,3
puts <<3*3,3
puts <<3*3,3
3

$ ruby quine.rb | ruby | ruby | ruby | ruby | ruby | ruby | ruby | wc -l
    3283

17
Resposta inspirada no Kaiser Chiefs
Ben Jackson

25

Cálculo Lambda - 29

Um termo lambda simples

(λu.(u u)(u u))(λu.(u u)(u u))

Reduzir esse termo em uma redução beta rende

((λu.(u u)(u u))(λu.(u u)(u u)))((λu.(u u)(u u))(λu.(u u)(u u)))

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.


7
Eu diria que, no cálculo lambda, "executar" um termo lambda significa calcular sua forma normal, não executando uma única redução beta. Além disso, um termo pode conter vários redexes, portanto, "reduzir um único redex" é uma operação ambígua.
Petr Pudlák

2
Você está certo, mas como esse termo não tem forma normal, faz sentido falar sobre isso em termos de redução em pequenos passos. Como o cálculo lambda carece de qualquer avaliação de conjunto inerente, posso apenas definir "em execução" para reduzir um único redex de nível superior de redex com semântica chamada por nome, não?
Jozefg

3
Bem, termos sem forma normal correspondem a programas que não terminam. E o problema com o redex de nível superior é que um termo pode ter dois redexes, nenhum sendo um subtermo do outro. Você pode escolher algum critério para reduzir, mas eu diria que você está muito longe da semântica padrão do cálculo lambda. (De qualquer forma eu aprecio sua idéia nova.)
Petr Pudlak

2
(λx.xxx) (λx.xxx): 20
Fabio F.

2
(. λx xx) (. λx xxx) reduz-se que, em uma única etapa
Ben Millwood

23

Script SH, 9

cat $0 $0

Cresce a uma taxa exponencial.

Execute como sh whatever.shou defina-o como executável.

A versão do Windows está aqui .


2
No momento em que escrevi esse comentário, a página do Quine Wiki diz que a leitura do sistema de arquivos é trapaça.
Lord Ratte

3
@LordRatte Por outro lado, o desafio não era escrever um quine.
Jason C

20

dc 11

Bem simples:

6579792
dfP

A primeira linha é repetida uma vez a cada geração:

$ dc growing_quine.dc
6579792
6579792
dfP

$ dc growing_quine.dc | dc | dc 
6579792
6579792
6579792
6579792
dfP

A última linha consiste nas seguintes instruções: dduplica o último valor colocado na pilha (6579792) (para obter mais uma cópia cada vez que a rodamos), fimprime a pilha inteira (que é um monte do mesmo número) e Pimprime o número (6579792) como um fluxo de bytes, exibido como dfP.


16

redcode (solução recursiva)

Este é o código do guerreiro mais fácil de escrever no redcode , o famoso Imp:

MOV 0, 1

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.


15

Python 3-55

print(open(__file__).read())
f=lambda:print('f()')
f()

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:

print(open(__file__).read())
f=lambda:print('f()')
f()
f()

3
Isso não é um problema. Veja a definição .
Petr Pudlák

14
@ PetrPudlák Nem existem programas nesta questão. Este é um problema de variante de quine, não de estrita estrita.
AJMansfield

6

Conversa pequena, 125 61 57

A 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:

eatMe_alice
   |msg mySource|

   mySource := thisContext method source.

   '**** Hello Alice' printCR.
   '  ---- my current code is:' printCR.
   mySource printCR.
   '  ---------------' printCR.

   (UserConfirmation confirm:'Again? ') ifTrue:[
       Object compile:
            (mySource
                copyReplaceString:'Hello ','Alice'
                withString:'Hello ','Alice !').
       self eatMe_alice
   ]

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:

thisContext resend

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 ...

x|s|Object compile:(s:=thisContext method source,'""').^s

5

Script SH, 12 8 7

Armazene um arquivo com

sed p *

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

sed p $0

e execute usando sh [file]ou defina executável.

Alternativa antiga com 12 caracteres :

sed -i- p $0

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.


1
Você ainda pode ter chance de usar ed, não queria olhar através de sua página man ...
Jens Erat

4

JavaScript, 41 , 40 caracteres

function f(){console.log(f+"f(f())")}f()

A 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.

alertseria mais curto do que, console.logmas 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.


Você pode salvar um byte em "f(f())"vez de"f();f()"
Hedi 12/11

Isso não parece trabalhar para mim ...
Destrutível Lemon

4

J , 1 byte

'

Experimente online!

A citação aberta fornece, obviamente, o erro de citação aberta:

|open quote
|   '
|   ^
|[-1] /home/runner/.code.tio

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:

|open quote
|   |   '
|       ^
|[-2] /home/runner/.code.tio

Então

|open quote
|   |   |   '
|           ^
|[-2] /home/runner/.code.tio

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

echo,~'echo,:~(,quote)'''

Experimente online!

Saídas

echo,:~(,quote)'echo,:~(,quote)'

E então ele se produz duas vezes, em linhas separadas:

echo,:~(,quote)'echo,:~(,quote)'
echo,:~(,quote)'echo,:~(,quote)'

então

echo,:~(,quote)'echo,:~(,quote)'
echo,:~(,quote)'echo,:~(,quote)'
echo,:~(,quote)'echo,:~(,quote)'
echo,:~(,quote)'echo,:~(,quote)'

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.


3

Windows .BAT, 25

@COPY %~nx0+%~nx0 CON>NUL

Cresce a uma taxa exponencial.

Versão SH equivalente aqui .


3

reticular, 11 bytes, não-competitivo

"'34'coo1o;

Essa é a estrutura padrão do quine, exceto que um extra 1é impresso após cada iteração. Experimente online!

Primeiras saídas:

"'34'coo1o;
"'34'coo1o;1
"'34'coo1o;11
"'34'coo1o;111

3

Microscript II, 6 bytes

Não-competitivo, o idioma adia o desafio.

"qp"qp

A primeira iteração adiciona um extra qpao final, e cada iteração sucessiva adiciona uma cópia extra desse programa original ao início.



2

EcmaScript 6 (51 bytes):

(_=x=>'(_='+_+Array(x++).join(','+_)+')('+x+')')(2)

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.


2

PHP, 38

<?echo fgets(fopen(__FILE__,'r')).';';

Ele adicionará um ponto-e-vírgula a cada execução.


Os códigos de ponto e vírgula são inúteis?
Justin

3
@ Quincunx Eles estão, você está certo. No entanto, o que você consideraria código útil?
ComFreek 23/02

Talvez você possa colocar no ';'. Então você obterá resultados mais longos.
Justin

1
por que não <?=fgets(fopen(__FILE__,'r')).';';?
Ismael Miguel

1
;<?echo fgets(fopen(__FILE__,'r'));
jimmy23013

2

ECMAScript 6 (38 caracteres)

(f=_=>'(f='+f+')();(f='+f+')();')();

Quais saídas:

(f=_=>'(f='+f+')();(f='+f+')();')();(f=_=>'(f='+f+')();(f='+f+')();')();

Editar

Você poderia fazer (28 caracteres):

(f=_=>'(f='+f+')();'+f())();

No entanto, ele será repetido infinitamente e nunca retornará nada ... mas isso pode ser resolvido fazendo algo assim (42 caracteres):

(f=_=>_?'(f='+f+')('+_+');'+f(_-1):'')(3);

Qual saída:

(f=_=>_?'(f='+f+')('+_+');'+f(_-1):'')(3);(f=_=>_?'(f='+f+')('+_+');'+f(_-1):'')(2);(f=_=>_?'(f='+f+')('+_+');'+f(_-1):'')(1);

3
+_+ =_=+1 para emoticons
TuxCrafting 18/10

2

Lisp 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 -)))


+1 Para Lisp comum. Parece-me que você pode pular `e ,?
Daniero

@daniero Sem a citação, ela apenas imprime o programa original, nunca crescendo. Nesse ponto, você também pode omitir o or:(print -)
Stuart Olsen

2

Julia, 66 caracteres

x="print(\"x=\$(repr(x))\\n\$x;\"^2)";print("x=$(repr(x))\n$x;"^2)

Saída (134 caracteres):

x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);

Resultado da execução do resultado (268 caracteres):

x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);

próximo resultado (536 caracteres):

x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);

Próximo resultado (1072 caracteres):

x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);

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.


A saída, quando executada, produzirá uma entrada válida?
PyRulez

No primeiro exemplo, a saída é um código válido. É uma string literal contendo 5 períodos. No segundo exemplo, inserir o prompt julia em si não faria nada. Eu apenas pensei que apenas dar ao repl realmente um caractere de nova linha pressionando enter produz uma saída mais longa que a entrada.
ML

"....." produzirá uma versão maior de si mesmo?
PyRulez

Ah, agora eu entendo. Acabei de notar que tinha que ser recursivo ... hora de corrigir minha solução. Obrigado pela dica.
ML

1
Eu acho que o código está de acordo com as regras agora.
ML

2

05AB1E, 15 bytes, não competidor

0"DÐ34çý"DÐ34çý

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.


Ambas as instâncias de DDpodem ser substituídas por Ð.
Emigna 11/11

1
Por que não competir?
MD XF

2

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 é:

022222220
270170172
212222202
202000212
272000272
212000202
202222212
271041032
022222250

Aqui está o padrão novamente, em um formato que pode ser copiado e colado no Golly:

x = 9, y = 9, rule = Evoloop
.7B$BG.AG.AGB$BA5B.B$B.B3.BAB$BGB3.BGB$BAB3.B.B$B.5BAB$BGA.DA.CB$.6BE
!

Ok, mas como é? Se parece com isso:

Um padrão em um autômato celular que cria cópias cada vez maiores de si mesmo.

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).


1

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á.

echo echo %0 ^>^> %0 >> %0

Isso não funciona muito bem, %0é o comando usado para invocar o script, que pode não ter uma .BATextensão. Você pode usar %~nx0para obter o nome completo do arquivo em lotes.
Jason C

@JasonC AFAIK, ele não precisa .batser executado. Se o nome do arquivo for execute.bat, você pode inserir executeou execute.bat. Ambos irão funcionar.
ub3rst4r

O próprio arquivo precisa ter uma .batextensã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, .batnesta ordem). Se o nome do arquivo for hello.bat, ele >> %0gravará um arquivo chamado hello, que não é o original hello.bat(e não pode ser executado).
Jason C

1

PYG (6)

P(Q,Q)

Imprime seu próprio código-fonte, separado por novas linhas. A segunda geração seria

P(Q,Q)
P(Q,Q)

e assim por diante.


1

ÓLEO , 83 bytes

0
0
1
1
1
4
1
11
4
1
11
1
2
2
1
12
18
10
18
1
32
22
1
18
26
4
26
8
18
11
6
17
4
26

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.


1

Ajuda, WarDoq! , 1 byte.

H

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).


Também funciona em (variantes de) HQ9 +.
CalculatorFeline

@CalculatorFeline no HQ9 + isso não continuaria a crescer.
Martin Ender
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.