At Yarışlarında Bir Gün


10

Arka fon

90'ların sonlarında / ilk 00'larda, Flash Web Design'ın hiç kimse tam bir Flash web sitesine veya en azından animasyonlu bir widget'a sahip olmadan yaşayamayacağı kadar serin olduğunda, Flash / Actionscript'te bir "at yarışları görüntüleyicisi" geliştirmek için işe alındım, 80'lerin video oyunu tarzı animasyon şeklinde, bu yüzden sitenin ziyaretçileri sadece yarış sonuçlarını okuyamaz, aynı zamanda hareketli bir animasyonda da görebilirler! VAOV! Etkileyici!

Bana tüm yarış detaylarını içeren bir CSV dosyası sağladılar: başlangıç ​​ve varış sırası, at isimleri, sürücü isimleri, ödüller, vb. Flash uygulamam her yarış için bu dosyayı okudu ve yukarıda belirtilen animasyonu gösterdi.

Günümüzde Flash desteği önemli ölçüde azaldı, bu yüzden ascii-art'a geri dönmeliyiz !

Görev

Göreviniz, standart verileri CSV formatında okuyan ve aşağıdaki örnekte gösterildiği gibi yarışın ascii-art temsilini veren tam bir program veya işlev oluşturmaktır.

GİRİŞ

2 alana sahip CSV verileri: 1) başlangıç ​​sırası; 2) Finişe varış zamanı 1.13.4(1 dakika, 13 saniye, saniyenin onda biri). Zaman raporları R, olay, düşme veya başka bir nedenden dolayı atın geri çekildiği (yarışı bitirmediği) anlamına geliyorsa . Not: Varış süresi 2 veya daha fazla at için aynı olabilir, bu durumda varış pozisyonunu paylaşırlar.

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

ÇIKTI

Her bir CSV satırı için aşağıdaki gibi bir yarış pisti çıkın:

1_|______________4(1.13.0)___________________________

Yarış pisti aşağıdakilerden oluşur:

  • 1 hangi atlar emir başlar.
  • _|burada _bir ara parçası ve |bitiş çizgisidir.
  • 50 x _saniyenin 50 onda birini temsil eder.
  • 5(1.13.4)varış noktası ve ardından varış zamanı gelir. Bu, atlar arasındaki zaman farklılıklarına göre konumlandırılmalıdır. Örneğin: 1. sırada bitiş çizgisine geldi 1.11.5, ikincisi zamanında geldi 1.12.1, fark 1.12.1 - 1.11.5 = 6saniyenin onda biri, yani ikinci at 6. karaktere yerleştirilmeli vb. Zaman farkı 50 saniyenin on saniyeden (veya 5 saniyeden) fazlaysa, atı sonuna yerleştirmelisiniz. At R(Geri Çekilir) ise aynı .

Dolayısıyla yukarıdaki CSV verileri için tüm yarış pisti şöyle olmalıdır:

  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

Eklemeye gerek yoktur F=Finish lineve son satır 0123456789...sadece açıklamak içindir.

Test senaryoları

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

kurallar

  • En kısa kod kazanır.

5'in bağlı olduğu örnekte, at 8 hala 7'inci sırada olmaz mı?
Jonathan Allan

Dakika sayısının her zaman olacağını varsayabilir miyiz 1?
ETHproductions

@JonathanAllan Kurallara bağlıdır, örnekte atlar 5. pozisyonu paylaşırsa bir sonrakinin 6. olarak kabul edileceğini varsaydım.
Mario

@ETHproductions Evet dakika her zaman 1 olduğunu varsayabilirsiniz.
Mario

2
Ayrıca, her zaman Rata sahip olmayacağını varsayabilir miyiz ? (Bunun gerçek hayatta mantıklı bir soru olmadığını biliyorum, ama bu kod.)
PurkkaKoodari

Yanıtlar:


1

JavaScript (ES6), 261 bayt

Bir dizi zaman dizesini "1.ss.t"girdi olarak alır. Başlangıç ​​sırası örtük.

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

gösteri


1

Piton 2, 282 272 246 bayt

Arnauld'a benzer şekilde , dolaylı olduğu için girdinin başlangıç ​​numarasından zaten çıkarıldığı varsayılır.

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))
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.