Die Einrichtung
Angenommen , sind Sie gegebenen n Sicherungen, mit 1 ≤ n ≤ 5, von denen jeder einen Meter lang, und wo jede Sicherung hat einen zugehörigen Verbrennungsrate von N Meter pro D Stunden.
Eine Sicherung kann an einem oder an beiden Enden gezündet, anschließend an einem oder an beiden Enden gelöscht, erneut gezündet, usw. werden, und zwar so oft, bis die Sicherung vollständig verbraucht ist. Sie können Sicherungen augenblicklich anzünden und löschen und genau beobachten, wann eine Sicherung vollständig verbraucht (durchgebrannt) ist.
Eine Sicherung kann nur an ihren Enden durchtrennt oder entzündet werden.
Ein solcher Aufbau ermöglicht ein unendlich genaues Zeitgebungssystem, indem die Zeit zwischen zwei Zünd- / Verbrauchsereignissen gemessen wird. Zum Beispiel können Sie bei zwei Sicherungen mit einer Brenngeschwindigkeit von 1 Meter pro Stunde genau 45 Minuten (3/4 Stunden) messen
- gleichzeitig: Zünden Sie die erste Sicherung an beiden Enden an, zünden Sie die zweite Sicherung an einem Ende an und markieren Sie den Beginn Ihres Zeitintervalls
- Anzünden des zweiten Endes der zweiten Sicherung in dem Moment, in dem die erste Sicherung verbraucht ist (30 Minuten später)
- Markieren Sie das Ende Ihres Zeitintervalls in dem Moment, in dem die zweite Sicherung verbraucht ist (15 Minuten später).
Die Herausforderung
Ausgehend von einer Bruchzahl von Stunden t und einer Menge von n Brüchen, die die exakten Brennraten von n Sicherungen darstellen, schreiben Sie ein Programm oder eine Funktion, die einen wahren Wert ausgibt / zurückgibt, wenn t Stunden durch systematisches Brennen der Sicherungen genau gemessen werden können, oder a sonst falscher Wert.
Die Eingabe in das Programm kann eine der folgenden sein:
- Befehlszeilenargumente des Formulars
TN/TD N1/D1 N2/D2 N3/D3 ...
- eine Zeichenfolge der Form
TN/TD N1/D1 N2/D2 N3/D3 ...
, aus der gelesen wurde,stdin
oder eine entsprechende Zeichenfolge - Eine Zeichenfolge der Form,
TN/TD N1/D1 N2/D2 N3/D3 ...
die als Funktionsargument übergeben wird - Ein Array von Zeichenfolgen,
["TN/TD", "N1/D1", "N2/D2", "N3/D3", ...]
die als Funktionsargument übergeben werden
In allen Fällen t = TN
/ TD
, wo TN
, TD
∈ [1,10000].
Ebenso ist in allen Fällen: Rate für Sicherung verbrennen i = N i / D i = N<i>
/ D<i>
, wobei N<i>
, D<i>
∈ [1,10] ∀ i .
Sie können davon ausgehen, dass immer zwischen 1 und 5 Sicherungen (einschließlich) vorhanden sind und dass alle Eingaben gültig und innerhalb des Bereichs liegen. Sie können auch davon ausgehen, dass alle Eingabefraktionen in niedrigsten Ausdrücken angegeben sind.
Sie dürfen für diese Aufgabe keine Gleitkommazahlen mit Bruchkomponenten verwenden. Wenn Sie also an einer beliebigen Stelle in Ihrer Anwendung Gleitkommazahlen verwenden, können diese nur ganzzahlige Werte mit einer Bruchkomponente von Null annehmen.
Wertung
Dies ist eine Code-Golf- Herausforderung, daher wird der Gewinn für die kürzeste konforme Einreichung in Bytes vergeben.
Beispiel Ein- / Ausgänge
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)
Viel Spaß beim Verschmelzen! :)