Zaman tablolarına göre listeleri izleyin


25

Giriş

Birisi YouTube'a sevdiğiniz bir albüm yüklediğinde nefret etmiyor musunuz, ancak açıklama yalnızca bir parça listesi içeriyor mu? Bunun gibi:

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

Şimdi, kafanızda bir kaç kez toplamıyorsanız Sabah Zili'nin ne zaman başladığını bilmiyorsunuz ! Genellikle, iyi bir ruh gelir ve şöyle bir şeye benzeyen (korkunç) yorumlar bölümünde kullanışlı bir zaman çizelgesi bırakır :

(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

Şartname

  • Göreviniz, girdi olarak bir giriş listesi ve çıktı olarak bir zaman çizelgesi alan bir program veya işlev yazmaktır.

    • Girdileri STDIN'den, argüman dizgisinden veya satırların argüman listesinden okumayı seçebilirsiniz. Benzer şekilde, çıktıyı STDOUT'a yazdırmayı veya bir dize döndürmeyi ya da satır listesini döndürmeyi seçebilirsiniz. Bunları geçememek, diliniz için anlamlı olanı yapın.
  • Her giriş satırının formatta olduğunu varsayabilirsiniz (\d+)\. [A-Za-z0-9 ]{1,100} - (\d+):(\d\d). Regex engelli için, bu esasen, her satırın iyi biçimlendirildiğini (yukarıdaki gibi) ve şarkı başlıklarının yalnızca alfanümerik ASCII karakterlerinden ve boşluklarından oluştuğunu ve 100 bayttan daha uzun olmadığını varsayabileceğiniz anlamına gelir .

  • Bir parçanın uzunluğu her zaman en az 0:01ve en fazla değildir 59:59.
  • Parça numaraları sırasını arttırıyor, baştan başlıyor 1ve sayılmıyor 99.
  • Bir albümün toplam uzunluğu bundan fazla değil 9:59:59.

Bu , yani en kısa kod (bayt cinsinden) kazanır.

Test durumu

Programınız giriş bölümünde sunulan dönüşümü doğru şekilde yapmalıdır (Radiohead's Kid A ). Programınızın üzerinde çalışması gereken uzun dizelerle daha büyük bir test senaryosu (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

Doğru çıktı:

(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

Liderler Sıralaması

Puanınızın tahtada görünmesi için, bu biçimde olması gerekir:

# Language, Bytes

1. İnanılmaz iz isimleri ile bu problemin sınırlı olduğu basit formata uyması için biraz uğraşmak zorunda kaldığım Sufjan'dan özür dilerim.


Çıktı sondaki boşlukları içerebilir mi?
Martin Ender

1
Radiohead ve Sufjan Stevens? Meh :-P
Luis Mendo

Hayır; Her satırın formatını (h:mm:ss) Track Namehemen yeni bir satır takip edin.
Lynn

@LuisMendo Cevabınızdaki üstün müzik zevklerinizi göstermek için çekinmeyin ...?
Lynn

Hahaha. Cevap vermek için iyi bir motivasyon. BTW Ben meydan okumayı sevdim ve onu yendim
Luis Mendo

Yanıtlar:


12

CJam, 60 57 55 bayt

2 bayt tasarrufu için Sp3000'e teşekkürler.

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

Burada test et.

açıklama

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
kahretsin Martin
cjfaure

6

Perl, (93 karakter artı -p) 94 bayt

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

Koşmak:

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 bayt

C ++ çünkü .. neden olmasın?

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

Canlı: 212 209 202 189


5

Python 2, 170 160 Bayt

Bir süredir golf oynadım, umarım bu fena değil: 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])

Girdi, tırnak işaretleri içine alınmalı ve aşağıdaki gibi yeni satırlara bölünmelidir:

"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
Sanırım sadece %dsaat sayacını alabilirsin (kuralları doğru anlarsam!) -2!
Dom Hastings

Ekle 4 karakter ( inputiçin raw_input) tam biçimini kabul etmek; Aksi halde satırları farklı bir biçimde kabul ettiği için geçersiz olduğuna inanıyorum.
RK.

3

Gema, 151 karakter

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

Örnek çalışma:

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 bayt

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

kullanım

$ 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'ün hangi sürümünü kullanıyorsunuz? raw_inputSadece Python 2'de var olduğunu düşündüm .
Lynn

Sabit. Sanırım sadece "3" yazmaya alışkınım. @Mauris
Zach Gates,

1

awk, 119 101 bayt

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

Bu yolu ben olmak istedim daha uzun. Sorun şu ki %H, talep edilen saatleri biçimlendirmiyor, bu yüzden saati kendim hesaplamam gerekiyordu.

Ack, ben aptalım. Sonuçları strftimeyanlıştı çünkü UTC zamanını kullanmam gerektiğini söylemeliydim. Bu 18 bayt kesti!

119 bayt sürümü

{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)}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.