GolfScript, 59 caractères
~:N..*.,2>{:P{(.P\%}do(!},{{N-.*}$0=}:C~[1.{.@+.N<}do]C+++4/
Ce script ne remplit pas certaines des conditions:
- Il ne fonctionne correctement que pour les entrées
n >= 2
, sinon il se bloque.
- La sortie est tronquée en un entier.
- Performances terribles pour tout modérément grand
n
Une brève procédure pas à pas du code:
~:N..*
L'entrée est stockée dans N, et nous poussons les deux n
et le carré n*n
tout de suite.
.,2>
Nous allons générer une liste de nombres premiers en filtrant le tableau [2..n*n]
. Nous utilisons notre calcul précédent n*n
comme limite supérieure (très mauvaise!) Pour trouver un nombre premier supérieur à n.
{:P{(.P\%}do(!},
Notre tableau précédent est filtré par division d'essai. Chaque entier P est testé contre chaque entier [P-1..1].
{{N-.*}$0=}:C~
Trie le tableau précédent en fonction de la distance n
et capture le premier élément. Nous avons maintenant le nombre premier le plus proche.
[1.{.@+.N<}do]C
Nous générons Fibonnacis jusqu'à ce que nous obtenions un supérieur à n
. Heureusement, cet algorithme garde naturellement la trace de la Fibonnaci précédente, nous les jetons donc tous les deux dans un tableau et utilisons notre tri par distance antérieur. Nous avons maintenant la Fibonnaci la plus proche.
+++4/
Moyenne. Notez que GolfScript ne prend pas en charge les flottants, donc le résultat est tronqué.
GolfScript, 81 caractères
Voici une variante qui répond à toutes les exigences.
~:N..*2N*,3,|2,^{:P{(.P\%}do(!},{{N-.*}$0=}:C~[0.1{.@+.N<}do]C+++100:E*4/.E/'.'@E%
Pour garantir un comportement correct pour n<2
, j'évite 2<
(se bloque lorsque le tableau est petit) et j'utilise à la place 3,|2,^
. Cela garantit que le premier tableau de candidats est juste au [2]
moment n < 2
. J'ai changé la limite supérieure pour le prochain premier de n*n
la 2*n
( postulat de Bertrand ). De plus, 0 est considéré comme un nombre de Fibonnaci. Le résultat est calculé en mathématiques à virgule fixe à la fin. Fait intéressant, il semble que le résultat soit toujours en quart (0, 0,25, 0,5, 0,75), donc j'espère que 2 décimales de précision sont suffisantes.
Ma première fissure à utiliser GolfScript, je suis sûr qu'il y a place à amélioration!