Können Sie Tony Stark helfen, ein Ironman zu werden?

8

Tony Stark ist, wie wir wissen, Ironman (dieser super tolle Typ in Metallanzug und jede Menge Waffen). Ohne den Metallanzug kann er diesen Titel jedoch nicht beanspruchen. Tony Stark, der ein großartiges Ego hat, möchte Norseman beenden , der als der härteste Triathlon der Welt gilt (für Strecken, die denen eines Ironman-Rennens entsprechen), um zu beweisen, dass er eine gemeine Maschine ist, selbst wenn er das Eisen verlässt Zuhause.

Tony hat einen vordefinierten Zeitplan für jeden Teil des Wettbewerbs.
Das bedeutet, dass für jeden Ort im Rennen (dh Entfernung vom Start) eine erwartete Zeit angegeben wird, zu der er basierend auf dem Zeitplan dort ankommen sollte.

Er hat auch eine Uhr, die die verbrachte Zeit und die zurückgelegte Gesamtstrecke anzeigt.

Ihre Aufgabe ist: Sagen Sie Tony angesichts dieser beiden Werte als Eingabe, wie weit er vor oder hinter dem Zeitplan liegt. Die Eingabe ist eine Zeit im Format hh:mm:ss(oder (optional), h:mm:sswenn es weniger als 10 Stunden waren) und eine Dezimalzahl, die angibt, wie weit er gekommen ist (in km).

Die Entfernungen für jede der drei Disziplinen sind:

Swim: 3.8 km
Bike: 180 km
Run: 42 km
Total distance: 225.8 km   // Input will never exceed 225.8

Die geschätzten Zeiten für jeden Teil (dh den Zeitplan):

Swim: 1:20:00
Transition 1: 0:12:00
Bike: 7:10:00
Transition 2: 0:05:00
Run: 4:50:00
Total: 13:37:00

Beide Entfernungen und die geschätzten Zeiten werden vor dem Rennen angegeben und können daher fest codiert werden. Die Übergangszone ist nur ein Ort, an dem er Kleidung und Ausrüstung wechselt, sodass er sich während des Übergangs nicht bewegt.

Die Eingabe kann durch Kommas getrennt sein, eine Zeichenfolge, zwei separate Argumente oder was auch immer in Ihrer Sprache am bequemsten ist. Er möchte die Ausgabe im Format +/-mm:ss, nicht in Stunden (angenommen, er ist nie länger als eine Stunde zu langsam oder zu schnell. Wenn er sich im Übergang befindet, können Sie davon ausgehen, dass er gerade erst dort angekommen ist.

Beispiele und Erklärungen (Entschuldigung für die Länge):

Input: 04:32:20 93.8
Output: +34:40 / 34:40

Bei 93,8 km hat er das Schwimmen beendet, den Übergang durchlaufen und die Hälfte der Radstrecke hinter sich gebracht. Nach dem Zeitplan hätte ihn das nehmen müssen : 1:20:00 + 0:12:00 + (0.5 * (07:10:00)) = 5:07:00. Wenn er verwendet hat 4:32:20, ist er dem 34:40Zeitplan voraus.


Input: 1:20:00 3.8
Output: +00:00 / +0:00 / 00:00 / 0:00 / -00:00 / -0:00

Angenommen, die Entfernung ist 3.8, können Sie annehmen, dass er gerade in die erste Übergangszone gelangt ist. Die geschätzte Zeit hier war 1:20:00, also ist er für die obigen Eingaben pünktlich.


Wenn die Zeit gekommen ist 1:25:00, ist er 5 Minuten hinter dem Zeitplan, also:

Input: 1:25:00 3.8
Output: -05:00 / -5:00

Ein weiteres Beispiel, das ausführlich erläutert wird:

Input: 10:33:46 198.14

So wurde eine Strecke von 198,14 km zurückgelegt. Das heißt, er hat das Schwimmen (3,8), die Radstrecke (180 km) und 14,34 km des Laufens beendet und beide Übergänge durchlaufen. Nach dem Zeitplan hätte er den Lauf starten sollen nach : 1:20:00 + 0:12:00 + 07:10:00 + 0:05:00 = 8:47:00. 42 km Laufen sollten 4:50:00 dauern, daher sollten 14,34 km dauern : 4:50:00 * (14.34 / 42) = 1:39:01. Nach dem Plan sollten also 198,14 km benötigt werden : 8:47:00 + 1:39:01 = 10:26:01. Er hat verwendet 10:33:46, was 07:45mehr als geplant ist.

Output: -07:45 / -7:45   

Das Pluszeichen ist optional, aber es muss ein Minuszeichen geben, wenn er hinter dem Zeitplan liegt.

Die Ausgabe sollte genau das gleiche Format wie die obigen Beispiele haben, aber nachgestellte Leerzeichen, Zeilenumbrüche usw. sind in Ordnung.

Dies ist Code Golf, also gewinnt der kürzeste Code in Bytes.

Stewie Griffin
quelle

Antworten:

2

CJam, 91

r~[0_80 3.8_92 43dI183.8 527 290d42]4/{1$a<},W=(@\-\~/@*+60*r':/:i60b-i_gs);\60b2Te[':*)Amd

Probieren Sie es online aus. Hinweis: Es wird zuerst die Entfernung benötigt.

Aditsu beenden, weil SE böse ist
quelle