Tantangan:
Pi seharusnya tidak terbatas. Itu berarti setiap angka terdapat di dalam bagian desimal pi. Tugas Anda adalah mengambil bilangan bulat positif pada input dan mengembalikan posisi angka ini dalam digit pi pada output.
Misalnya, jika inputnya adalah 59
, kami akan kembali4
Inilah sebabnya: kita akan mencari angka 59
dalam digit pi
3.14159265...
^^
Nilainya dimulai pada digit ke-4, sehingga hasilnya akan menjadi 4
.
Beberapa contoh lain:
input : 1 output : 1
input : 65 output : 7
input : 93993 output : 42
input : 3 output : 9
Aturan:
- Anda tidak harus menangani angka yang tidak ada dalam 200 digit pertama
- Celah standar, seperti biasa, dilarang.
- Ini codegolf , jadi semakin sedikit byte yang menang.
n
ke -0 yang diindeks ? Jadi kotak teks akan kembali0, 6, 41, 8
sebagai gantinya1, 7, 42, 9
.Jawaban:
Python 2,
69757167 byteDisimpan 4 byte karena caird coinheringaahing .
Tidak menemukan
3
di posisi nol biaya62 byte. Input diberikan sebagai string.Cobalah online!
Versi Tidak Terbatas
Python 2, 224 byte
Menggunakan keran yang tidak terikat berdasarkan rumus yang sama yang digunakan di atas.
Cobalah online!
Versi lebih cepat
Keran tak terikat yang jauh lebih cepat, berdasarkan Ramanujan # 39 .
Cobalah online!
sumber
Sekam , 5 byte
Cobalah online!
Penjelasan
sumber
€
) dengan item pertama (yang terdepan 3) dihapus (t
) dari digit PI (İπ
), ubah menjadi basis-10 (d
) dan hasilkan menjadi STDOUT (secara implisit).İπ
adalah daftar digit tanpa batas, dibuat dengan sumberExcel, 212 byte
Excel hanya menangani 15 tempat desimal sehingga pi hanya kode-keras. Ini harus menjadi batas atas yang cukup lemah untuk tantangan ini.
sumber
CONCAT
dan formula BBP untuk menghitung 200 digit pertama π-base16 dan mencari dalam Hexadecimal sebagai gantinya? (Tidak punya 365, jadi tidak bisa menguji)CONCAT
,CODE
danMID
saya mengurangi string PI dari 202 karakter (termasuk kutipan) menjadi 143:CONCAT(CODE(MID(".ÜÁ£ÙÏ ¦®š«¦ ϲœÔ“ÇŧÝËŠº”ᱬ»—‡ÑÀ†œ¾ˆãÖœƒ°™¢•‘†ÏÒŽÐÖ³ Ҟ¯‰¦¬¼ß²º–ŸÈµ»¨Ñœ°‹‘‚ÔŠ›ÝÕ•Š·»À®–Þٶ݃Ñà",2*ROW(A1:A100)-1,2))-32)
Java 8,
615217202184182166165 byte (dihitung999200 digit)1-diindeks
Cobalah online.
Java builtin
Math.PI
memiliki ketepatan 15 nilai desimal, seperti banyak bahasa lainnya. Untuk memiliki lebih banyak digit, Anda harus menghitungnya sendiri denganBigIntegers
atauBigDecimals
. Ini di atas adalah cara untuk melakukannya ..Mungkin seseorang dapat golf ini di bawah 211 byte, lol ..EDIT: Membuat port jawaban @primo dari Python 2 (pastikan untuk membesarkan hati dia!), Jadi menghitung lebih pendek daripada sulit -coded tidak terlalu dibuat-buat lagi.
Hanya 7 byte lebih ke golf agar lebih pendek.-15 byte terima kasih kepada @Neil , membuatnya lebih pendek dari jawaban yang dikodekan di bawah ini!
-36 bytes terima kasih kepada @primo .
-1 byte berubah
java.math.BigInteger t=null,T=t.TEN.pow(200),r=T;
menjadivar T=java.math.BigInteger.TEN.pow(200);var r=T;
, karenavar
1 byte lebih pendek darinull
(harus menyukai Java 10 baru).Penjelasan:
Java 8, 211 byte (hard-kode 200 digit)
Diindeks 0
Cobalah online.
sumber
!p.equals(t.ONE)
mungkin? Juga,indexOf(n,1)-1
karya saya pikir. Atau simpan 2 byte dan buat 1-diindeks.indexOf
metode yang melompatim
karakter pertama . TIL, terima kasih!p
satu setiap kali (for(int p=667;p-->1;)
), lalu mengalikan denganp
dan membaginya denganp-~p
.r
benar-benar dapat berupa apa saja, meskipun nilai ekstrim akan membutuhkan lebih banyak iterasi. Benih terbaik (iterasi paling sedikit) sebenarnya4e200
.05AB1E , 6 byte
Cobalah online!
Bagaimana?
sumber
3
tetap gagalMATL ,
1615 byteCobalah online!
Penjelasan
sumber
Paket R + angka, 52 byte
Cobalah online!
dropletPi
menghitung 200 angka desimal pertamapi
tetapi termasuk a3.
di awal, jadi kami menghapusnya dengansubstring
dan kemudian mencocokkan denganregexec
, yang mengembalikan indeks pertandingan bersama dengan beberapa metadata tentang pertandingan.sumber
regexpr(scan(),numbers::dropletPi(200))-2
?"if"
?3.
(saya berasumsi kita berurusan dengan integer bukan real in input). Contoh uji bekerja dengan ini.regexpr(3,numbers::dropletPi(200))-2
kembali-1
ketika harus kembali9
, cobaJelly , 23 byte
Tautan monadik yang menerima daftar karakter (bilangan bulat untuk menemukan) dan mengembalikan indeks. Berfungsi untuk input yang terkandung dalam 252 digit pertama dari bagian desimal π.
Cobalah online!
Bagaimana?
Ini menggunakan rumus Leibniz untuk π untuk menghitung 253 digit pertama termasuk yang terkemuka
3
(ditambah empat trailing digit yang salah). Pelopor3
kemudian dijatuhkan dan indeks input ditemukan:Jika Anda lebih suka daftar digit sebagai penggunaan input
⁵*⁹Ḥ;ȷḊ+J$¤×⁹:2¤:ɗ\SDḊw
(juga 23), sedangkan jika Anda benar-benar ingin memberikannya penggunaan integer⁵*⁹Ḥ;ȷḊ+J$¤×⁹:2¤:ɗ\SDḊwD
(untuk 24).sumber
BASH (GNU / Linux),
756766 byteDisimpan 1 byte berkat Sophia Lechner, dan 7 byte berkat Sapi dukun.
Ini adalah skrip shell yang mengambil argumen tunggal, yaitu angka. Tes dengan
Script ini pertama kali mengeksekusi pipeline dari tiga perintah:
Hasil dari pipeline ini ditugaskan ke variabel shell
a
, yang kemudian digaungkan dengan apa pun kecuali nomor pertama yang dihapus:Sayangnya,
bc
memiliki kecenderungan untuk memutus garis output ketika mereka menjadi terlalu panjang. Ini dapat menyebabkan hasil yang salah jika nomor yang ditemukan bukan pada baris pertama. Anda dapat menghindarinya dengan mengatur variabel lingkunganBC_LINE_LENGTH
:Ini menonaktifkan fitur line breaking sepenuhnya.
Jelas, dua perintah terakhir dapat dihilangkan jika output lain ditoleransi.
Ini menghasilkan 48 byte :
Dengan output yang dihasilkan:
sumber
-l
dan<<<
meskipun.sed
(lihat bagian kedua dari jawaban saya). Namun demikian, mentransformasikan ke sebuah program memberi saya 7 byte, jadi terima kasih untuk itu! Saya juga telah menggantitr
/head
combo dengan magic variabel shell sekarang untuk menyimpan byte lain.JavaScript,
197187-10: Terima kasih, Neil !
Mengambil serangkaian bilangan bulat basis-36 sembilan digit, mengubahnya menjadi basis 10, dan menggabungkannya untuk membuat 200 digit pi pertama.
sumber
x=>'50...'.replace(/.{9}/g,a=>parseInt(a,36)).search(x)+1
untuk menyimpan 10 byte.Pertama kali melakukan golf kode. Gunakan delegasi dan ekspresi lambda untuk mengurangi panggilan fungsi. V2 mempersingkat nama kelas menjadi satu byte.
[C #],
361355 byteVersi yang diformat:
Ideone!
NB. Saya salah menghitung versi pertama. Itu 361 byte, bukan 363 byte.
[C #], tio versi 218 byte
Cobalah online!
sumber
using System;f=>"14159265358979323846264338327950288419716939937510582097494459230781640628620899862803482534211706798214808651328230664709384460955058223172535940812848111745028410270193852110555964462294895493038196".IndexOf(f)+1;
sebagai hasil edit.Haskell ,
208120 byteCobalah online!
Terima kasih banyak kepada Jonathan Allan atas sarannya!
Versi lama (208 byte)
Saya sebenarnya tidak tahu bagaimana kode di atas bekerja; Saya telah mengambilnya dari makalah ini dan semua yang saya terapkan adalah bagian pencarian.
g(1,0,1,1,3,3)
mengembalikan digit pi dan secara mengejutkan efisien (menghitung 10.000 digit pada tio.run dalam waktu kurang dari 4s).Input adalah daftar yang terdiri dari digit angka yang dapat ditemukan.
Cobalah online!
sumber
l=4*sum[((-1)**x/(2*x+1))|x<-[0..1e6]]
, tetapi itu membutuhkan 5s untuk dijalankan dan digit ke-7 sudah salah. Jadi mungkin tidak layak untuk menghitung 200 digit. Latihan itu menarik, jadi terima kasih!g1_ref
di bagian Generator Tidak Terbatas Lebih Cepat . Kodenya adalah python.Haskell, 230 byte
Menggunakan kemalasan untuk menemukan angka di mana saja dalam angka pi yang tak terbatas, tidak hanya dalam 200 angka pertama. Oh ya, dan itu mengembalikan Anda setiap (jumlah tak terhingga?) Dari nomor tersebut, bukan hanya yang pertama.
Contoh dari tantangan
Kredit
'p' adalah aliran pi digit tanpa batas, diambil dari https://rosettacode.org/wiki/Pi#Haskell
sumber
SmileBASIC,
179164 byteDigit pi di-hardcode dan dimasukkan ke dalam nilai karakter ascii. 14 ->
CHR$(14)
, 15 ->CHR$(15)
, 92 ->\
, 65 ->A
, 35 ->#
.String berisi karakter yang tidak dapat dicetak, jadi inilah byte yang ditulis dalam heksadesimal:
0E 0F 5C 41 23 59 4F 20 26 2E 1A 2B 26 20 4F 32 1C 54 13 47 45 27 5D 4B 69 52 00 61 31 2C 3B 17 00 4E 10 28 3E 56 14 59 62 3E 50 03 30 19 03 2A 75 00 43 62 15 30 00 56 33 20 52 1E 42 2F 00 5D 54 2E 00 5F 32 3A 16 1F 48 35 3B 28 51 1C 30 6F 4A 32 1C 29 00 1B 00 13 26 34 6E 37 3B 40 2E 16 5E 59 36 5D 00 26 13 06
Dalam desimal, Anda dapat melihat digit pi:
14 15 92 65 35 89 79 32 38 46 26 43 38 32 79 50 28 84 19 71 69 39 93 75 105 82 0 97 49 44 59 23 0 78 16 40 62 86 20 89 98 62 80 3 48 25 3 42 117 0 67 98 21 48 0 86 51 32 82 30 66 47 0 93 84 46 0 95 50 58 22 31 72 53 59 40 81 28 48 111 74 50 28 41 0 27 0 19 38 52 110 55 59 64 46 22 94 89 54 93 0 38 19 6
sumber
Ruby ,
3735 byteCobalah online!
Tidak ada yang istimewa, hanya memamerkan perpustakaan bawaan. Output diindeks 0. String Pi diformat sebagai
0.31415...e1
, jadi kita perlu menghapus 3 karakter pertama. Bagiane1
pada akhirnya tidak benar-benar membahayakan, tetapi dilucuti juga, karena kita perlu memberikan nilai akhir rentang (atau panjang irisan).sumber
Arang ,
2715 byteCobalah online! Tautan adalah untuk mengucapkan versi kode. Berfungsi hingga hampir 1000 digit. Penjelasan:
sumber
Japt ,
186177 bytesKarena Japt berbagi 15-digit pi kendala dan shoco Javascript , penyandian yang digunakan oleh Japt, tidak menyandikan angka, beberapa shenanigans diperlukan untuk kompresi.
Dijelaskan dengan singkat, awalnya adalah string di bawah ini dalam bentuk yang disandikan:
Yang merupakan string di mana setiap huruf berada
'm' + corresponding digit of pi
. Saya menguji seluruh alfabet dan surat itu memberikan kompresi terbaik dengan beberapa byte.Backticks memberitahu Japt untuk memecahkan kode string. Sisanya cukup mudah:
Menghasilkan indeks berbasis 0 dari fragmen yang cocok.
Dicukur dua byte lagi berkat Oliver .
Cobalah online!
sumber
£X
dengan®
dan}
denganÃ
AWK -M,
131 119117 byteMenggunakan
-M
bendera untuk perhitungan presisi acak. Menambahkanp=k=0
(5 byte) ke tautan TIO untuk memungkinkan input multi-lineCobalah online!
Penjelasan:
sumber
sprintf
untuk mendapatkan desimal. PenggunaannyaCONVFMT
jelas lebih bersih.-M
bendera"Jelly , 24 byte
Cobalah online!
Gunakan formula seperti Machin , khususnya 1/4 pi == tan -1 (1/2) + tan -1 (1/3).Gunakan rumus pi / 2 == 1 + 1/3 × (1 + 2/5 × (1 + 3/7 × (1 + 4/9 × (...)))))
sumber
ØP
dalam M?floor
. Keberatan jika saya menggunakannya untuk mengirim sebagai jawaban dalam M?Python 2
239238229214 byte-9 byte karena @primo
Gunakan algoritma Chudnovsky-Ramanujan untuk menemukan
1 juta digit pertama50.000 digit 00 (ubah10**10**5
menjadi10**10**6
lebih banyak, tetapi butuh waktu lama untuk menjalankannya) dan kemudian cari mereka untuk string yang diinginkan.sumber
n=10**10**5
butuh sekitar 10-an).10**10**6
membutuhkan sekitar 7 menit pada mesin saya .. Agar adil,10**10**5
memberikan angka 50.000 pertama, jadi saya kira itu tidak terlalu buruk :)gmpy2
, tetapibigfloat
menghemat selusin byte. Tugas darik
dapat digabungkan dengank=b=0
jika Anda pindahk+=1
ke awal iterasi.-(6*k-5)*(2*k-1)*(6*k-1)
dapat ditulis lebih ringkas sebagaik*(k*(108-72*k)-46)+5
. Jika Anda mendeklarasikan Python 2,//
divisi integer dapat diganti dengan/
, dan juga tanda kurung tidak diperlukanprint
. Spasi juga dapat dihapus diimport*
. Hanya memvalidasi hingga 50.000 digit, btw.n
disqrt(10005*n)
tampaknya menjadi masalah; itu memindahkan titik desimal ke tempat 50000. Jika Anda tertarik, inilah implementasi Chudnovsky saya sendiri: Cobalah online!Visual Basic - 114 Bytes
Oke, pengiriman pertama. Tenang aku!
Umpan balik, terima kasih!
Saya tidak terbatas pada 256 bagian pertama dari PI karena pertanyaannya mengatakan "Anda tidak harus", bukan "Anda seharusnya tidak" Harap saya melakukan ini dengan benar :)
sumber
Javascript 217 byte (200 hardcoded)
sumber
PHP, 27 byte
Bukan jawaban yang sangat serieus, ini membutuhkan perubahan dalam pengaturan php.ini sebagai pi () default ke 14 digit, bukan 200, tetapi untuk sekali solusi PHP cukup elegan:
sumber
precision
tag di alter hanya php.ini layar presisi, dan tidak benar-benar meningkatkan ketepatan konstanta didefinisikan. saksiJulia 0,6 , 53 byte
Atur presisi untuk BigFloats cukup tinggi, lalu konversikan
pi
ke string dan cari. Presisi9^6
menangani 159980 digit.Cobalah online!
sumber
J, 25 Bytes
Cobalah online!
Diindeks 0
Mengambil input sebagai string, +2 Bytes (
":
) jika itu tidak diizinkan.Penjelasan akhirnya.
sumber
Perl 5 dengan
-MMath::BigFloat+bpi
dan-n
, 20 byteCobalah online!
Saya tidak yakin penggunaan mana dari
$>
tribun, karena itu adalahEFFECTIVE_USER_ID
yang tidak portable, tapi di TIO ini adalah 1000 dan memenuhi persyaratan kami, untuk -1 byte vs200
.sumber
Sekam , 5 byte
Cobalah online!
sumber