วันหนึ่งที่การแข่งม้า


10

พื้นหลัง

ย้อนกลับไปในช่วงปลายยุค 90/00 แรกเมื่อ Flash Web Design เจ๋งมากจนไม่มีใครสามารถมีชีวิตอยู่ได้โดยไม่ต้องมีเว็บไซต์ Flash ที่สมบูรณ์หรืออย่างน้อยก็เป็นวิดเจ็ตอนิเมชั่นฉันได้รับการว่าจ้างให้พัฒนา ในรูปของแอนิเมชั่นสไตล์วิดีโอเกมยุค 80 ดังนั้นผู้เข้าชมเว็บไซต์ไม่เพียง แต่สามารถอ่านผลการแข่งขันได้เท่านั้น แต่พวกเขายังสามารถดูได้ในแอนิเมชั่นที่เคลื่อนไหว! ว้าว! ที่น่าประทับใจ!

พวกเขาให้ไฟล์ CSV พร้อมรายละเอียดการแข่งขันทั้งหมด: ลำดับเริ่มต้นและชื่อม้าชื่อผู้ขับขี่รางวัลและอื่น ๆ แอพ Flash ของฉันอ่านไฟล์นั้นสำหรับการแข่งขันแต่ละครั้งและแสดงภาพเคลื่อนไหวดังกล่าวข้างต้น

ทุกวันนี้การสนับสนุน Flash ลดลงอย่างมากดังนั้นเราต้องเปลี่ยนกลับเป็นASCII-art !

งาน

งานของคุณคือการสร้างโปรแกรมหรือฟังก์ชั่นเต็มรูปแบบที่อ่านข้อมูลการแข่งขันในรูปแบบ CSV จากอินพุตมาตรฐานและส่งออกการแสดง ASCII-art ของการแข่งขันดังที่แสดงในตัวอย่างด้านล่าง

INPUT

ข้อมูล CSV พร้อม 2 ฟิลด์: 1) เริ่มสั่งซื้อ; 2) เวลาถึงที่ Finish ในรูปแบบ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 x _ที่แสดงถึง 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 อยู่ใช่ไหม?
Jonathan Allan

เราขอสมมติว่าจำนวนนาทีจะเป็นเท่า1ไหร่?
ETHproductions

@ โจนาธานอัลลันมันขึ้นอยู่กับกฎในตัวอย่างที่ฉันคิดว่าถ้าม้าแบ่งปันตำแหน่งที่ 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 ไบต์

คล้ายกับArnauldอินพุตจะถูกถอดออกจากหมายเลขเริ่มต้นแล้วเนื่องจากเป็นค่าปริยาย

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))
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.