GolfScript, 59 caratteri
~:N..*.,2>{:P{(.P\%}do(!},{{N-.*}$0=}:C~[1.{.@+.N<}do]C+++4/
Questo script non soddisfa alcuni dei requisiti:
- Funziona correttamente solo per gli input
n >= 2
, altrimenti si blocca.
- L'output viene troncato a un numero intero.
- Prestazioni terribili per qualsiasi moderatamente grande
n
Una breve procedura dettagliata del codice:
~:N..*
L'ingresso è memorizzato in N e spingiamo subito entrambi n
e il quadrato n*n
.
.,2>
Genereremo un elenco di numeri primi filtrando l'array [2..n*n]
. Usiamo il nostro precedente calcolo di n*n
come (molto male!) Limite superiore per trovare un numero primo maggiore di n.
{:P{(.P\%}do(!},
Il nostro array precedente è filtrato per divisione di prova. Ogni numero intero P viene testato rispetto a ogni numero intero [P-1..1].
{{N-.*}$0=}:C~
Ordina la matrice precedente in base alla distanza n
e prende il primo elemento. Ora abbiamo il numero primo più vicino.
[1.{.@+.N<}do]C
Generiamo Fibonnacis fino a quando non ne otteniamo uno maggiore n
. Fortunatamente, questo algoritmo tiene naturalmente traccia dei precedenti Fibonnaci, quindi li gettiamo entrambi in un array e usiamo il nostro precedente ordinamento a distanza. Ora abbiamo il Fibonnaci più vicino.
+++4/
Media. Nota che GolfScript non supporta i float, quindi il risultato viene troncato.
GolfScript, 81 caratteri
Ecco una variante che soddisfa tutti i requisiti.
~:N..*2N*,3,|2,^{:P{(.P\%}do(!},{{N-.*}$0=}:C~[0.1{.@+.N<}do]C+++100:E*4/.E/'.'@E%
Per garantire un comportamento corretto per n<2
, evito 2<
(si arresta in modo anomalo quando l'array è piccolo) e invece lo uso 3,|2,^
. Questo si assicura che l'array candidato principale sia proprio [2]
quando n < 2
. Ho cambiato il limite superiore per il prossimo primo da n*n
a 2*n
( postulato di Bertrand ). Inoltre, 0 è considerato un numero di Fibonnaci. Il risultato viene calcolato in matematica a virgola fissa alla fine. È interessante notare che il risultato è sempre in quarta (0, 0,25, 0,5, 75), quindi spero che siano sufficienti 2 decimali di precisione.
Il mio primo crack nell'uso di GolfScript, sono sicuro che ci sia spazio per miglioramenti!