День на скачках


10

Фон

В конце 90-х / первых 00-х, когда Flash Web Design был настолько крутым, что никто не мог жить без полноценного Flash-сайта или хотя бы анимированного виджета, я был нанят для разработки «средства просмотра скачек» во Flash / Actionscript, в форме анимации в стиле видеоигр 80-х, чтобы посетители сайта могли не только прочитать результаты гонки, но и увидеть их в движущейся анимации! ВОТ ЭТО ДА! Впечатляет!

Они предоставили мне файл CSV со всеми деталями гонок: порядком старта и прибытия, именами лошадей, именами гонщиков, призами и т. Д. Мое приложение Flash считывало этот файл для каждой расы и отображало вышеуказанную анимацию.

В настоящее время поддержка Flash значительно отклонена, поэтому мы должны вернуться к ascii-art !

задача

Ваша задача - создать полную программу или функцию, которая считывает данные гонки в формате CSV из стандартного ввода и выводит представление гонки в ascii-art, как показано в примере ниже.

ВХОД

Данные CSV с 2 полями: 1) стартовый порядок; 2) время прибытия на финиш в формате 1.13.4(1 минута 13 секунд 4 секунды). Если временные отчеты Rозначают, что лошадь отступила (не закончила гонку) из-за инцидента, падения или по другой причине. Примечание: время прибытия может быть одинаковым для 2 или более лошадей, в этом случае они разделяют позицию прибытия.

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

ВЫВОД

Для каждой строки CSV выведите беговую дорожку следующим образом:

1_|______________4(1.13.0)___________________________

Ипподром состоит из:

  • 1 который является порядком старта лошадей.
  • _|где _проставка и |финишная черта.
  • 50 х, _что составляет 50 десятых секунды.
  • 5(1.13.4)это позиция прибытия с последующим временем прибытия. Это должно быть сделано с учетом разницы во времени между лошадьми. Например: вы позиционируете 1-го прибывшего на финишную прямую вовремя 1.11.5, вторую прибывает во время 1.12.1, разница составляет 1.12.1 - 1.11.5 = 6десятые доли секунды, поэтому вторая лошадь должна располагаться на 6-м персонаже, и так далее. Если разница во времени составляет более 50 десятых секунды (или 5 секунд), вы должны расположить лошадь в конце. То же самое, если лошадь R(отступил).

Таким образом, весь трек для данных CSV выше должен быть:

  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

Там нет необходимости добавлять F=Finish line, и последняя строка, 0123456789...которая только для объяснения цели.

Контрольные примеры

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

правила

  • Самый короткий код выигрывает.

В примере, где 5-ый связан, разве лошадь 8 не будет 7-ой?
Джонатан Аллан

Можно 1ли считать, что номер минуты всегда будет ?
ETHproductions

@JonathanAllan Это зависит от правил, в примере я предположил, что если лошади занимают 5-ю позицию, следующая будет считаться 6-й.
Марио

@ETHproductions Да, вы можете предположить, что минута всегда 1.
Марио

2
Кроме того, можем ли мы предположить, что всегда будет не Rлошадь? (Я знаю, что это не разумный вопрос в реальной жизни, но это код.)
PurkkaKoodari

Ответы:


1

JavaScript (ES6), 261 байт

Принимает массив временных строк в "1.ss.t"качестве входных данных. Порядок старта неявный.

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

демонстрация


1

Python 2, 282 272 246 байт

Как и в случае с Арно , предполагается, что входные данные уже удалены из начального числа, поскольку они неявные.

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))
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.