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!
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.