競馬の一日


10

バックグラウンド

90年代後半/最初の00年代には、Flash Webデザインが非常にクールで、完全なFlash Webサイト、または少なくともアニメーションウィジェットがないと生きていけなかったため、Flash / Actionscriptで「競馬ビューア」を開発するために雇われました。 80年代のビデオゲームスタイルのアニメーションの形をしているため、サイトの訪問者はレース結果を読むだけでなく、動くアニメーションでそれを見ることができました。うわー!印象的!

彼らは私にすべてのレースの詳細を含むCSVファイルを提供しました:開始と到着の順番、馬の名前、ドライバーの名前、賞品など。私のフラッシュアプ​​リは各レースでそのファイルを読み取り、上記のアニメーションを表示しました。

現在、Flashのサポートは大幅に減少しているため、ascii-artに戻す必要があります。

仕事

あなたの仕事は、以下の例に示すように、標準入力からレースデータをCSV形式で読み取り、レースのASCIIアート表現を出力する完全なプログラムまたは関数を作成することです。

入力

2つのフィールドを持つCSVデータ:1)開始順序。2)フィニッシュでの到着時刻1.13.4(1分、13秒、1/10秒)。時間の報告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の_10分の1秒を表す50 x 。
  • 5(1.13.4)つまり、到着位置とそれに続く到着時刻です。これは、馬間の時間差を考慮して配置する必要があります。たとえば、最初に到着したフィニッシュラインに最初に到着した位置、1.11.52番目に到着した時間1.12.1、時間の差は1.12.1 - 1.11.5 = 610分の1秒なので、2番目の馬は6番目のキャラクタに位置するというようになります。時間差が10分の1秒(または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 2016年

@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バイト

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.