GolfScript, 59 karakter
~:N..*.,2>{:P{(.P\%}do(!},{{N-.*}$0=}:C~[1.{.@+.N<}do]C+++4/
Bu komut dosyası bazı gereksinimleri karşılamıyor:
- Yalnızca girişler için düzgün çalışır
n >= 2
, aksi takdirde kilitlenir.
- Çıktı bir tamsayıya kısaltıldı.
- Orta derecede büyük olan her şey için korkunç performans
n
Kodun kısa bir açıklaması:
~:N..*
Giriş N'de saklanır ve her ikisini n
de kareyi n*n
hemen iteriz.
.,2>
Diziyi filtreleyerek bir primler listesi oluşturacağız [2..n*n]
. Önceki hesaplamamızı n*n
n'den büyük bir asal bulmak için (çok kötü!) Bir üst sınır olarak kullanıyoruz.
{:P{(.P\%}do(!},
Önceki dizimiz deneme bölümüne göre filtrelendi. Her tamsayı P her tamsayıya karşı test edilir [P-1..1].
{{N-.*}$0=}:C~
Önceki diziyi mesafeye göre sıralar ve n
ilk öğeyi yakalar. Şimdi en yakın prime sahibiz.
[1.{.@+.N<}do]C
Biz daha büyük olana kadar Fibonnacis üretiyoruz n
. Neyse ki, bu algoritma doğal olarak önceki Fibonnaci'yi takip ediyor, bu yüzden ikisini de bir diziye atıyoruz ve önceki mesafe sıralamamızı kullanıyoruz. Şimdi en yakın Fibonnaci'ye sahibiz.
+++4/
Ortalama. GolfScript'in şamandıralar için desteği olmadığını unutmayın, bu nedenle sonuç kesilir.
GolfScript, 81 karakter
İşte tüm gereksinimleri karşılayan bir varyant.
~:N..*2N*,3,|2,^{:P{(.P\%}do(!},{{N-.*}$0=}:C~[0.1{.@+.N<}do]C+++100:E*4/.E/'.'@E%
Uygun davranış sağlamak için n<2
, kaçının 2<
(dizi küçük olduğunda çöküyor) ve bunun yerine kullanın 3,|2,^
. Bu baş adayı dizisi adildir emin olur [2]
zaman n < 2
. Ben üst sonraki asal gitmekte değişti n*n
üzere 2*n
( Bertrand'ın önermesiyle ). Ayrıca, 0 bir Fibonnaci sayısı olarak kabul edilir. Sonuç, sonunda sabit nokta matematiğinde hesaplanır. İlginçtir, sonuç her zaman dördüncü sıradadır (0, .25, .5, .75), bu yüzden umarım 2 ondalık kesinlik yeri yeterlidir.
GolfScript kullanmaktaki ilk çatlak, eminim iyileştirme için yer var!