Ein Tag bei den Pferderennen

10

Hintergrund

In den späten 90ern / ersten 00ern, als Flash Web Design so cool war, dass niemand ohne eine vollständige Flash-Website oder zumindest ein animiertes Widget leben konnte, wurde ich beauftragt, einen "Pferderennen-Viewer" in Flash / Actionscript zu entwickeln. In Form einer Animation im Stil eines Videospiels aus den 80er Jahren konnten die Besucher der Website nicht nur die Rennergebnisse lesen, sondern sie auch in einer bewegenden Animation sehen! BEEINDRUCKEND! Beeindruckend!

Sie stellten mir eine CSV-Datei mit allen Details zum Rennen zur Verfügung: Start- und Ankunftsreihenfolge, Pferdenamen, Fahrernamen, Preise usw. Meine Flash-App las diese Datei für jedes Rennen und zeigte die oben genannte Animation an.

Heutzutage wird die Flash-Unterstützung erheblich abgelehnt, daher müssen wir auf ASCII-Kunst zurückgreifen !

Aufgabe

Ihre Aufgabe ist es, ein vollständiges Programm oder eine vollständige Funktion zu erstellen, die die Renndaten im CSV-Format aus der Standardeingabe liest und eine ASCII-artige Darstellung des Rennens ausgibt, wie im folgenden Beispiel gezeigt.

EINGANG

CSV-Daten mit 2 Feldern: 1) Startreihenfolge; 2) Ankunftszeit im Ziel im Format 1.13.4(1 Minute, 13 Sekunden, 4 Zehntelsekunden). Wenn die RZeitberichte bedeuten, dass das Pferd aufgrund eines Vorfalls, eines Sturzes oder eines anderen Grundes zurückgezogen wurde (das Rennen nicht beendet hat). Hinweis: Die Ankunftszeit kann für 2 oder mehr Pferde gleich sein. In diesem Fall teilen sie sich die Ankunftsposition.

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

AUSGABE

Geben Sie für jede CSV-Zeile eine Rennstrecke wie folgt aus:

1_|______________4(1.13.0)___________________________

Die Rennstrecke besteht aus:

  • 1 Welches ist die Pferde Startreihenfolge.
  • _|Wo _ist ein Abstandshalter und das |ist die Ziellinie.
  • 50 x _, was 50 Zehntelsekunden entspricht.
  • 5(1.13.4)Dies ist die Ankunftsposition, gefolgt von der Ankunftszeit. Dies muss unter Berücksichtigung der Zeitunterschiede zwischen Pferden positioniert werden. Beispiel: Sie positionieren das erste Pferd 1.11.5, das zur Zeit auf der Ziellinie angekommen ist , das zweite kommt zur Zeit 1.12.1, die Differenz beträgt 1.12.1 - 1.11.5 = 6Zehntelsekunden, also sollte das zweite Pferd beim sechsten Zeichen positioniert sein und so weiter. Wenn der Zeitunterschied mehr als 50 Zehntelsekunden (oder 5 Sekunden) beträgt, müssen Sie das Pferd am Ende positionieren. Das gleiche gilt, wenn das Pferd R(zurückgezogen) ist.

Die gesamte Rennstrecke für die oben genannten CSV-Daten sollte also sein:

  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

Es muss nicht hinzugefügt werden F=Finish line, und die letzte Zeile 0123456789...dient nur zur Erläuterung.

Testfälle

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

Regeln

  • Der kürzeste Code gewinnt.
Mario
quelle
Würde Pferd 8 in dem Beispiel, in dem der fünfte Platz unentschieden ist, nicht immer noch den siebten Platz belegen?
Jonathan Allan
Dürfen wir annehmen, dass die Minutenzahl immer sein wird 1?
ETHproductions
@ JonathanAllan Es hängt von den Regeln ab. In dem Beispiel habe ich angenommen, dass wenn die Pferde die 5. Position teilen, die nächste als 6. betrachtet wird.
Mario
@ETHproductions Ja, Sie können davon ausgehen, dass die Minute immer 1 ist.
Mario
2
Dürfen wir auch annehmen, dass es immer ein Nicht- RPferd geben wird? (Ich weiß, dass dies im wirklichen Leben keine vernünftige Frage ist, aber dies ist Code.)
PurkkaKoodari

Antworten:

1

JavaScript (ES6), 261 Byte

Nimmt ein Array von Zeitzeichenfolgen "1.ss.t"als Eingabe. Die Startreihenfolge ist implizit.

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`
`

Demo

Arnauld
quelle
1

Python 2, 282 272 246 Bytes

Ähnlich wie bei Arnauld wird angenommen, dass die Eingabe bereits von der Startnummer entfernt wurde, da sie implizit ist.

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
quelle