ติดตามรายการไปยังตารางเวลา


25

บทนำ

คุณไม่ได้เกลียดเมื่อมีคนอัปโหลดอัลบั้มที่คุณชอบไปยัง YouTube แต่คำอธิบายนั้นมีเพียงรายชื่อเพลงเท่านั้น อย่างนี้:

1. Everything in Its Right Place - 4:11
2. Kid A - 4:44
3. The National Anthem - 5:50
4. How to Disappear Completely - 5:55
5. Treefingers - 3:42
6. Optimistic - 5:16
7. In Limbo - 3:31
8. Idioteque - 5:09
9. Morning Bell - 4:29
10. Motion Picture Soundtrack - 6:59

ตอนนี้คุณไม่รู้หรอกว่าMorning Bellเริ่มขึ้นเมื่อใดหากคุณรวมจำนวนครั้งในหัวของคุณ! โดยปกติแล้ววิญญาณที่ดีจะเข้ามาและออกจากตารางเวลาที่มีประโยชน์ในส่วนความเห็น (หวั่น) ซึ่งมีลักษณะดังนี้:

(0:00:00) Everything in Its Right Place
(0:04:11) Kid A
(0:08:55) The National Anthem
(0:14:45) How to Disappear Completely
(0:20:40) Treefingers
(0:24:22) Optimistic
(0:29:38) In Limbo
(0:33:09) Idioteque
(0:38:18) Morning Bell
(0:42:47) Motion Picture Soundtrack

สเปค

  • งานของคุณคือการเขียนโปรแกรมหรือฟังก์ชั่นที่รับรายการแทร็กเป็นอินพุตและตารางเวลาเป็นเอาต์พุต

    • คุณอาจเลือกอ่านอินพุตจาก STDIN หรือสตริงอาร์กิวเมนต์หรือรายการอาร์กิวเมนต์ของบรรทัด ในทำนองเดียวกันคุณอาจเลือกพิมพ์เอาต์พุตไปยัง STDOUT หรือส่งคืนสตริงหรือส่งคืนรายการบรรทัด การทำสิ่งเหล่านี้ล้มเหลว
  • (\d+)\. [A-Za-z0-9 ]{1,100} - (\d+):(\d\d)คุณอาจจะสมมติสายการป้อนข้อมูลแต่ละคนมีรูปแบบ สำหรับความบกพร่องของ regex สิ่งนี้หมายความว่าคุณสามารถสันนิษฐานว่าแต่ละบรรทัดมีรูปแบบที่ดี (ดังด้านบน) และชื่อเพลงประกอบด้วยอักขระ ASCII และตัวอักษรเว้นวรรคและตัวอักษรและมีความยาวไม่เกิน 100 ไบต์

  • ความยาวติดตามอยู่เสมออย่างน้อยและไม่เกิน0:0159:59
  • หมายเลขการติดตามจะเพิ่มขึ้นเพื่อเริ่มต้นจากและนับถึงไม่เกิน199
  • 9:59:59ความยาวรวมของอัลบั้มคือไม่เกิน

นี่คือดังนั้นจึงเป็นรหัสที่สั้นที่สุด (เป็นไบต์)

กรณีทดสอบ

โปรแกรมของคุณควรทำการแปลงที่ถูกต้องในบทนำ (Radiohead's Kid A ) นี่คือกรณีทดสอบที่ใหญ่กว่า (Sufjan Stevens ' Illinois 1 ) ที่มีสตริงยาวโปรแกรมของคุณควรใช้กับ:

