Một ngày tại trường đua ngựa


10

Lý lịch

Quay trở lại vào cuối những năm 90/00 đầu tiên khi Flash Web Design tuyệt vời đến mức không ai có thể sống mà không có trang web Flash đầy đủ hoặc ít nhất là một tiện ích hoạt hình, tôi được thuê để phát triển "trình xem cuộc đua ngựa" trong Flash / Actioncript, trong hình dạng của một trò chơi điện tử theo phong cách trò chơi điện tử của thập niên 80, vì vậy khách truy cập của trang web không chỉ đọc kết quả cuộc đua mà còn có thể thấy nó trong một hình ảnh động chuyển động! Ôi! Ấn tượng!

Họ cung cấp cho tôi tệp CSV với tất cả các chi tiết về chủng tộc: thứ tự bắt đầu và đến, tên ngựa, tên người lái xe, giải thưởng, v.v. Ứng dụng Flash của tôi đọc tệp đó cho mỗi cuộc đua và hiển thị hình động nói trên.

Ngày nay, hỗ trợ Flash bị giảm đáng kể, vì vậy chúng tôi phải trở lại ascii-art !

Bài tập

Nhiệm vụ của bạn là tạo ra một chương trình hoặc chức năng đầy đủ để đọc dữ liệu cuộc đua ở định dạng CSV từ đầu vào tiêu chuẩn và đưa ra một đại diện nghệ thuật của cuộc đua như trong ví dụ dưới đây.

ĐẦU VÀO

Dữ liệu CSV với 2 trường: 1) thứ tự bắt đầu; 2) thời gian đến tại Kết thúc ở định dạng 1.13.4(1 phút, 13 giây, 4 phần mười giây). Nếu báo cáo thời gian Rcó nghĩa là con ngựa bị rút lui (không hoàn thành cuộc đua) do sự cố, ngã hoặc lý do khác. Lưu ý: Thời gian đến có thể giống nhau cho 2 con ngựa trở lên, trong trường hợp này chúng có chung vị trí đến.

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

ĐẦU RA

Đối với mỗi hàng CSV, hãy xuất một đường đua như thế này:

1_|______________4(1.13.0)___________________________

Đường đua được sáng tác bởi:

  • 1 đó là những con ngựa bắt đầu trật tự.
  • _|trong đó _là một miếng đệm và |là dòng kết thúc.
  • 50 x _đại diện cho 50 phần mười giây.
  • 5(1.13.4)đó là vị trí đến theo sau là thời gian đến. Điều này phải được định vị tôn trọng sự khác biệt thời gian giữa những con ngựa. Ví dụ: bạn định vị vị trí thứ 1 đến trên dòng Kết thúc tại thời điểm 1.11.5, lần thứ hai đến đúng lúc 1.12.1, sự khác biệt là một 1.12.1 - 1.11.5 = 6phần mười giây, do đó, con ngựa thứ hai nên được định vị ở ký tự thứ 6, v.v. Nếu chênh lệch thời gian là hơn 50 phần mười giây (hoặc 5 giây), bạn phải định vị con ngựa ở cuối. Tương tự nếu con ngựa là R(Rút lui).

Vì vậy, toàn bộ đường đua cho dữ liệu CSV ở trên phải là:

  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

Không cần thêm F=Finish line, và dòng cuối cùng 0123456789...chỉ dành cho mục đích giải thích.

Các trường hợp thử nghiệm

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

Quy tắc

  • Mã ngắn nhất sẽ thắng.

Trong ví dụ nơi thứ 5 bị trói, ngựa 8 vẫn không xếp thứ 7?
Jonathan Allan

Chúng ta có thể cho rằng số phút sẽ luôn luôn 1không?
Sản phẩm ETH

@Jonathan ALLan Nó phụ thuộc vào các quy tắc, trong ví dụ tôi giả sử rằng nếu những con ngựa chia sẻ vị trí thứ 5, tiếp theo sẽ được coi là thứ 6.
Mario

@ETHproductions Có, bạn có thể giả sử số phút luôn là 1.
Mario

2
Ngoài ra, chúng ta có thể cho rằng sẽ luôn có một Rcon ngựa không? (Tôi biết đây không phải là một câu hỏi hợp lý trong cuộc sống thực, nhưng đây là mã.)
PurkkaKoodari 2/11/2016

Câu trả lời:


1

JavaScript (ES6), 261 byte

Lấy một chuỗi các chuỗi thời gian "1.ss.t"làm đầu vào. Thứ tự bắt đầu là ẩn.

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

Bản giới thiệu


1

Python 2, 282 272 246 byte

Tương tự như Arnauld , đầu vào được coi là đã bị tước khỏi số bắt đầu do nó ẩn.

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))
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.