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 n
dan kotak n*n
segera.
.,2>
Kami akan menghasilkan daftar bilangan prima dengan memfilter array [2..n*n]
. Kami menggunakan perhitungan sebelumnya n*n
sebagai 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*n
ke 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!