Écrivez un programme de longueur n qui génère un autre programme dont la longueur est le prochain numéro de Fibonacci après n. Le nouveau programme doit faire la même chose - la sortie d' un autre programme dont la longueur est le numéro suivant Fibonacci, etc.
n lui - même (la longueur du programme original) ne doit pas être un certain nombre de Fibonacci, bien que ce serait bien si elle est.
Le code le plus court gagne.
Aucune ressource externe, ASCII uniquement, compilateur / interprète gratuit requis.
Si votre sortie se termine par une nouvelle ligne, elle est également comptée.
code-golf
quine
fibonacci
code-generation
aditsu quitte parce que SE est MAL
la source
la source
int
ouBigInteger
)Réponses:
CJam,
2623Je viens de faire un essai avec votre langue.
9 est
(22*0.618 + 0.5 - 1)/1.618 + 1
.Il calcule sa propre longueur
*1.618
au lieu d'ajouter plusieurs fois les deux nombres. Dans la première version, il remplira la sortie avant{
like1)))))))))
, qui compte ces caractères eux-mêmes. Dites le résultatn
. La longueur totale estn+22
et la nouvelle longueur avant{
doit être(n+22)*1.618-22
arrondie. Diminuez-le de un pour compter le nombre de)
. Il sera alors approximativement égal à(n+8)*1.618
.Ancienne version:
Le nombre 14 est
24*0.618 + 0.5 - 1
.la source
Python 2, 160 octets
C'est une véritable quasi-quine; il ne lit pas sa propre source, mais il la génère. Première sortie (a une nouvelle ligne de fin):
Seconde:
Edit: Oups. J'ai oublié de changer la chaîne lorsque je suis passé de
;
s à1
s, donc la deuxième sortie produisait des points-virgules supplémentaires (que Python ne prend pas en charge). Fixéla source
CJam,
4131 octetsEssayez-le en ligne.
Production
Comment ça fonctionne
la source
Python - 89
Mon nombre de personnages parfait est parti . ; _; Merci à TheRare pour avoir souligné la nouveauté et Quincunx pour avoir suggéré d'utiliser Python 2, en rasant 2 caractères.
EDIT : utilise maintenant plus de
#
s au lieu de1
s; 12 caractères plus courts.EDIT 2 : 94 caractères! Élimine certaines répétitions. >: 3
EDIT 3 : Alternative de représentation plus courte pour Python 2.
EDIT 4 : La sortie est un caractère plus court maintenant.
EDIT 5 : L'utilisation de
%r
pour le raccourcir a été tirée d'une réponse à une autre question de @primo.EDIT 6 : Plus court. :RÉ
Voici une version Python 3:
Cette réponse est similaire à celle de @Quincunx.
la source
print
ajoute toujours une nouvelle ligne, sauf si vous spécifiez unend=''
argument.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
Basé sur un Quine JavaScript bien connu , cela retourne presque la même fonction, suivie seulement par une quantité de barres obliques, de sorte qu'elle résume jusqu'à 144 qui est le prochain numéro de Fibonacci après N. Et ainsi de suite ...
N n'est pas un numéro de Fibonacci, mais c'était seulement "agréable à avoir".
la source
p = (my answer)
puisp = eval(p)
plusieurs fois, et j'ai obtenu jusqu'en 196418 ... après que le temps de traitement était> 1 seconde, j'ai donc arrêté de tester: P Mais je suppose que cela peut continuer encore plus.p=eval(p)
, vérifiez égalementp.length
. Après avoir atteint 987, j'obtiens la longueur 1598, pas un numéro de Fibonacci.Mathematica
Il s'agit d'une implémentation très simple (c.-à-d. Pas d'obscurcissement ici). Il s'agit d'une fonction anonyme qui se retourne avec un peu de rembourrage pour obtenir la bonne longueur. Mathematica est homoiconique: le code et les données sont tous deux représentés sous la forme d'expressions Mathematica, ce qui facilite la modification / génération de code à la volée. Cela signifie également que le nombre de caractères n'est pas une mesure naturelle de la longueur du code. La taille d'épaisseur ( "nombre de feuilles" ) est. Cette version est basée sur le nombre de feuilles comme mesure de longueur de code.
Si nous assignons cette fonction anonyme à une variable
f
(pour que je puisse montrer ce qui se passe de manière lisible), et continuons à l'appeler 1, 2, 3, ... fois, en mesurant chaque fois la longueur de la valeur de retour, c'est ce que on a:Concernant l'exigence d'interprète gratuit: Mathematica est gratuit pour le Raspberry Pi. Sinon, ce code devrait être simple à porter en mathématiques (open source) . La seule chose qui manque aux mathématiques est
InverseFunction
, qui peut être remplacée comme ici (mais je suis paresseux :).la source
LeafCount
semblait beaucoup plus intéressante que l'utilisation du nombre de caractères (ce qui impliquerait une manipulation de code ennuyeuse comme une manipulation de chaîne). :-) Je ne vais pas le changer pour utiliser le nombre de caractères, mais je peux le supprimer sans aucune mauvaise impression si vous le souhaitez.Python 3.8 (pré-version) , 78 octets
Essayez-le en ligne!
Python 2 , 79 octets
Essayez-le en ligne!
la source