Pertimbangkan tiga urutan nomor A
,, B
dan C
:
A
: Urutan berdasarkan hubungan perulanganf(n) = f(n-1)+f(n-2)
,, dimulai denganf(1) = 3, f(2) = 4
. Jadi, urutannya dimulai seperti ini:3 4 7 11 18 29 47 76 ...
B
: Angka komposit , yaitu semua bilangan bulat yang bukan bilangan prima (atau 1):4 6 8 9 10 12 14 15 16 ...
C
: Digit Pi:3 1 4 1 5 9 2 6 5 ...
Diberikan bilangan bulat positif N < 50
, baik sebagai argumen fungsi atau STDIN, kembalikan nilai desimal fraksi A(N)/B(N)
dengan C(N)
angka setelah titik desimal. Aturan normal untuk pembulatan berlaku (bulatkan jika digit N +1 adalah 5 atau lebih tinggi). Jika digit ke-N pi
adalah nol, bilangan bulat harus dicetak. notasi ilmiah / bentuk Standar diterima untuk angka yang lebih tinggi dari 1000.
Ini kode golf, jadi jawaban tersingkat dalam byte menang.
Beberapa contoh:
N = 1: 0.750
N = 2: 0.7
N = 3: 0.8750
N = 4: 1.2
N = 6: 2.416666667
N = 10: 11.056
N = 20: 764.8750
Tentu saja, aturan golf kode standar berlaku.
Fungsi ini harus berakhir dalam waktu kurang dari dua menit pada laptop modern mana pun.
C(n)
angka, apakah kita harus menyertakan trailing 0?N
? Jika demikian, hingga N = 49. Atau yang lain?Jawaban:
Pyth,
605758 byteUji harness
Ini cukup mudah - menghitung pi, deret fibonacci dan komposit, bulat ke C (n) digit, pad ke C (n) digit plus lokasi angka titik desimal, selesai.
Sebuah):
hu,eGsGQjT7
B (n):
e.ftPZQ)
C (n):
e/u+/*GHhyHy^TQr99ZZT
60 -> 57: Membersihkan n = 1 kasus khusus dalam perhitungan pi.
57 -> 58: Tidak menggunakan precsion yang cukup tinggi untuk pi untuk seluruh rentang input - meningkatkan 99 iterasi menjadi 1000 iterasi.
Catatan tentang pembulatan: Ini menggunakan sistem pembulatan "bahkan terdekat" Python, daripada OP yang ditentukan sistem "menuju tak terhingga". Namun, perbedaannya hanya penting jika digit segera setelah titik pembulatan
5000...
, misalnya 1,25 dibulatkan menjadi 1 digit. Saya memeriksa rentang input, dan ini tidak pernah terjadi, sehingga hasil yang benar selalu dikembalikan.sumber
PowerShell,
420 Bytes (ayyyyyyyy)378 BytesTerima kasih kepada isaacg untuk menghemat 41 byte, karena menghitung bagaimana pertanyaannya membulatkan. Berarti saya tidak harus memasukkan yang menghebohkan
[MidpointRounding]::AwayFromZero
dan tidak perlu secara eksplisit berperan sebagai a[double]
.Yang ini sangat menyenangkan!
Diperluas:
Rekursi dalam PowerShell adalah ... lambat, haruskah kita katakan, jadi kita harus membangun
A(N)
arah lain dan menyimpannya ke dalam array, lalu mengindeksnya.TUA
Juga, sapi suci, apakah persyaratan output membunuh ini. PowerShell secara default adalah pembulatan ke / a / k / pembulatan bankir, yang mengharuskan penggunaan verbose luar biasa
[MidpointRounding]::AwayFromZero
untuk mengubah gaya pembulatan . Di atas semua itu, kita kemudian perlu untuk membuntuti angka nol, jika ada. Kedua persyaratan tersebut digabungkan untuk mengubah beberapa baris terakhir dari 20 Bytes[math]::Round($r,$q)
menjadi 102 Bytes (dari$s=""
ke+$s)
) ... wow.sumber
[MidpointRounding]::AwayFromZero
sendirian hampir terlalu baik / buruk untuk menjadi kenyataan ... =)Javascript (ES6), 302 byte
Satu kata: Belum Selesai.
49 digit pi pertama disimpan dalam string, dan dua urutan lainnya dihasilkan secara otomatis. Ini telah golf sekitar setengahnya; Saya (hampir) yakin saya bisa memeras 50 byte lagi dari itu.
Bekerja untuk semua kasus uji, dan harus bekerja untuk yang lain. Gangguan pada sesuatu yang lebih dari 49 atau kurang dari 0 (toh seharusnya tidak pernah menghadapi situasi ini). Saya terutama menyukai hasilnya untuk 0:
sumber
Oktaf,
276236 BytesPertama-tama saya pikir itu akan keren untuk menggunakan keakuratan tak terbatas dalam alat matematika ini (dan untuk menyegarkan pengetahuan tentang hal itu) jadi saya mulai menulis beberapa algoritma dan kemudian akhirnya menemukan bahwa
pi
nilainya tidak begitu akurat sehingga saya harus menggunakan array lagi. Jadi sekali lagi, tidak ada kesuksesan besar:Masih cukup mudah dibaca, bukan?
Pemakaian
fungsi copy-paste ke oktaf, fungsi panggilan
c
dengan argumen dari nilai yang diperlukan:Optimasi:
endif
,endfor
dan serupa denganend
yang bekerja dengan cara yang samai
dengan satu simpan satu bytenum2str(str2num(p(A)))
omong kosong :)sumber
end
, tidakendif
, banyak byte yang disimpan. Jika anda juga kebetulan memiliki toolbox simbolis untuk MATLAB, Anda dapat menggunakanvpa
untuk mendapatkan poin yang cukup desimal untuk pi:vpa(sym(pi),49)
. Saya tidak memilikinya di laptop ini, jadi saya tidak yakin apakahsym
itu diperlukan di sana, tetapi harus menyimpan beberapa byte =) Dan dapat dibaca tidak selalu merupakan hal yang baik dalam kode golf =)while
dariendwhile
dan sejenisnya berfungsi dengan baik, jadi saya memperbarui jawabannya dengan beberapa karakter lebih sedikit :)