fundo
No final dos anos 90 / primeiros anos 00, quando o Flash Web Design era tão legal que ninguém podia viver sem ter um site completo em Flash ou pelo menos um widget animado, fui contratado para desenvolver um "visualizador de corridas de cavalos" no Flash / Actionscript, na forma de uma animação estilo videogame dos anos 80, para que os visitantes do site pudessem não apenas ler os resultados da corrida, mas pudessem vê-los em uma animação em movimento! UAU! Impressionante!
Eles me forneceram um arquivo CSV com todos os detalhes das corridas: ordem de início e chegada, nomes de cavalos, nomes de pilotos, prêmios, etc. Meu aplicativo Flash leu esse arquivo para cada corrida e exibiu a animação acima.
Atualmente, o suporte ao Flash é significativamente recusado, portanto, devemos voltar à arte ascii !
Tarefa
Sua tarefa é criar um programa ou função completa que leia os dados da corrida no formato CSV a partir da entrada padrão e produza uma representação artística da corrida, como mostra o exemplo abaixo.
ENTRADA
Dados CSV com 2 campos: 1) ordem inicial; 2) hora de chegada ao final no formato 1.13.4
(1 minuto, 13 segundos, 4 décimos de segundo). Se o tempo reportar R
significa que o cavalo foi retirado (não terminou a corrida) devido a incidente, queda ou outro motivo. Nota: o horário de chegada pode ser o mesmo para 2 ou mais cavalos; nesse caso, eles compartilham a posição de chegada.
1,1.13.4
2,1.13.0
3,R
4,1.12.7
5,1.11.5
6,1.13.4
7,1.12.1
8,1.17.9
RESULTADO
Para cada linha CSV, produza uma pista de corrida como esta:
1_|______________4(1.13.0)___________________________
A pista é composta por:
1
qual é o cavalo começa a ordem._|
onde_
é um espaçador e a|
é a linha de chegada.- 50 x
_
que representa 50 décimos de segundo. 5(1.13.4)
essa é a posição de chegada seguida pela hora de chegada. Este deve ser posicionado respeitando as diferenças horárias entre os cavalos. Por exemplo: você posiciona o 1º chegado na linha de chegada no tempo1.11.5
, o segundo chega no tempo1.12.1
, a diferença é1.12.1 - 1.11.5 = 6
décimos de segundo, portanto o segundo cavalo deve ser posicionado no sexto caractere e assim por diante. Se a diferença horária for superior a 50 décimos de segundos (ou 5 segundos), você deverá posicionar o cavalo no final. O mesmo se o cavalo forR
(retirado).
Portanto, toda a pista dos dados CSV acima deve ser:
F=Finish line
1_|____________________________5(1.13.4)_____________
2_|______________4(1.13.0)___________________________
3_|__________________________________________________R
4_|___________3(1.12.7)______________________________
5_1(1.11.5)__________________________________________
6_|____________________________5(1.13.4)_____________
7_|_____2(1.12.1)____________________________________
8_|__________________________________________________6(1.17.9)
012345678901234567890123456789012345678901234567890
Não há necessidade de adicionar F=Finish line
e a última linha 0123456789...
é apenas para fins de explicação.
Casos de teste
RACE:
1,1.14.9
2,R
3,R
4,1.14.2
5,1.15.2
6,1.15.3
7,1.15.3
RACE:
1,1.13.6
2,1.13.8
3,R,
4,1.15.9
5,1.13.8
6,R,
7,1.14.4
8,1.15.6
9,1.14.1
10,1.13.9
11,1.13.2
12,1.14.3
13,1.15.0
RACE:
1,1.13.4
2,1.13.0
3,R
4,1.12.7
5,1.11.5
6,1.13.4
7,1.12.1
8,1.17.9
RACE:
1,1.17.3
2,1.20.4
3,1.17.0
4,1.18.8
5,1.18.5
6,1.18.4
7,1.18.4
8,1.17.8
9,1.18.3
10,1.18.7
11,R
RACE:
1,1.17.5
2,R
3,1.17.7
4,1.16.9
5,1.16.1
6,1.18.9
RACE:
1,1.12.8
2,1.13.0
3,1.13.2
4,1.12.7
5,1.11.5
6,1.13.0
7,1.12.1
8,1.12.8
Regras
- O menor código vence.
1
?
R
cavalo? (Eu sei que isto não é uma questão sensível na vida real, mas este é o código.)