Une journée aux courses de chevaux

10

Contexte

À la fin des années 90 / premiers 00, lorsque Flash Web Design était tellement cool que personne ne pouvait vivre sans avoir un site Web Flash complet, ou au moins un widget animé, j'ai été embauché pour développer une "visionneuse de courses de chevaux" dans Flash / Actionscript, sous la forme d'une animation de style jeu vidéo des années 80, de sorte que les visiteurs du site pouvaient non seulement lire les résultats de la course, mais ils pouvaient le voir dans une animation animée! HOU LA LA! Impressionnant!

Ils m'ont fourni un fichier CSV avec tous les détails des courses: ordre de départ et d'arrivée, noms des chevaux, noms des pilotes, prix, etc. Mon application Flash a lu ce fichier pour chaque course et a affiché l'animation ci-dessus.

De nos jours, le support Flash est considérablement diminué, nous devons donc revenir à ascii-art !

Tâche

Votre tâche consiste à créer un programme ou une fonction complète qui lit les données de course au format CSV à partir d'une entrée standard et génère une représentation ascii-art de la course, comme indiqué dans l'exemple ci-dessous.

CONTRIBUTION

Données CSV avec 2 champs: 1) ordre de départ; 2) heure d'arrivée à l'arrivée au format 1.13.4(1 minute, 13 secondes, 4 dixièmes de seconde). Si le rapport de temps Rsignifie que le cheval est en retraite (n'a pas terminé la course) en raison d'un incident, d'une chute ou d'une autre raison. Remarque: L'heure d'arrivée peut être la même pour 2 chevaux ou plus, dans ce cas, ils partagent la position d'arrivée.

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

PRODUCTION

Pour chaque ligne CSV, sortez un circuit comme celui-ci:

1_|______________4(1.13.0)___________________________

L'hippodrome est composé de:

  • 1 qui est l'ordre de départ des chevaux.
  • _|_est un espaceur et |est la ligne d'arrivée.
  • 50 x _qui représente 50 dixièmes de seconde.
  • 5(1.13.4)c'est la position d'arrivée suivie de l'heure d'arrivée. Celui-ci doit être positionné en respectant les décalages horaires entre chevaux. Par exemple: vous positionnez le 1er arrivé sur la ligne d'arrivée au moment 1.11.5, le second arrive au moment 1.12.1, la différence est de 1.12.1 - 1.11.5 = 6dixièmes de seconde, donc le deuxième cheval doit être positionné au 6ème caractère, et ainsi de suite. Si le décalage horaire est supérieur à 50 dixièmes de secondes (ou 5 secondes), vous devez positionner le cheval à la fin. De même si le cheval est R(Retraité).

Donc, l'hippodrome entier pour les données CSV ci-dessus devrait être:

  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

Il n'est pas nécessaire d'ajouter F=Finish line, et la dernière ligne 0123456789...est uniquement destinée à expliquer le but.

Cas de test

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

Règles

  • Le code le plus court gagne.
Mario
la source
Dans l'exemple où 5e est à égalité, le cheval 8 ne serait-il pas encore 7e?
Jonathan Allan
Pouvons-nous supposer que le nombre de minutes sera toujours 1?
ETHproductions
@JonathanAllan Cela dépend des règles, dans l'exemple j'ai supposé que si les chevaux partagent la 5ème position, la suivante sera considérée 6ème.
Mario
@ETHproductions Oui, vous pouvez supposer que la minute est toujours 1.
Mario
2
Peut-on aussi supposer qu'il y aura toujours un non- Rcheval? (Je sais que ce n'est pas une question sensée dans la vraie vie, mais c'est du code.)
PurkkaKoodari

Réponses:

1

JavaScript (ES6), 261 octets

Prend un tableau de chaînes de temps "1.ss.t"en entrée. L'ordre de départ est implicite.

a=>a.map((t,i)=>(u='_',++i>9?'':' ')+i+u+u.repeat(x=(x=t>'9'?50:t.slice(2)*10-s[0].slice(2)*10)>50?50:x,p=s.indexOf(t)+1+`(${t})`).replace(u,'|')+(x<50?p:'')+u.repeat((x=50-p.length-x)>0?x:0)+(x>0?'':t>'9'?t:p),s=a.filter((v,i)=>a.indexOf(v)==i).sort()).join`
`

Démo

Arnauld
la source
1

Python 2, 282 272 246 octets

Semblable à Arnauld, l'entrée est supposée être déjà supprimée du numéro de départ car elle est implicite.

H=input().split("\n")
T=[float(c[2:])if c[2:]else 99for c in H]
P=[min(int(10*(t-min(T))),50)for t in T]
S=sorted(list(set(T)))
i=0
u="_"
for h,p,t in zip(H,P,T):i+=1;s=S.index(t)+1;print`i`+u+"|"*(s>1)+u*p+[h,"%d(%s)"%(s,h)][t<99]+u*(41-p+(s<2))
Karl Napf
la source