Definisi
Ada deretan tak terhingga dari bilangan natural gabungan (bilangan bulat positif, dimulai dengan 1):
1234567891011121314151617181920212223...
Tantangan
- Tulis program dalam bahasa apa pun, yang menerima nomor posisi sebagai input, dan mengeluarkan angka dari posisi itu di baris yang ditentukan di atas.
- Nomor posisi adalah bilangan bulat positif ukuran acak. Itu posisi pertama adalah 1, menghasilkan digit keluaran '1'
- Input berupa desimal (mis. 13498573249827349823740000191), atau e-notasi (mis. 1.2e789) sesuai dengan bilangan bulat positif.
- Program harus berakhir dalam waktu yang wajar (10 detik pada PC / Mac modern), diberi indeks yang sangat besar sebagai input (mis. 1e123456 - yaitu 1 dengan 123456 nol). Jadi, loop iterasi sederhana tidak dapat diterima.
- Program harus diakhiri dengan kesalahan dalam 1 detik, jika diberi input yang tidak valid. Misalnya. 1.23e (tidak valid), atau 1.23e1 (sama dengan 12.3 - bukan bilangan bulat)
- Tidak apa-apa menggunakan perpustakaan BigNum publik untuk mem-parsing / menyimpan nomor dan melakukan operasi matematika sederhana pada mereka (+ - * / exp). Tidak ada penalti byte yang diterapkan.
- Kode terpendek menang.
TL; DR
- Input: bignum integer
- Output: digit pada posisi itu dalam baris tak terbatas
123456789101112131415...
Beberapa kasus uji penerimaan
dalam notasi "Input: Output". Mereka semua harus lulus.
- 1: 1
- 999: 9
- 10000000: 7
- 1e7: 7 (sama seperti baris di atas)
- 13498573249827349823740000191: 6
- 1.1e10001: 5
- 1e23456: 5
- 1.23456e123456: 4
- 1e1000000: 0
- 1.23e: kesalahan (sintaks tidak valid)
- 0: kesalahan (di luar batas)
- 1.23e1: kesalahan (bukan bilangan bulat)
Bonus!
Keluarkan angka posisi digit di dalam nomor tersebut, dan nomor keluaran itu sendiri. Sebagai contoh:
13498573249827349823740000191: 6 24 504062383738461516105596714
- Itu digit '6' di posisi 24 dari nomor '50406238373846151610559 6 714'
1e1000000: 0 61111 1000006111141666819445...933335777790000
- Digit '0' di posisi 61111 dari angka panjang 999995-digit saya tidak akan sertakan di sini.
Jika Anda memenuhi tugas bonus, kalikan ukuran kode Anda dengan 0,75
Kredit
Tugas ini diberikan di salah satu pertemuan devclub.eu pada tahun 2012, tanpa persyaratan jumlah besar. Oleh karena itu, sebagian besar jawaban yang diajukan adalah loop sepele.
Selamat bersenang-senang!
code-golf
number
sequence
number-theory
metalim
sumber
sumber
1.23456e123456
sewenang - wenang menghukum bahasa yang tidak dapat memproses nilai-nilai tersebut secara asli dan mengharuskan mereka untuk melakukan pemrosesan string yang bersinggungan dengan tantangan.Jawaban:
CJam , 78 byte
Program ini panjangnya 104 byte dan memenuhi syarat untuk bonus.
Baris baru ini murni kosmetik. Baris pertama mem-parsing input, yang kedua menghasilkan output.
Cobalah online!
Ide
Untuk bilangan bulat positif k , ada 9 × 10 k-1 bilangan bulat positif dengan tepat digit k (tidak termasuk angka nol di depan). Jadi, jika kita menggabungkan semuanya, kita mendapatkan bilangan bulat 9 × n × 10 k-1 .
Sekarang, menggabungkan semua bilangan bulat n atau kurang menghasilkan bilangan bulat
digit.
Untuk input q yang diberikan , kami mencoba menentukan n tertinggi sehingga ekspresi di atas lebih kecil dari q . Kita atur n: = ⌈ log 10 q⌉-1 , lalu n: = ⌈ log 10 q⌉-2 , dll. Hingga ekspresi yang diinginkan menjadi lebih kecil dari q , kurangi ekspresi yang dihasilkan dari q (menghasilkan r ) dan simpan yang terakhir nilai n dalam l .
r sekarang menetapkan indeks dalam gabungan semua bilangan bulat positif l + 1 digit, yang berarti bahwa output yang diinginkan adalah r% (l + 1) digit ke - r dari (/ + 1) bilangan bulat ke - l + 1 digit.
Kode (parsing input)
Kode (pembuatan keluaran)
sumber
CJam, 75 * 0.75 = 56.25
Ini cukup cepat, satu iterasi per digit dari angka yang berisi posisi yang diinginkan. Saya yakin ini bisa lebih banyak bermain golf, cukup kasar.
Beri posisi sebagai input, outputnya adalah:
Cobalah online .
sumber
1.23e1
. Itu kesalahan, bagaimanapun, untuk1.23456e123456
, karena input tidak dapat diwakili oleh Double. Juga, test case terakhir membutuhkan 3 menit.