Theo dõi danh sách theo bảng thời gian


25

Giới thiệu

Bạn không ghét nó khi ai đó tải lên album bạn thích lên YouTube, nhưng mô tả chỉ chứa danh sách bản nhạc ? Như thế này:

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

Bây giờ bạn không biết khi nào Morning Bell bắt đầu trừ khi bạn tổng hợp rất nhiều lần trong đầu! Thông thường, một số linh hồn tốt sẽ đến và để lại một bảng thời gian tiện dụng trong phần bình luận (sợ hãi), trông giống như thế này:

(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

Đặc điểm kỹ thuật

  • Nhiệm vụ của bạn là viết một chương trình hoặc chức năng lấy danh sách theo dõi làm đầu vào và bảng thời gian làm đầu ra.

    • Bạn có thể chọn đọc đầu vào từ STDIN hoặc chuỗi đối số hoặc danh sách các dòng đối số. Tương tự, bạn có thể chọn in đầu ra sang STDOUT, hoặc trả về một chuỗi hoặc trả về danh sách các dòng. Thất bại những điều này, làm bất cứ điều gì có ý nghĩa cho ngôn ngữ của bạn.
  • Bạn có thể giả sử mỗi dòng đầu vào có định dạng (\d+)\. [A-Za-z0-9 ]{1,100} - (\d+):(\d\d). Đối với người khuyết tật regex, điều này về cơ bản có nghĩa là bạn có thể giả sử mỗi dòng được định dạng tốt (như trên) và tiêu đề bài hát chỉ bao gồm các ký tự và ký tự ASCII chữ và số , và không dài hơn 100 byte.

  • Độ dài của một bản nhạc luôn luôn ít nhất 0:01và không nhiều hơn 59:59.
  • Các số lượng theo dõi đang tăng thứ tự, bắt đầu từ 1, và đếm lên không quá 99.
  • Tổng chiều dài của một album không quá 9:59:59.

Đây là , vì vậy mã ngắn nhất (tính bằng byte) sẽ thắng.

Trường hợp thử nghiệm

Chương trình của bạn sẽ thực hiện chính xác chuyển đổi được trình bày trong phần giới thiệu (Radiohead's Kid A ). Đây là một trường hợp thử nghiệm lớn hơn (Sufjan Stevens ' Illinois 1 ) với chuỗi dài mà chương trình của bạn cũng sẽ hoạt động:

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

Đầu ra chính xác là:

(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

Bảng xếp hạng

Để điểm số của bạn xuất hiện trên bảng, nó phải ở định dạng này:

# Language, Bytes

1. Xin lỗi Sufjan, người có tên bài hát tuyệt vời mà tôi đã phải đọc lại một chút để làm cho chúng phù hợp với định dạng đơn giản mà vấn đề này bị giới hạn.


Đầu ra có thể chứa dấu cách không?
Martin Ender

1
Radiohead và Sufjan Stevens? Meh :-P
Luis Mendo

Không; định dạng cho mỗi dòng là (h:mm:ss) Track Name, theo sau là một dòng mới.
Lynn

@LuisMendo Hãy thoải mái thể hiện thị hiếu âm nhạc vượt trội của bạn trong câu trả lời của bạn ...?
Lynn

Hahaha. Đó là một động lực bổ sung tốt để trả lời. BTW Tôi thích thử thách và tôi đã nâng cấp nó
Luis Mendo

Câu trả lời:


12

CJam, 60 57 55 byte

Cảm ơn Sp3000 đã lưu 2 byte.

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

Kiểm tra nó ở đây.

Giải trình

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
chết tiệt Martin
cjfaure

6

Perl, (93 ký tự cộng -p) 94 byte

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

Chạy:

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 byte

C ++ vì .. tại sao không?

#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;}}

Trực tiếp: 212 209 202 189


5

Python 2, 170 160 byte

Đã được một thời gian kể từ khi tôi chơi golf, hy vọng điều này không quá tệ: 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])

Đầu vào phải được bao quanh bởi dấu ngoặc kép và phân chia theo dòng mới, như vậy:

"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
Tôi nghĩ bạn chỉ có thể có %dbộ đếm giờ (nếu tôi hiểu chính xác các quy tắc!) Cho -2!
Dom Hastings

Thêm 4 ký tự ( inputđến raw_input) để chấp nhận định dạng chính xác; mặt khác, tôi tin rằng nó không hợp lệ vì nó giả sử các dòng ở định dạng khác.
RK.

3

Gema, 151 ký tự

\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}}}

Chạy mẫu:

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 byte

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

Sử dụng

$ 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 

Phiên bản Python 3 nào bạn đang sử dụng? Tôi nghĩ raw_inputchỉ tồn tại trong Python 2.
Lynn

Đã sửa. Tôi đoán tôi chỉ quen gõ "3". @Mauris
Zach Gates

1

ôi, 119 101 byte

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

Đây là cách lâu hơn tôi muốn nó được. Vấn đề là %Hkhông định dạng giờ như yêu cầu, vì vậy tôi cần tự tính toán số giờ.

À, tôi thật ngốc. Kết quả strftimelà sai vì tôi cần bảo nó sử dụng thời gian UTC. Điều đó đã cắt giảm 18 byte!

Phiên bản 119 byte

{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)}
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.