GolfScript, 59 karakter
~:N..*.,2>{:P{(.P\%}do(!},{{N-.*}$0=}:C~[1.{.@+.N<}do]C+++4/
Skrip ini tidak memenuhi beberapa persyaratan:
- Ini hanya berfungsi dengan benar untuk input
n >= 2 , jika tidak maka crash.
- Output dipotong ke integer.
- Performa mengerikan untuk semua yang cukup besar
n
Panduan singkat dari kode:
~:N..*Input disimpan dalam N, dan kami mendorong keduanya ndan kotak n*nsegera.
.,2>Kami akan menghasilkan daftar bilangan prima dengan memfilter array [2..n*n]. Kami menggunakan perhitungan sebelumnya n*nsebagai batas atas (sangat buruk!) Untuk menemukan bilangan prima yang lebih besar dari n.
{:P{(.P\%}do(!},Array kami sebelumnya difilter berdasarkan divisi percobaan. Setiap bilangan bulat P diuji terhadap setiap bilangan bulat [P-1..1].
{{N-.*}$0=}:C~ Mengurutkan array sebelumnya berdasarkan jarak ke n , dan meraih elemen pertama. Sekarang kita memiliki prime terdekat.
[1.{.@+.N<}do]C Kami menghasilkan Fibonnacis sampai kami mendapatkan yang lebih besar dari n . Untungnya, algoritma ini secara alami melacak Fibonnaci sebelumnya, jadi kami membuang keduanya dalam array dan menggunakan jenis jarak kami sebelumnya. Sekarang kami memiliki Fibonnaci terdekat.
+++4/Rata-rata Perhatikan bahwa GolfScript tidak memiliki dukungan untuk pelampung, sehingga hasilnya terpotong.
GolfScript, 81 karakter
Berikut adalah varian yang memenuhi semua persyaratan.
~:N..*2N*,3,|2,^{:P{(.P\%}do(!},{{N-.*}$0=}:C~[0.1{.@+.N<}do]C+++100:E*4/.E/'.'@E%
Untuk memastikan perilaku yang tepat untuk n<2 , saya menghindari 2<(crash ketika array kecil), dan sebagai gantinya digunakan 3,|2,^. Ini memastikan array kandidat utama tepat pada [2]waktunya n < 2. Saya mengubah batas atas untuk prime berikutnya dari n*nke 2*n( postulat Bertrand ). Juga, 0 dianggap sebagai nomor Fibonnaci. Hasilnya dihitung dalam matematika titik tetap di akhir. Menariknya, sepertinya hasilnya selalu di perempat (0, .25, .5, .75), jadi saya harap 2 tempat desimal presisi sudah cukup.
Celah pertama saya menggunakan GolfScript, saya yakin ada ruang untuk perbaikan!