Escreva um programa com comprimento n que emita outro programa cujo tamanho seja o próximo número de Fibonacci após n. O novo programa deve fazer o mesmo - gerar outro programa cujo tamanho seja o próximo número de Fibonacci, etc.
n em si (o tamanho do programa original) não precisa ser um número de Fibonacci, embora seja bom se for.
O menor código vence.
Nenhum recurso externo, apenas ASCII, compilador / intérprete gratuito necessário.
Se sua saída terminar em uma nova linha, ela também será contada.
code-golf
quine
fibonacci
code-generation
aditsu
fonte
fonte
int
ouBigInteger
)Respostas:
CJam,
2623Acabei de experimentar o seu idioma.
9 é
(22*0.618 + 0.5 - 1)/1.618 + 1
.Ele calcula seu próprio comprimento em
*1.618
vez de adicionar repetidamente os dois números. Na primeira versão, ele preencherá a saída antes do{
like1)))))))))
, que conta esses caracteres. Diga o resultadon
. O comprimento total én+22
, e o novo comprimento anterior{
deve ser(n+22)*1.618-22
arredondado. Diminua-o em um para contar o número de)
's. Então será aproximadamente igual a(n+8)*1.618
.Versão antiga:
O número 14 é
24*0.618 + 0.5 - 1
.fonte
Python 2, 160 bytes
Este é um verdadeiro quase quine; não lê sua própria fonte, mas a gera. Primeira saída (com nova linha à direita):
Segundo:
Editar: Opa. Esqueci de mudar a string quando mudei de
;
s para1
s, então a segunda saída estava produzindo ponto-e-vírgula extra (que o Python não suporta). Fixofonte
CJam,
4131 bytesExperimente online.
Resultado
Como funciona
fonte
Python - 89
Minha contagem perfeita de caracteres se foi . ; _; Agradeço ao TheRare por apontar a coisa da nova linha e ao Quincunx por sugerir o uso do Python 2, eliminando 2 caracteres.
EDIT : Agora apenas usa mais
#
s em vez de1
s; 12 caracteres mais curtos.EDIT 2 : 94 caracteres! Eliminado alguma repetição. >: 3
EDIT 3 : Alternativa de repr mais curta para Python 2.
EDIT 4 : A saída é um caractere menor agora.
EDIT 5 : O uso de
%r
encurtá-lo foi retirado de uma resposta de outra pergunta do @primo.EDIT 6 : Mais curto. : D
Aqui está uma versão do Python 3:
Essa resposta é semelhante à do @Quincunx.
fonte
print
sempre adiciona uma nova linha, a menos que você especifiqueend=''
argumento.s,a,b="s,a,b=%s,%i,%i;o=s%%(`s`,b,a+b)+'#';print o+(b-len(o)-1)*'1'",89,144;o=s%(`s`,b,a+b)+'#';print o+(b-len(o)-1)*'1'
JavaScript, 94
Com base em um conhecido JavaScript Quine , isso retorna quase a mesma função, seguida apenas pela quantidade de barras, de modo que soma 144, que é o próximo número de Fibonacci após N. E assim por diante ...
N não é um número de Fibonacci, mas era apenas "bom ter".
fonte
p = (my answer)
-op = eval(p)
algumas vezes e até 196418 ... depois que o tempo de processamento era> 1seg, encerrei o teste: P Mas acho que ele pode continuar ainda mais.p=eval(p)
, também verifiquep.length
. Depois que chega a 987, recebo o comprimento 1598, não um número de Fibonacci.Mathematica
Esta é uma implementação muito simples (ou seja, sem ofuscação aqui). É uma função anônima que retorna com um pouco de preenchimento para obter o comprimento correto. O Mathematica é homoicônico: código e dados são representados como expressões do Mathematica, o que facilita muito a modificação / geração de código em tempo real. Isso também significa que a contagem de caracteres não é uma medida natural do comprimento do código. O tamanho da epxressão ( "contagem de folhas" ) é. Esta versão é baseada na contagem de folhas como medida do comprimento do código.
Se atribuirmos essa função anônima a uma variável
f
(para que eu possa mostrar o que acontece de maneira legível) e continuar chamando 1, 2, 3, ... vezes, sempre medindo a duração do valor de retorno, é isso que Nós temos:Em relação ao requisito de intérprete gratuito: o Mathematica é gratuito para o Raspberry Pi. Caso contrário, esse código deve ser direto para a porta para Mathics (código aberto) . A única coisa que falta na matemática é
InverseFunction
, que pode ser substituída como aqui (mas eu sou preguiçoso :).fonte
LeafCount
parecia muito mais interessante do que usar contagens de caracteres (o que implicaria manipulação de código chata como manipulação de string). :-) Não vou alterá-lo para usar a contagem de caracteres, mas posso excluí-lo sem nenhum mau pressentimento, se desejar.Python 3.8 (pré-lançamento) , 78 bytes
Experimente online!
fonte