Налаштування
Припустимо, вам задано n запобіжників, 1 ≤ n ≤ 5, кожен з яких довжиною метра, і де кожен запобіжник має відповідну швидкість горіння N метрів за D години.
Запобіжник може бути запалений на одному або з обох кінців, згодом гаситись на одному або обох кінцях, перекривати, повторно гасити і т. Д. Стільки разів, скільки потрібно до повного споживання запобіжника. Ви в змозі запалити і загасити запобіжники миттєво, і ви зможете спостерігати точний момент, коли запобіжник повністю споживається (згоряє).
Запобіжник не може бути розрізаний, а також не може бути запалений ніде, крім його кінців.
Таке налаштування дозволяє створити нескінченно точну систему синхронізації шляхом вимірювання часу між будь-якими двома подіями освітлення / споживання запобіжника. Наприклад, враховуючи два запобіжники зі швидкістю опіку 1 метр на годину, ви можете виміряти рівно 45 хвилин (3/4 години) на
- одночасно: запалюйте перший запобіжник на обох кінцях, запалюючи другий запобіжник на одному кінці та маркуючи початок вашого часового інтервалу
- запалюючи другий кінець другого запобіжника в той момент, коли перший запобіжник витрачається (через 30 хвилин)
- маркування кінця вашого часового інтервалу в той момент, коли буде витрачений другий запобіжник (через 15 хвилин)
Змагання
Враховуючи дробову кількість годин t і набір n дробів, що представляють точну швидкість горіння n запобіжників, напишіть програму або функцію, яка виводить / повертає триєдне значення, якщо t годин можна точно виміряти шляхом систематичного спалювання запобіжників, або a хибне значення в іншому випадку.
Вхід до програми може бути будь-яким із наступних:
- Аргументи командного рядка форми
TN/TD N1/D1 N2/D2 N3/D3 ...
- рядок форми,
TN/TD N1/D1 N2/D2 N3/D3 ...
прочитаної зstdin
або еквівалентної - рядок форми
TN/TD N1/D1 N2/D2 N3/D3 ...
передається як аргумент функції - масив рядків,
["TN/TD", "N1/D1", "N2/D2", "N3/D3", ...]
переданий як аргумент функції
У всіх випадках t = TN
/ TD
, де TN
, TD
∈ [1,10000].
Так само у всіх випадках: швидкість спалювання запобіжника i = N i / D i = N<i>
/ D<i>
, де N<i>
, D<i>
∈ [1,10] ∀ i .
Ви можете припустити, що завжди буде від 1 до 5 запобіжників (включно), і що всі входи є дійсними та в межах дії. Ви також можете припустити, що всі вхідні дроби наведені найменшими.
Ви не можете використовувати номери з плаваючою комою з дробовими компонентами для цього завдання. Тобто, якщо ви використовуєте номери з плаваючою комою в будь-якому місці вашої програми, вони можуть приймати лише цілісні значення з нульовою дробовою складовою.
Оцінка балів
Це виклик з гольф-кодом , отже, за найкоротше відповідне подання в байтах буде присуджено виграш.
Приклад Входи / Виходи
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)
Щасливого зрощення! :)