Faça um Quine.
Parece fácil, certo? Bem, esse quine deve produzir-se mais seu primeiro caractere, que depois se produz mais seu segundo caractere, e assim por diante.
Dessa maneira, o quine deve, em várias gerações, produzir duas cópias.
Exemplo: permite que seu código seja x
. Executá-lo deve sair x + x[:1]
. A execução do programa resultante deve produzir x + x[:2]
e assim por diante ...
Se o seu código foi foobar
, executando isso deve sair foobarf
. Executando isso deve saída foobarfo
. E assim por diante e assim por diante seguindo este padrão:
foobar
foobarf
foobarfo
foobarfoo
foobarfoob
foobarfooba
foobarfoobar
foobarfoobarf
Seu programa deve ter mais de 2 bytes e deve gerar apenas um caractere extra de seu próprio código a cada iteração.
Respostas:
Zsh ,
110108100 bytesExperimente online!
Então é possível.
Explicação
fonte
R, 289 bytes
crédito a este quine por inspiração. Funciona apenas se for executado no mesmo ambiente R que o quine anterior for executado.
fonte
cat
adicionando novas linhas.main
ou nenhuma outra estrutura obrigatória como essa em R. Além disso, a pergunta não pede explicitamente um programa completo, portanto, uma função ou similar exigiria.Alice , 29 bytes
Experimente online!
O caractere não imprimível é 0x18.
Explicação
O problema com as
"
funções habituais do Fungeoid é que, se repetirmos o código fonte inteiro, também obteremos mais"
e a string não cobre mais o código fonte inteiro. Suponho que é por isso que a resposta existente usa ag
abordagem enganosa.Essa resposta usa a
"
abordagem baseada em, mas em vez de incluir um"
na fonte, nós a escrevemos no programa em tempo de execução. Dessa forma, haverá apenas um,"
independentemente da frequência com que o programa é repetido (porque o gravamos apenas em uma coordenada específica, independentemente do tamanho do programa).A ideia geral é criar uma representação de todo o código fonte na pilha, mas apenas percorrer os 29 primeiros caracteres (ou seja, o comprimento do programa) com o comprimento do loop determinado pelo tamanho do código. Portanto, podemos realmente acrescentar caracteres arbitrários (exceto feeds de linha) depois
@
e o resultado sempre será uma repetição cíclica do programa principal, um caractere mais longo que a fonte.fonte
Perl 5 , 83 bytes (incluindo nova linha final)
Experimente online!
O bom
__DATA__
token antigo facilita o acréscimo de uma seqüência arbitrária a qualquer programa Perl, que o programa principal pode acessar por meio do<DATA>
identificador de arquivo (e, na verdade__END__
, usando o que faz a mesma coisa para compatibilidade com versões anteriores, em vez de__DATA__
salvar dois bytes extras) .Observe que este programa não lê seu próprio código-fonte, mas apenas os dados de entrada extras anexados à sua fonte após o
__END__
token. Com efeito, o__END__
token e tudo o que vem depois funcionam como uma literal de sequência terminada no final da entrada.Observe também que, para atender exatamente às especificações, esse programa deve terminar em uma nova linha. Caso contrário, a nova linha será anexada automaticamente após o segundo
__END__
, mas a primeira saída da iteração não será exatamente igual ao código mais o primeiro byte.fonte
Befunge-98 , 30 bytes
Experimente online!
Minha tentativa de usar o Befunge-98, que usa um espaço terminado em quine, que também conta quantos caracteres foram produzidos. No entanto, usa o
g
comandofonte
PHP, 146 bytes
Deve ser executado usando
-r
na linha de comando.fonte
php -r 'command'
.Encantos Rúnicos , 61 bytes
Experimente online!
Usa uma abordagem semelhante à da resposta de Alice: escreve reflexivamente o
"
comando string no código, para que exista apenas um. Há muita manipulação de string e pilha para recuperar o programa original, quantos bytes extras são necessários e imprimir os blocos necessários.A
}͍
sequência gira a representação da seqüência de caracteres na memória para que803X4+kw
apareça no início e não no final, devido à posição do"
e não há uma maneira mais fácil de lidar com essa operação sem precisar calcular muitos números estranhos .Enquanto o programa original é de 61 bytes, seu comprimento de cadeia é de apenas 50, o que é fácil de construir,
5X
e foi apenas coincidência que isso não precisou ser resolvido após conter toda a funcionalidade necessária (por exemplo, um programa de tamanho 49 seria mais fácil codificar como50
com um byte de preenchimento do que codificar um literal49
, enquanto51
seria codificado como5X3+
ou 53, tendo que levar em conta seus próprios bytes extras).fonte