1. Concerning the UFO Sighting Near Highland Illinois - 2:08
2. The Black Hawk War - 2:14
3. Come On Feel the Illinoise - 6:45
4. John Wayne Gacy Jr - 3:19
5. Jacksonville - 5:24
6. A Short Reprise for Mary Todd Who Went Insane but for Very Good Reasons - 0:47
7. Decatur or Round of Applause for Your Stepmother - 3:03
8. One Last Whoo Hoo for the Pullman - 0:06
9. Chicago - 6:04
10. Casimir Pulaski Day - 5:53
11. To the Workers of the Rock River Valley Region - 1:40
12. The Man of Metropolis Steals Our Hearts - 6:17
13. Prairie Fire That Wanders About - 2:11
14. A Conjunction of Drones Simulating the Way - 0:19
15. The Predatory Wasp of the Palisades Is Out to Get Us - 5:23
16. They Are Night Zombies They Are Neighbors They Have Come Back from the Dead Ahhhh - 5:09
17. Lets Hear That String Part Again Because I Dont Think They Heard It All the Way Out in Bushnell - 0:40
18. In This Temple as in the Hearts of Man for Whom He Saved the Earth - 0:35
19. The Seers Tower - 3:53
20. The Tallest Man the Broadest Shoulders - 7:02
21. Riffs and Variations on a Single Note - 0:46
22. Out of Egypt into the Great Laugh of Mankind and I Shake the Dirt from My Sandals as I Run - 4:21

ผลลัพธ์ที่ถูกต้องคือ:

(0:00:00) Concerning the UFO Sighting Near Highland Illinois
(0:02:08) The Black Hawk War
(0:04:22) Come On Feel the Illinoise
(0:11:07) John Wayne Gacy Jr
(0:14:26) Jacksonville
(0:19:50) A Short Reprise for Mary Todd Who Went Insane but for Very Good Reasons
(0:20:37) Decatur or Round of Applause for Your Stepmother
(0:23:40) One Last Whoo Hoo for the Pullman
(0:23:46) Chicago
(0:29:50) Casimir Pulaski Day
(0:35:43) To the Workers of the Rock River Valley Region
(0:37:23) The Man of Metropolis Steals Our Hearts
(0:43:40) Prairie Fire That Wanders About
(0:45:51) A Conjunction of Drones Simulating the Way
(0:46:10) The Predatory Wasp of the Palisades Is Out to Get Us
(0:51:33) They Are Night Zombies They Are Neighbors They Have Come Back from the Dead Ahhhh
(0:56:42) Lets Hear That String Part Again Because I Dont Think They Heard It All the Way Out in Bushnell
(0:57:22) In This Temple as in the Hearts of Man for Whom He Saved the Earth
(0:57:57) The Seers Tower
(1:01:50) The Tallest Man the Broadest Shoulders
(1:08:52) Riffs and Variations on a Single Note
(1:09:38) Out of Egypt into the Great Laugh of Mankind and I Shake the Dirt from My Sandals as I Run

ลีดเดอร์บอร์ด

เพื่อให้คะแนนของคุณปรากฏบนกระดานควรอยู่ในรูปแบบนี้:

# Language, Bytes

1. ขออภัยต่อ Sufjan ซึ่งมีชื่อเพลงที่น่าทึ่งที่ฉันต้องพูดพล่อยๆเล็กน้อยเพื่อให้พอดีกับรูปแบบที่เรียบง่ายปัญหานี้ถูก จำกัด


เอาท์พุทอาจมีช่องว่างต่อท้าย?
Martin Ender

1
เรดิโอเฮดและ Sufjan Stevens Meh :-P
Luis Mendo

Nope; รูปแบบสำหรับแต่ละบรรทัด(h:mm:ss) Track Nameตามด้วยบรรทัดใหม่ทันที
ลินน์

@LuisMendo อย่าลังเลที่จะแสดงรสนิยมทางดนตรีที่เหนือกว่าของคุณในคำตอบของคุณ ... ?
ลินน์

ฮ่า ๆ ๆ ๆ นั่นเป็นแรงจูงใจเพิ่มเติมที่ดีในการตอบ BTW ฉันชอบความท้าทายและฉันก็ยกมันขึ้นมา
Luis Mendo

คำตอบ:


12

CJam, 60 57 55 ไบต์

ขอบคุณ Sp3000 สำหรับการบันทึก 2 ไบต์

