Kurulum
Her biri bir metre uzunluğunda ve her sigortanın D saat başına N metre ile ilişkili yanma oranına sahip olduğu 1 ≤ n ≤ 5 ile n sigorta verildiğini varsayalım .
Bir sigorta bir veya her iki uçta yakılabilir, daha sonra bir veya her iki uçta söndürülebilir, yeniden doldurulabilir, yeniden söndürülebilir vb., Sigorta tamamen tüketilene kadar gerektiği kadar. Sigortaları anında yakabilir ve söndürebilirsiniz ve bir sigortanın tamamen tükendiğini (yandığını) tam olarak görebilirsiniz.
Bir sigorta olamaz kesilmiş olması, ne de onun uçları hariç herhangi bir yere yakılabilir.
Böyle bir kurulum, herhangi iki sigorta aydınlatma / tüketim olayı arasındaki süreyi ölçerek son derece hassas bir zamanlama sistemine izin verir. Örneğin, saatte 1 metre yanma oranına sahip iki sigorta verildiğinde, tam olarak 45 dakika (3/4 saat) ölçebilirsiniz.
- eşzamanlı olarak: ilk sigortayı her iki uçtan yakmak, ikinci sigortayı bir uçtan yakmak ve zaman aralığınızın başlangıcını işaretlemek
- ilk sigortanın tüketildiği anda ikinci sigortanın ikinci ucunun aydınlatılması (30 dakika sonra)
- ikinci sigortanın tükendiği anda zaman aralığınızın sonunu işaretlemek (15 dakika sonra)
Meydan okuma
Kesirli sayıda saat t ve n sigortanın tam yanma oranlarını temsil eden bir n kesir kümesi verildiğinde, eğer t saat, sigortaların sistematik yanmasıyla tam olarak ölçülebiliyorsa, doğru bir değer veren / döndüren bir program veya işlev yazın veya yanlış değeri.
Programa giriş aşağıdakilerden herhangi biri olabilir:
- formun komut satırı bağımsız değişkenleri
TN/TD N1/D1 N2/D2 N3/D3 ...
TN/TD N1/D1 N2/D2 N3/D3 ...
okunanstdin
veya eşdeğer bir form dizesiTN/TD N1/D1 N2/D2 N3/D3 ...
işlev bağımsız değişkeni olarak iletilen formun bir dizesi["TN/TD", "N1/D1", "N2/D2", "N3/D3", ...]
işlev bağımsız değişkeni olarak iletilen dizeler dizisi
Her durumda t = TN
/ TD
, burada TN
, TD
∈ [1.10000].
Benzer şekilde, her durumda: sigorta i = N i / D i = N<i>
/ için yanma oranı D<i>
, burada N<i>
, D<i>
∈ [1,10] ∀ i .
Her zaman 1 ila 5 sigorta (dahil) olacağını ve tüm girişlerin geçerli ve aralıkta olduğunu varsayabilirsiniz. Ayrıca, tüm girdi kesirlerinin en düşük terimlerle verildiğini varsayabilirsiniz.
Bu meydan okuma için kayan nokta sayılarını kesirli bileşenlerle kullanamazsınız. Yani, uygulamanızın herhangi bir yerinde kayan nokta sayıları kullanırsanız, yalnızca sıfır kesirli bileşenle integral değerleri alabilirler.
puanlama
Bu bir kod-golf meydan okumasıdır, bu nedenle baytlara en kısa uyumlu gönderim kazanılır.
Örnek Girişler / Çıkışlar
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)
Mutlu kaynaştırma! :)