Pengaturan
Misalkan Anda diberi n sekering, dengan 1 ≤ n ≤ 5, yang masing-masing panjangnya satu meter, dan di mana masing-masing sekering memiliki laju pembakaran terkait N meter per D jam.
Sekering dapat dinyalakan di satu atau kedua ujungnya, kemudian padam di salah satu atau kedua ujungnya, relit, padam kembali, dll, sebanyak yang diperlukan sampai sekering dikonsumsi sepenuhnya. Anda dapat menyalakan dan memadamkan sekering secara instan, dan Anda dapat mengamati saat yang tepat sekering dikonsumsi sepenuhnya (terbakar).
Sekring tidak dapat dipotong atau dinyalakan di mana pun kecuali di ujungnya.
Pengaturan seperti itu memungkinkan sistem pengaturan waktu yang akurat tak terhingga, dengan mengukur waktu antara dua peristiwa pencahayaan / konsumsi sekering. Misalnya, mengingat dua sekering dengan laju pembakaran 1 meter per jam, Anda dapat mengukur tepat 45 menit (3/4 jam) dengan
- secara bersamaan: menyalakan sekering pertama di kedua ujungnya, menyalakan sekering kedua di satu ujung, dan menandai dimulainya interval waktu Anda
- menyalakan ujung kedua sekering kedua saat sekering pertama dikonsumsi (30 menit kemudian)
- menandai akhir interval waktu Anda pada saat sekering kedua dikonsumsi (15 menit kemudian)
Tantangan
Dengan jumlah fraksional jam t , dan satu set n fraksi yang mewakili laju pembakaran tepat dari n sekering, tulislah sebuah program atau fungsi yang menghasilkan / mengembalikan nilai yang sebenarnya jika t jam dapat diukur secara tepat melalui pembakaran sistematis sekering, atau nilai falsy sebaliknya.
Input ke program dapat berupa:
- argumen baris perintah dari formulir
TN/TD N1/D1 N2/D2 N3/D3 ...
- string bentuk
TN/TD N1/D1 N2/D2 N3/D3 ...
dibaca daristdin
atau setara - string bentuk
TN/TD N1/D1 N2/D2 N3/D3 ...
dilewatkan sebagai argumen fungsi - array string yang
["TN/TD", "N1/D1", "N2/D2", "N3/D3", ...]
dilewatkan sebagai argumen fungsi
Dalam semua kasus t = TN
/ TD
, di mana TN
, TD
∈ [1.10000].
Demikian juga, dalam semua kasus: laju pembakaran untuk sekering i = N i / D i = N<i>
/ D<i>
, di mana N<i>
, D<i>
∈ [1,10] ∀ i .
Anda dapat mengasumsikan akan selalu ada antara 1 dan 5 sekering (inklusif), dan bahwa semua input valid dan dalam kisaran. Anda juga dapat mengasumsikan bahwa semua fraksi input diberikan dalam istilah terendah.
Anda tidak boleh menggunakan angka floating point dengan komponen fraksional untuk tantangan ini. Artinya, jika Anda menggunakan angka floating point di mana saja dalam aplikasi Anda, mereka hanya dapat mengambil nilai integral dengan komponen nol fraksional.
Mencetak gol
Ini adalah tantangan kode-golf , oleh karena itu pengajuan kepatuhan terpendek dalam byte akan diberikan kemenangan.
Contoh Input / Output
input: 29/6 3/2 2/3 3/5 3/7 7/5
output: true
One solution:
- light both ends of fuse 1, mark start of interval
- on fuse 1 consumption: light both ends of fuse 2, light one end of fuse 5
- on fuse 5 consumption: extinguish one end of fuse 2, light both ends of fuse 3,
light both ends of fuse 4
- on fuse 2 consumption: extinguish one end of fuse 3, extinguish both ends of
fuse 4
- on fuse 3 consumption: relight one end of fuse 4
- on consumption of fuse 4: mark end of interval (29/6 hours)
input: 2/1 3/1 5/1 7/1
output: false
input: 5/1 6/1 1/6 9/1 1/9
output: true
One solution:
- light fuse 1 at one end, light fuse 2 at both ends, light fuse 4 at both ends
- on fuse 1 consumption: extinguish one end of fuse 2, mark start of interval
- on fuse 4 consumption: relight one end of fuse 2
- on fuse 2 consumption: mark end of interval (5 hours)
Selamat bergabung! :)