Ini adalah masalah matematika yang mempersoalkan banyak hal, membuatnya agak menantang, dan seperti yang bisa Anda duga, ini adalah kode golf, jadi harus sesingkat mungkin juga.
The masukan , n
, adalah setiap bilangan bulat nomor (harus di bilangan bulat dukungan paling tidak, tetapi kebutuhan tidak terbatas pada). The Output adalah rata-rata dari:
n
- Kuadrat dari
n
- Nomor perdana terdekat
n
- Angka terdekat dengan
n
dalam urutan Fibonacci
Tak lama, program harus mencetak ke output standar menyalurkan yang hasil dari(n+(n*n)+closestPrime(n)+closestFib(n))/4
.
Anda tidak perlu peduli dengan kemungkinan meluap dll. Presisi floating point normal juga ok.
Cara input diberikan sepenuhnya terserah Anda. Program terpendek (dalam karakter) menang, seperti biasa dengan kode golf.
Jika terjadi ikatan ketika Anda mencari yang terdekat, pilih salah satu dari yang berikut:
- Naik
- Turun
- Pilih satu secara acak
Jawaban:
Python 160 Chars
Sedikit penjelasan tentang bagian terdekat:
sumber
[b,a][2*N-a-b<0]
:)GolfScript, 59 karakter
Skrip ini tidak memenuhi beberapa persyaratan:
n >= 2
, jika tidak maka crash.n
Panduan singkat dari kode:
~:N..*
Input disimpan dalam N, dan kami mendorong keduanyan
dan kotakn*n
segera..,2>
Kami akan menghasilkan daftar bilangan prima dengan memfilter array[2..n*n]
. Kami menggunakan perhitungan sebelumnyan*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 ken
, dan meraih elemen pertama. Sekarang kita memiliki prime terdekat.[1.{.@+.N<}do]C
Kami menghasilkan Fibonnacis sampai kami mendapatkan yang lebih besar darin
. 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.
Untuk memastikan perilaku yang tepat untuk
n<2
, saya menghindari2<
(crash ketika array kecil), dan sebagai gantinya digunakan3,|2,^
. Ini memastikan array kandidat utama tepat pada[2]
waktunyan < 2
. Saya mengubah batas atas untuk prime berikutnya darin*n
ke2*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!
sumber
JavaScript, 190
[257]
Terkompresi:
sumber
a=0
dan meningkat secara positif. Alih-alih memeriksaisPrime
untuka
danb
, hanya memeriksaisPrime(n+a)
danisPrime(n-a)
. Anda mungkin bisa menumbuk semuanya menjadi satu pernyataan ternary gila, tapi saya buruk dengan javascript.function closestPrime(n,o){return isPrime(n+o)?n+o:isPrime(n-o)?n-o:closestPrime(n,o+1);}
. Sebut sajaclosestPrime(n,0)
dan akan berhasil dengan sendirinya. Persingkat sesuai kebutuhan.Mathematica,
7069 byteSatu byte disimpan berkat Sp3000 (terkadang built-in bukan cara terbaik untuk digunakan).
Ini mendefinisikan fungsi yang tidak disebutkan namanya mengambil bilangan bulat dan menghasilkan rata-rata yang tepat sebagai bilangan rasional. Dalam kasus ikatan, bilangan prima / Fibonacci yang lebih kecil dipilih.
Ini sangat tidak efisien untuk input besar, karena sebenarnya menghasilkan
2n
bilangan prima dan Fibonacci pertama sebelum memilih yang terdekat.sumber
#&@@#
.. Hah?#
adalah argumen fungsi murnif
. Kasus ini, sebenarnya fungsi itu sendiri, karenaf
diterapkan kePrime
danFibonacci
. Jadi itu#@Range@...
berlaku fungsi yang diberikan untuk masing-masing integer dalam jangkauan. Kemudian#&@@
hanyalah cara golf untuk mengekstrak elemen pertama dari daftar. Ia bekerja dengan menerapkan#&
ke daftar, yang merupakan fungsi yang hanya mengembalikan argumen pertamanya.Q, 119
Bukan yang paling efisien.
sumber
MATLAB 88 Chars
n adalah bilangan bulat Anda
Bekerja dengan non integer, sejauh saya telah mengujinya bekerja dengan angka yang sangat besar juga, berjalan sangat cepat juga.
sumber
Scala 299
Tes dan doa:
Pertanyaannya berbicara tentang
any Integer
tetapi masalahnya tidak begitu menarik untuk nilai di bawah 0. Namun - bagaimana kita memulai? Jam 0? Jam 1? Dan apa prime berikutnya untuk 11? 11 sendiri?Gagasan untuk memperbolehkan yang berikutnya lebih besar atau lebih rendah dalam kasus dasi adalah buruk, karena itu membuat membandingkan tidak perlu sulit. Jika hasil Anda berbeda, mereka dapat memilih fib lainnya, prime lainnya, fib lainnya dan prime lainnya, atau Anda salah, atau hasil dari orang lain salah, atau itu adalah kombinasi: pilihan yang berbeda, tetapi salah meskipun, mungkin keduanya salah.
sumber