Você pode ajudar Tony Stark a se tornar um Ironman?

8

Tony Stark é, como sabemos Ironman (aquele cara super incrível em traje de metal e muitas armas). No entanto, sem o traje de metal, ele não pode reivindicar esse título. Tony Stark, com um grande ego, quer terminar o Norseman , que é considerado o triatlo mais difícil do mundo (por distâncias equivalentes às de uma corrida Ironman), para provar que ele é uma máquina má, mesmo quando deixa o ferro em casa.

Tony tem um plano de horário / horário predefinido para cada parte da competição.
Isso significa que para cada local da corrida (ou seja, a distância do início), há um tempo esperado para que ele chegue lá com base no cronograma.

Ele também tem um relógio que informa o tempo gasto e a distância total percorrida.

Sua tarefa é: Dados esses dois valores como entrada, diga a Tony quanto ele está adiantado ou atrasado. A entrada será um horário no formato hh:mm:ss(ou (opcional) h:mm:ssse tiver sido menos de 10 horas) e um número decimal informando até onde ele chegou (em km).

As distâncias para cada uma das três disciplinas são:

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

Os tempos estimados para cada parte (ou seja, o cronograma):

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 as distâncias e os tempos estimados são dados antes da corrida e, portanto, podem ser codificados. A zona de transição é apenas um lugar onde ele troca de roupa e equipamento, para que ele não se mova durante a transição.

A entrada pode ser separada por vírgula, uma sequência, dois argumentos separados ou o que for mais conveniente no seu idioma. Ele quer a saída no formato +/-mm:ss, não horas (suponha que ele nunca seja mais do que uma hora muito lento ou muito rápido. Se ele estiver em transição, você pode assumir que ele acabou de chegar lá.

Exemplos e explicações (desculpas pelo tamanho):

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

Com 93,8 km, ele terminou a natação, passou por uma transição e terminou metade da perna da bicicleta. De acordo com o cronograma, isso deve ter levado: 1:20:00 + 0:12:00 + (0.5 * (07:10:00)) = 5:07:00. Se ele usou 4:32:20, está 34:40adiantado.


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

Supondo que a distância seja 3.8, você pode assumir que ele acabou de entrar na primeira zona de transição. O tempo estimado aqui foi 1:20:00, portanto, para a entrada acima, ele está no horário.


Se for a hora 1:25:00, ele estará 5 minutos atrasado, assim:

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

Outro exemplo, explicado em detalhes:

Input: 10:33:46 198.14

Assim, foi percorrida uma distância de 198,14 km. Isso significa que ele terminou a natação (3.8), a perna da bicicleta (180 km) e 14,34 km da corrida, e ele passou por ambas as transições. De acordo com o cronograma, ele deveria ter começado a correr atrás: 1:20:00 + 0:12:00 + 07:10:00 + 0:05:00 = 8:47:00. 42 km de corrida deve levar 4:50:00, assim, 14,34 km deve tomar: 4:50:00 * (14.34 / 42) = 1:39:01. Assim, de acordo com o plano, 198,14 km deve tomar: 8:47:00 + 1:39:01 = 10:26:01. Ele usou 10:33:46, o que é 07:45mais do que o planejado.

Output: -07:45 / -7:45   

O sinal de mais é opcional, mas deve haver um sinal de menos se ele estiver atrasado.

A saída deve ter exatamente o mesmo formato dos exemplos acima, mas espaços à direita, novas linhas etc. estão OK.

Este é o código golf, portanto o código mais curto em bytes vence.

Stewie Griffin
fonte

Respostas:

2

CJam, 91

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

Experimente online. Nota: leva a distância primeiro.

aditsu sair porque SE é MAU
fonte