¿Puedes ayudar a Tony Stark a convertirse en un Ironman?

8

Tony Stark es, como sabemos, Ironman (ese tipo súper increíble con traje de metal y muchas armas). Sin embargo, sin el traje de metal, no puede reclamar ese título. Tony Stark, que tiene un gran ego, quiere terminar con Norseman , que se considera el triatlón más duro del mundo (para distancias equivalentes a las de una raza Ironman), para demostrar que es una máquina mala, incluso cuando deja el hierro. en casa.

Tony tiene un horario / plan de tiempo predefinido para cada parte de la competencia.
Eso significa que para cada lugar en la carrera (es decir, la distancia desde el inicio), hay un tiempo esperado para que llegue allí según el horario.

También tiene un reloj que le dice el tiempo que pasó y la distancia total recorrida.

Su tarea es: Dados esos dos valores como entrada, dígale a Tony cuánto adelanta o demora. La entrada será una hora en el formato hh:mm:ss(u (opcional) h:mm:sssi han pasado menos de 10 horas) y un número decimal que indica qué tan lejos ha llegado (en km).

Las distancias para cada una de las tres disciplinas son:

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

Los tiempos estimados para cada parte (es decir, el horario):

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

Ambas distancias y los tiempos estimados se dan antes de la carrera y, por lo tanto, se pueden codificar. La zona de transición es solo un lugar donde se cambia de ropa y equipo, por lo que no se mueve durante la transición.

La entrada puede estar separada por comas, una cadena, dos argumentos separados o lo que sea más conveniente en su idioma. Quiere la salida en el formato +/-mm:ss, no horas (suponga que nunca es más de una hora demasiado lento o demasiado rápido. Si está en transición, puede suponer que acaba de llegar allí.

Ejemplos y explicaciones (disculpas por la duración de la misma):

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

Con 93.8 km, ha terminado de nadar, ha pasado por la transición y ha terminado la mitad de la pierna de la bicicleta. De acuerdo con el horario, esto debería haberle tomado: 1:20:00 + 0:12:00 + (0.5 * (07:10:00)) = 5:07:00. Si lo ha usado 4:32:20, entonces está 34:40adelantado a lo previsto.


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

Suponiendo que la distancia es 3.8, puede suponer que acaba de llegar a la primera zona de transición. El tiempo estimado aquí fue 1:20:00, así que para la entrada anterior, llegó a tiempo.


Si es el momento 1:25:00, tiene 5 minutos de retraso, por lo tanto:

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

Otro ejemplo, explicado en detalle:

Input: 10:33:46 198.14

Entonces, se ha cubierto una distancia de 198.14 km. Eso significa que ha terminado de nadar (3.8), la pierna de la bicicleta (180 km) y 14.34 km de la carrera, y ha pasado por ambas transiciones. Según el cronograma, que debería haber comenzado la carrera después de que: 1:20:00 + 0:12:00 + 07:10:00 + 0:05:00 = 8:47:00. 42 km de ejecución debe tomar 04:50:00, por tanto, 14,34 kilometros debe tomar: 4:50:00 * (14.34 / 42) = 1:39:01. Así, de acuerdo con el plan, 198,14 kilometros debe tomar: 8:47:00 + 1:39:01 = 10:26:01. Él ha usado 10:33:46, que es 07:45más de lo planeado.

Output: -07:45 / -7:45   

El signo más es opcional, pero debe haber un signo menos si está retrasado.

El resultado debe tener exactamente el mismo formato que los ejemplos anteriores, pero los espacios finales, las nuevas líneas, etc. están bien.

Este es el código de golf, por lo que gana el código más corto en bytes.

Stewie Griffin
fuente

Respuestas:

2

CJam, 91

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

Pruébalo en línea. Nota: toma la distancia primero.

aditsu renunció porque SE es MALO
fuente