GolfScript, 59 znaków
~:N..*.,2>{:P{(.P\%}do(!},{{N-.*}$0=}:C~[1.{.@+.N<}do]C+++4/
Ten skrypt nie spełnia niektórych wymagań:
- Działa poprawnie tylko dla danych wejściowych
n >= 2
, w przeciwnym razie ulega awarii.
- Dane wyjściowe są obcinane do liczby całkowitej.
- Straszna wydajność dla każdego umiarkowanie dużego
n
Krótki przewodnik po kodzie:
~:N..*
Dane wejściowe są przechowywane w N, a my od razu popychamy oba n
i kwadrat n*n
.
.,2>
Wygenerujemy listę liczb pierwszych, filtrując tablicę [2..n*n]
. Używamy naszych poprzednich obliczeń n*n
jako (bardzo źle!) Górnej granicy do znalezienia liczby pierwszej większej niż n.
{:P{(.P\%}do(!},
Nasza poprzednia tablica jest filtrowana według podziału próbnego. Każda liczba całkowita P jest testowana z każdą liczbą całkowitą [P-1..1].
{{N-.*}$0=}:C~
Sortuje poprzednią tablicę na podstawie odległości do n
i pobiera pierwszy element. Teraz mamy najbliższą liczbę pierwszą.
[1.{.@+.N<}do]C
Generujemy Fibonnacis, dopóki nie otrzymamy jednego większego niż n
. Na szczęście ten algorytm naturalnie śledzi poprzednie Fibonnaci, więc rzucamy je zarówno do tablicy, jak i używamy naszego wcześniejszego sortowania odległości. Teraz mamy najbliższy Fibonnaci.
+++4/
Średni. Zauważ, że GolfScript nie obsługuje pływaków, więc wynik jest obcinany.
GolfScript, 81 znaków
Oto wariant, który spełnia wszystkie wymagania.
~:N..*2N*,3,|2,^{:P{(.P\%}do(!},{{N-.*}$0=}:C~[0.1{.@+.N<}do]C+++100:E*4/.E/'.'@E%
Aby zapewnić prawidłowe zachowanie n<2
, unikam 2<
(ulega awarii, gdy tablica jest mała), a zamiast tego używam 3,|2,^
. To gwarantuje, że główna tablica kandydująca jest właśnie [2]
wtedy n < 2
. Zmieniłem górną granicę następnej liczby pierwszej z n*n
na 2*n
( postulat Bertranda ). Również 0 jest uważane za liczbę Fibonnaci. Wynik jest obliczany w matematyce punktu końcowego na końcu. Co ciekawe, wydaje się, że wynik jest zawsze w czwartych (0, .25, .5, .75), więc mam nadzieję, że 2 miejsca dziesiętne dokładności wystarczą.
Mój pierwszy błąd w korzystaniu z GolfScript, jestem pewien, że jest miejsce na ulepszenia!