Latar Belakang:
Pi ( π
) adalah bilangan transendental , dan oleh karena itu ia memiliki representasi desimal yang tidak berakhir. Serupa, representasi tidak berakhir jika ditulis dalam basis integer lainnya. Tetapi bagaimana jika kita menulisnya di markas π
?
Digit dalam desimal mewakili kekuatan 10, jadi:
π = 3.14… = (3 * 10^0) + (1 * 10^-1) + (4 * 10^-2) + …
Jadi pada dasarnya π
, angka akan mewakili kekuatan π
:
π = 10 = (1 * π^1) + (0 * π^0)
Di basis baru ini, bilangan bulat sekarang memiliki representasi non-terminating. Jadi 10 dalam desimal sekarang menjadi sebagai berikut:
10 => 100.01022… = (1 * π^2) + (0 * π^1) + (0 * π^0) + (0 * π^-1) + (1 * π^-2) + …
Perhatikan bahwa dalam basis π
angka yang digunakan adalah 0,1,2,3 karena ini adalah angka yang kurang dari π
.
Tantangan:
Diberikan bilangan bulat non-negatif x
, baik:
Output (tanpa menghentikan) perwakilannya di basis
π
. Jika angka memiliki representasi terbatas (0, 1, 2, 3), maka program dapat berhenti alih-alih mencetak nol tanpa batas.Ambil bilangan bulat besar yang sewenang-wenang
n
, dan hasilkann
digit pertamax
basisπ
.
Aturan:
- Karena angka memiliki beberapa kemungkinan representasi, Anda harus menampilkan yang tampak terbesar (dinormalisasi). Sama seperti
1.0 = 0.9999…
dalam desimal, masalah ini juga ada di pangkalan ini. Pada dasarnyaπ
, seseorang masih1.0
, tetapi bisa juga ditulis sebagai0.3011…
, misalnya. Demikian pula, sepuluh adalah100.01022…
, tetapi juga dapat ditulis sebagai30.121…
atau23.202…
. - Ini adalah kode-golf, byte paling sedikit menang. Program atau fungsi.
- Tidak ada bawaan ( Saya melihat Anda , Mathematica )
Hasil:
0 = 0
1 = 1
2 = 2
3 = 3
4 = 10.220122021121110301000010110010010230011111021101…
5 = 11.220122021121110301000010110010010230011111021101…
6 = 12.220122021121110301000010110010010230011111021101…
7 = 20.202112002100000030020121222100030110023011000212…
8 = 21.202112002100000030020121222100030110023011000212…
9 = 22.202112002100000030020121222100030110023011000212…
10 = 100.01022122221121122001111210201201022120211001112…
42 = 1101.0102020121020101001210220211111200202102010100…
1337 = 1102021.0222210102022212121030030010230102200221212…
9999 = 100120030.02001010222211020202010210021200221221010…
10.000 digit pertama dari sepuluh di basis Pi
Verifikasi:
Anda dapat memverifikasi output apa pun yang Anda inginkan menggunakan kode Mathematica di sini . Parameter pertama adalah x
, yang ketiga adalah n
. Jika waktu habis, pilih yang kecil n
dan jalankan. Kemudian klik "Open in Code" untuk membuka lembar kerja Mathematica baru dengan program. Tidak ada batasan waktu di sana.
Ubah output yang dihasilkan ke angka di sini .
Terkait:
sumber
n
, saya kira Pi harus memiliki setidaknyan
presisi digit.Jawaban:
Julia 0,6 , 81 byte
Mencetak digit (dan. Yang menghabiskan 14 byte) sampai Tumpukan meluap sekitar 22k digit pada TIO. Jika saya diizinkan untuk melewatkan input sebagai
BigFloat
saya dapat memotong 5 byte. Memanfaatkan konstanta presisi arbitrer bawaanπ
. Tapi ini sedikit lebih dingin dari itu, itu sebenarnya konstanta presisi adaptif,π*1.0
adalah angka floating point 64 bit,π*big(1.0)
(alias dikalikan dengan angka presisi lebih tinggi) memberikanπ
apa pun yang diatur ke presisi Anda.Cobalah online!
sumber
Python 3 ,
471317310 byte7 byte berkat caird coinheringaahing.
Tentunya ada golf yang saya lewatkan. Jangan ragu untuk menunjukkannya di komentar.
Cobalah online!
Versi tidak disatukan:
Cobalah online!
sumber
`i`
.Ruby
-rbigdecimal/math
,11110397 byteCobalah online!
Mengambil nomor input sebagai
x
dan presisi yang diinginkan sebagain
. Output dengan mencetak. Memanfaatkan pustaka BigDecimal bawaan untuk nilai PI pecision sewenang-wenang.sumber
Python 3 + sympy, 144 byte
Cobalah online!
Cukup lambat, sebenarnya.
sumber