qN/{T60bZ0e["(%d:%02d:%02d) "e%\S/1>)':/60bT+:T;W<S*N}/

ทดสอบที่นี่

คำอธิบาย

qN/{      e# Read input and split into lines.
  T60b    e# Push T (initially zero, we use this to keep track of the total time in
          e# seconds), and convert it to base 60.
  Z0e[    e# Pad it with zeroes to 3 digits to get hours, minutes, seconds.
  "(%d:%02d:%02d) "e%
          e# Get the (h:mm:ss) part using a format string.
  \S/     e# Pull up the current line, split on spaces.
  1>      e# Discard the first segment, i.e. the track number.
  )':/    e# Pull off the last segment, i.e. the time, and split on colons.
  60b     e# Interpret the two parts as base-60 digits to get the amount of seconds
          e# for the track.
  T+:T;   e# Add this to T and discard it.
  W<      e# Discard the last segment of the remaining string (the hyphen).
  S*N     e# Join the song name back together with spaces and push a line feed.
}/

16
goddammit Martin
cjfaure

6

Perl, (เพิ่ม 93 ตัวอักษร-p) 94 ไบต์

s!\d+\. (.+) - (\d+:(\d+))!sprintf"(%d:%02d:%02d) $1",$n/3600,$n%3600/60,$n%60,$n+=$3+60*$2!e

วิ่ง:

perl -pe 's!\d+\. (.+) - (\d+:(\d+))!sprintf"(%d:%02d:%02d) $1",$n/3600,$n%3600/60,$n%60,$n+=$3+60*$2!e' <<< '<input>'

5

C ++ 212 209 202 189 ไบต์

C ++ เพราะ .. ทำไมล่ะ

#include<iostream>
long d,t,u;main(){std::string a,b(8,0);while(getline(std::cin>>t>>a[0],a,'-')>>t>>b[0]>>u){strftime(&b[0],9,"%T",gmtime(&d));b[0]='(';std::cout<<b+")"+a+'\n';d+=t*60+u;}}

มีชีวิต: 212 209 202 189


5

Python 2, 170 160 Bytes

เมื่อก่อนฉันได้เล่นกอล์ฟหวังว่านี่จะไม่แย่เกินไป: P

t=0
for i in input().split('\n'):i=i.split(' - ');print'(%d:%02d:%02d)'%(t/3600,t%3600/60,t%60),i[0].split('. ')[1];k=i[-1].split(':');t+=int(k[0])*60+int(k[1])

อินพุตควรล้อมรอบด้วยเครื่องหมายคำพูดและแยกตามบรรทัดใหม่ดังนี้:

"1. Concerning the UFO Sighting Near Highland Illinois - 2:08\n2. The Black Hawk War - 2:14\n3. Come On Feel the Illinoise - 6:45\n4. John Wayne Gacy Jr - 3:19\n5. Jacksonville - 5:24\n6. A Short Reprise for Mary Todd Who Went Insane but for Very Good Reasons - 0:47\n7. Decatur or Round of Applause for Your Stepmother - 3:03\n8. One Last Whoo Hoo for the Pullman - 0:06\n9. Chicago - 6:04\n10. Casimir Pulaski Day - 5:53\n11. To the Workers of the Rock River Valley Region - 1:40\n12. The Man of Metropolis Steals Our Hearts - 6:17\n13. Prairie Fire That Wanders About - 2:11\n14. A Conjunction of Drones Simulating the Way - 0:19\n15. The Predatory Wasp of the Palisades Is Out to Get Us - 5:23\n16. They Are Night Zombies They Are Neighbors They Have Come Back from the Dead Ahhhh - 5:09\n17. Lets Hear That String Part Again Because I Dont Think They Heard It All the Way Out in Bushnell - 0:40\n18. In This Temple as in the Hearts of Man for Whom He Saved the Earth - 0:35\n19. The Seers Tower - 3:53\n20. The Tallest Man the Broadest Shoulders - 7:02\n21. Riffs and Variations on a Single Note  - 0:46\n22. Out of Egypt into the Great Laugh of Mankind and I Shake the Dirt from My Sandals as I Run - 4:21"

4
ฉันคิดว่าคุณสามารถมี%dเวลาตอบโต้ชั่วโมง (ถ้าฉันเข้าใจกฎอย่างถูกต้อง!) สำหรับ-2!
Dom Hastings

เพิ่ม 4 ตัวอักษร ( inputถึงraw_input) เพื่อยอมรับรูปแบบที่แน่นอน; ไม่เช่นนั้นฉันเชื่อว่ามันไม่ถูกต้องเนื่องจากมันถือว่าบรรทัดในรูปแบบอื่น
RK

3

Gema, 151 ตัวอักษร

\B=@set{t;}
<D>. * - <D>\:<D>=(@div{$t;3600}:@fill-right{00;@div{@mod{$t;3600};60}}:@fill-right{00;@mod{$t;60}}) *@set{t;@add{@add{$t;$4};@mul{$3;60}}}

วิ่งตัวอย่าง:

bash-4.3$ gema '\B=@set{t;};<D>. * - <D>\:<D>=(@div{$t;3600}:@fill-right{00;@div{@mod{$t;3600};60}}:@fill-right{00;@mod{$t;60}}) *@set{t;@add{@add{$t;$4};@mul{$3;60}}}' tracklist.txt
(0:00:00) Concerning the UFO Sighting Near Highland Illinois
(0:02:08) The Black Hawk War
(0:04:22) Come On Feel the Illinoise
(0:11:07) John Wayne Gacy Jr
(0:14:26) Jacksonville
(0:19:50) A Short Reprise for Mary Todd Who Went Insane but for Very Good Reasons
(0:20:37) Decatur or Round of Applause for Your Stepmother
(0:23:40) One Last Whoo Hoo for the Pullman
(0:23:46) Chicago
(0:29:50) Casimir Pulaski Day

3

Python 2, 207 206 ไบต์

h=m=s=0
for i in raw_input().splitlines():
 print("(%d:%.2d:%.2d) "%(h,m,s),i.split('-')[0].split('. ')[1])
 t=i.split('-')[1].split(':')
 m+=int(t[0]);s+=int(t[1]);r=s//60;s-=r*60;m+=r;r=m//60;m-=r*60;h+=r

การใช้

$ python test.py
'1. Concerning the UFO Sighting Near Highland Illinois - 2:08\n2. The Black Hawk War - 2:14\n3. Come On Feel the Illinoise - 6:45'
(0:00:00) Concerning the UFO Sighting Near Highland Illinois 
(0:02:08) The Black Hawk War 
(0:04:22) Come On Feel the Illinoise 

คุณใช้ Python 3 รุ่นใด ฉันคิดว่าraw_inputมีอยู่ใน Python 2 เท่านั้น
ลินน์

คงที่ ฉันเดาว่าฉันคุ้นเคยกับการพิมพ์ "3" @Mauris
Zach Gates

1

awk, 119 101 ไบต์

{split($NF,t,":");$1=$(--NF)="";--NF;print"("substr(strftime("%H:%M:%S",s,1),2)")"$0;s+=t[1]*60+t[2]}

นี่เป็นวิธีที่นานกว่าที่ฉันต้องการ ปัญหาคือ%Hไม่จัดรูปแบบเวลาตามที่ต้องการดังนั้นฉันต้องคำนวณชั่วโมงเอง

ตอบฉันโง่ ผลลัพธ์ของstrftimeผิดเพราะฉันต้องบอกให้ใช้เวลา UTC นั่นตัดออกไป 18 ไบต์!

รุ่น 119 ไบต์

{split($NF,t,":");$1=$(--NF)="";--NF;print"("(h||0)":"strftime("%M:%S",s)")"$0;s=(r=s+t[1]*60+t[2])%3600;h=int(r/3600)}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.