Tugas:
Tugas Anda adalah, ketika diberi tiga input:
- pembilang
n
- penyebut
d
- bilangan bulat lain,
x
Buat program / fungsi yang menemukan x
digit nomor setelah tempat desimal.
Spesifikasi:
- Kisaran
n
dand
berada di antara1
dan2^31 - 1
, inklusif. - Kisaran
x
antara1
dan10,000,000
termasuk.- Anda dapat memilih untuk menggunakan pengindeksan berbasis 1 atau pengindeksan berbasis 0 untuk
x
. Silakan sebutkan jawaban Anda yang mana yang Anda gunakan.
- Anda dapat memilih untuk menggunakan pengindeksan berbasis 1 atau pengindeksan berbasis 0 untuk
n
mungkin lebih besar darid
.n
,d
danx
dijamin bilangan bulat positif (untuk versi indeks berbasis 1x
, jika Anda memilih untuk menggunakan pengindeksan berbasis 0 untukx
makax
bisa0
).- Anda dapat mengambil input dengan cara yang masuk akal (Yaitu dengan cara apa pun yang bukan celah standar).
Aturan:
- Anda harus mengembalikan
x
digit ke- tepat , bukan ketika dibulatkan - jadi15
digit ke-dari1/6
, misalnya, tidak7
, tetapi6
. - Program Anda harus bekerja untuk semua di
x
bawah 10 juta, kecuali bahasa Anda tidak mendukung desimal hingga 10 juta tempat.
Contoh I / O:
Contoh input menggunakan pengindeksan berbasis 0, yang berarti x
akan beralih dari 0
ke 9,999,999
. Selain itu, "input" ditulis sebagai string dengan spasi yang memisahkan angka-angka.
1 2 3: 0
5 6 0: 8
5 6 1: 3
1 6 15: 6 (not 7, as it's not rounded)
1 11 2: 0
1 10000 9999999: 0
11 7 1: 7
Jawaban:
Python 2 , 25 byte
Port jawaban Haskell saya, karena Python juga mendukung bignum secara default. Karena di sana,
x
1-diindeks.Cobalah online! (meminjam pembungkus Keerthana Prabhakaran.)
sumber
Mathematica 33 Bytes
Pengindeksan berbasis 1.
mis. digit 10 juta Pi tepat dari titik desimal:
membutuhkan sekitar 2 detik pada mesin lama saya.
Anda dapat mencobanya online di WolframAlpha (klik tanda sama dengan)
sumber
Haskell , 26 byte
Berfungsi untuk semua kasus uji. Yay bignum!
(n#d)x
mengambilInteger
s dan mengembalikan sebuahInteger
.x
diindeks 1.Cobalah online!
sumber
PHP> = 7.1, 40 Bytes
bcdiv
Versi Online
sumber
<br /> <b>Notice</b>: Uninitialized string offset: -1 in <b>[...][...]</b> on line <b>6</b><br />
Jelly , 7 byte
Cobalah online!
Pengajuan fungsi (tetapi juga berfungsi sebagai program lengkap). Fungsi Jelly hanya dapat mengambil dua argumen secara langsung; jadi saya mengambil digit untuk kembali sebagai argumen kiri, pembilang sebagai argumen benar, dan penyebut dari input standar (sebagai pengganti menggunakan argumen ketiga).
Orang yang terbiasa dengan Jelly mungkin sadar bahwa program lengkap dapat mengambil lebih dari dua argumen, tetapi hal itu menyebabkan Anda kehilangan akses ke cara tersest untuk menulis integer 10 konstan, yang cukup relevan di sini. Dengan demikian, input campuran semacam ini terasa agak seperti eksploit daripada golf yang sebenarnya berguna; Saya pribadi tidak setuju dengan itu, tetapi aturan tentang mengizinkan ini saat ini di +40 / -12, jadi selama itu ada dalam aturan, saya mungkin juga mengeksploitasinya (dan cukup banyak harus kompetitif).
Argumen kiri dari 1 merujuk ke digit segera setelah titik desimal ("digit .1s"), argumen 2 ke digit .01s, dan seterusnya.
Penjelasan
Jelly memiliki aritmatika presisi sembarang pada bilangan bulat, jadi dengan pra-mengalikannya dengan kekuatan 10, kami secara efektif memindahkan digit yang kami inginkan ke posisi unit, di mana jauh lebih mudah untuk mengekstrak.
sumber
sed
-r
, 93131136byteCobalah online!
( Lihat output dalam desimal )
Mengambil input di unary dan output di unary, dan program ini diindeks 1. Untungnya, tantangan ini telah mempersiapkan saya untuk yang ini.
Konsepnya sama, keduanya menerapkan pembagian panjang. Di sini, saya melakukan pembagian
x
waktu yang lama , di manax
digit setelah tempat desimal yang harus saya temukan. Setelah setiap iterasi, saya membuang tempat desimal sebelumnya karena tidak lagi diperlukan.Saat melakukan pembagian, program ini dalam format
dividend;divisor;x,result
.s/$/,/
menambahkan koma ini, koma diperlukan untuk memisahkan hasil dari yang lainnyaKemudian ikuti loop program utama
:d
label ds/,.+/,/
hapus semuanya setelah koma:
label kosongs/(1+)(1*;\1;1*,)1{10}?/\21/
melakukan pembagian, menambahkan 1 ke hasil setiap iterasi, sementara secara bersamaan menghapus blok 10 1 dalam hasilt
bercabang ke label kosong, dengan kata lain, loop sampai dividen telah habiss/1*/&&&&&&&&&&/
kalikan dividen dengan 10 untuk mempersiapkan iterasi berikutnyata
cabang untuk memberi label a:a
label a, baris ini dan baris di atas diperlukan untuk membuattd
pekerjaans/1,/,/
kurangi 1 dari xtd
cabang bersyarat ke d, ini dipicu jika telah ada substitusi yang berhasil sejak cabang bersyarat terakhir, karenas/1*/&&&&&&&&&&/
selalu sukses,td
akan selalu terpicu, tetapi dengan memperkenalkan cabang a, kami memperbaikinya sehingga hanya bergantung pada substitusi sebelumnyas/.+,//
akhirnya, hapus semuanya kecuali hasilnyasumber
Ruby ,
3433 byteCobalah online!
sumber
REXX, 76 byte
(Tidak terlalu singkat tetapi berpikir itu akan membuat perubahan untuk melakukan satu di REXX) Rexx adalah 1 berbasis oleh defintion.
Penjelasan:
Penggabungan 3 dan 4 sebenarnya membuatnya lebih lama karena perubahan sintaksis:
Untuk non-REXXers: String dan angka benar-benar dapat dipertukarkan di REXX. Mereka ditentukan oleh bagaimana Anda bertindak terhadap mereka. Jadi Anda dapat menguraikan angka menggunakan fungsi sengatan tanpa konversi. Sebagai contoh
mengembalikan 55 dan bukan 2728!
sumber
rexx main.rexx 1 2 3
. Anda harus menyebutkan dalam jawaban Anda bahwa input 1-diindeks.Batch, 70 byte
sumber
Perakitan bahasa cpu Intel x86, 50 byte
traslation nasm
Untuk parameter 'c' rentang mulai dari 0; itu akan menjadi 0..0xfffffffd. Jika parameter b = 0 atau c di luar kisaran 0..0xfffffffd, ia akan mengembalikan -1
sumber
Lua, 42 byte
sumber
C,
4943 byteArgumen 'i' adalah pengindeksan 0. Kode uji dan hasil
sumber
Java 7,
146139137133128122 Bytes-3 byte terima kasih kepada Erik the Outgolfer, saya benar-benar lupa impor tidak harus di jalur mereka sendiri
-4 byte terima kasih kepada Qwerp-Derp untuk memindahkan n% d ke konstruktor
-6 byte terima kasih Kevin Cruijssen karena telah menghapus toString ()
Saya harap ini adalah bagaimana penghitungan byte dilakukan untuk fungsi java dengan impor
Menggunakan kelas BigDecimal Java untuk mendapatkan representasi yang tepat dari ekspansi desimal. Perhatikan ini bukan kode tercepat yang pernah berjalan tetapi pada akhirnya menghasilkan output yang benar untuk semua kasus uji. Kode tidak dikunci:
Cobalah online!
sumber
BigDecimal(n)
denganBigDecimal(n%d)
, dan menyingkirkann=n%d
?.toString()
dan menggunakan+""
sebagai gantinya (dengan dua tanda kurung tambahan).Clojure, 39 byte
fungsi anonim dengan argumen di
n,d,x
manax
menggunakan pengindeksan satu berbasis.sumber
F # (.NET Core) , 30 byte
Cobalah online!
(gunakan pengindeksan berbasis 1)
sumber
Groovy, 30 byte
x menggunakan 1 pengindeksan berbasis.
Penjelasan:
sumber
Python 2 ,
50,44,40,36 byteCobalah online!
sumber
1,7,10000000
Ruby, 39 byte
sumber
JavaScript (ES6), 34 byte
x berbasiskan 0
sumber
f(1,7,10000000)
, misalnya.Python 2 , 32 byte
Menggunakan pengindeksan 0
Cobalah online!
Edit:
Digulung kembali ke solusi asli seperti yang terlihat dalam jawaban Ørjan Johansen bahwa itu berfungsi, tapi saya tidak akan bermain golf lebih jauh
sumber
Groovy, 55 byte
Dijelaskan menggunakan
1,11,2
:sumber
Aksioma,
71 6176 byten adalah pengindeksan 0 [0..M]. Kode uji dan hasil
sumber
JavaScript (Node.js) , 43 byte, port
Cobalah online!
JavaScript (Node.js) , 51 byte
Cobalah online!
gunakan Array daripada rekursif untuk menghindari stackoverflow
sumber