Günün tüm zamanlarını yarım saatte listele


31

En kısa cevap kazanır.

Sıralanmalı ve 24 saat içinde. Son satırda virgül yok.

Çıktı aşağıdaki gibi olmalıdır:

'00:00',
'00:30',
'01:00',
'01:30',
'02:00',
'02:30',
'03:00',
'03:30',
'04:00',
'04:30',
'05:00',
'05:30',
'06:00',
'06:30',
'07:00',
'07:30',
'08:00',
'08:30',
'09:00',
'09:30',
'10:00',
'10:30',
'11:00',
'11:30',
'12:00',
'12:30',
'13:00',
'13:30',
'14:00',
'14:30',
'15:00',
'15:30',
'16:00',
'16:30',
'17:00',
'17:30',
'18:00',
'18:30',
'19:00',
'19:30',
'20:00',
'20:30',
'21:00',
'21:30',
'22:00',
'22:30',
'23:00',
'23:30'

6
Bu 24 saat mi? Lütfen çıktının tamamını sağlayabilir misiniz?
xnor

1
Çıktı sıralanmalı mı?
orlp

44
Ya programımın çalışması 23.5 saat sürerse?
tfitzger

9
Bunun neden olumsuz olacağını anlamıyorum.
Espen Schulstad

6
Upvotes hakkında sadece küçük bir öneri. Çaba gösterdiğim için küçük bir ödül olarak oluşturduğum bir mücadeleye verilen her geçerli cevabı yükseltmeye çalışıyorum. Çok fazla desteğim var ve burada gerçekten bir oyuna ihtiyacım yok, ama lütfen cevapları çok fazla düşünmeden ve hata ayıklamadan sonra göz ardı edilirse cevap vermekten vazgeçebilecek diğer cevaplayıcıları düşünün.
Mantık Şövalyesi

Yanıtlar:


17

Pyth, 26 bayt

Pjbm%"'%02d:%s0',"d*U24"03

Gösteri.

range(24)( U24) ' İn kartezyen çarpımı ile başlıyoruz "03".

Ardından, bu değerleri uygun dizgi biçimlendirme ( m%"'%02d:%s0',"d) ile eşleştiriyoruz .

Daha sonra, sonuç dizeleri newline karakterinde ( jb) birleştirilir.

Son olarak, takip eden virgül ( P) ' ü kaldırır ve yazdırırız.


1
Ödül için yeni bir yarışmacımız var gibi görünüyor. Pyth, neredeyse hile
yapıyor pyth

15

Befunge-93, 63 bayt

0>"'",:2/:55+/.55+%.":",:2%3*v
 ^,+55,","<_@#-*86:+1,"'".0. <

 

animation ( BefunExec ile yapılan animasyon )


14

Bash: 58 47 46 karakter

h=`echo \'{00..23}:{0,3}0\'`
echo "${h// /,
}"

Bu çözümü sevdim :)
Espen Schulstad 7:15

1
Anonim kullanıcı echo \'{00..23}:{0,3}0\'|sed 's/ /,\n/g'40 karakter önerdi . Güzel. Teşekkürler. Ama ben bashkendi gücünden faydalanmayı tercih ederim .
Manatwork

1
printf "'%s',\n" {00..23}:{0,3}0
izabera

@ manatwork oh soruyu iyi okumadım, üzgünüm ...
izabera

printf "'%s'\n" {00..23}:{0,3}0|sed $\!s/$/,/ 45 bayttır
izabera

10

CJam, 31 30 29 bayt

24,[U3]m*"'%02d:%d0',
"fe%~7<

Bu, printf formatını kullanarak oldukça basittir:

24,                              e# get the array 0..23
   [U3]                          e# put array [0 3] on stack
       m*                        e# do a cartesian product between 0..23 and [0 3] array
                                 e# now we have tuples like [[0 0], [0 3] ... ] etc
         "'%02d:%d0',
"fe%                             e# this is standard printf formatting. What we do here is
                                 e# is that we format each tuple on this string
    ~7<                          e# unwrap and remove comma and new line from last line
                                 e# by taking only first 7 characters

Burada çevrimiçi deneyin


Bu altın alacak gibi görünüyor.
Yarına

@ EspenSchulstad Keşke bana biraz altın verseydim. iç çekiş
Doktor

3
Unutma, bu sadece viritüel altın değil, aynı zamanda onur. Hayatta yaptıklarımız sonsuzlukta yankılanır.
Espen Schulstad

10

Python 2, 58 56 bayt

for i in range(48):print"'%02d:%s0',"[:57-i]%(i/2,i%2*3)

Gibi sentiao cevabı ancak kullanarak forvirgül kaldırmak için dilimleme ile döngü. İki baytı attığınız için @grc 'a teşekkür ederiz.


Bu işe "'%02d:%s0',"[:57-i]
yarar mı

Tabii ki @ grc Ahaha, bu çok daha iyi
Sp3000

Yapabildiğimden daha iyi!
Tim,

6

Java - 119 bayt

Java 8'in StringJoiner'ı ile başladım, ancak bu bir import ifadesi içeren anlamına gelir, bu yüzden eski yöntemi yapmaya karar verdim:

void f(){String s="";for(int i=0;i<24;)s+=s.format(",\n'%02d:00',\n'%02d:30'",i,i++);System.out.print(s.substring(2));}

Belki de bu, birden fazla oluşan Stringve Systemanahtar kelimelerden kurtulmak suretiyle iyileştirilebilir .


belki groovy bir sürümü :)
Espen Schulstad 7:15

Bunu 159'a kadar kısaltabilirsiniz: Önündeki boşluğu kaldırın, artışı ahareket ettirin, parantezleri kayın ve virgül / yeni çizgiyi başa taşıyın (bu şekilde daha kısa kullanmanıza ve kurtulmanıza izin verir ). İşlevlere varsayılan olarak izin verildiğinden, kazan plakasını ortadan kaldırarak daha da kısaltabilirsiniz: Eğer yazdırmak yerine sadece ipi döndürürseniz, birazcık daha bile olsa, bu mektuba değilse ruha aykırı görünüyor. iforsubstringlength()void f(){String s="";for(int i=0;i<24;)s+=String.format(",\n'%02d:00',\n'%02d:30'",i,i++);System.out.print(s.substring(2));}
Geobits

Kahretsin, bu harika! Bu numaralara dikkat etmeliyim, teşekkürler!
Sander

Ah, bir kaç: değişim String.formatiçin s.format. Derleyiciniz / IDE bundan şikayetçi olabilir, fakat işe yarıyor;)
Geobits

1
Güzel bir! biçim statik bir yöntemdir, bu nedenle sınıfına erişilmesi gerekir , ancak bu şekilde kullanılması da işe yarar !
Sander

5

Ruby, 94 61 56 51

$><<(0..47).map{|i|"'%02d:%02d'"%[i/2,i%2*30]}*",
"

@ Golf'e yardım ettiği için (tekrar) teşekkür ederim!


Bunu 61 bayta azaltabilirsiniz: puts (0..47).to_a.map{|h|"'%02d:%02d'"%[h/2,h%2*30]}.join","(son
virgülten

Tekrar teşekkürler! Gerçekten fazla
denemedim

Ruby'nin biraz sevgiye ihtiyacı var. 58 bayt;)puts Array.new(48){|i|"'%02d:%02d'"%[i/2,i%2*30]}.join','
blutorange

@blutorange @rcrmn yerine 4 bayt daha azaltabilir (ve aşağıdaki benim çözümüme :)) .join* :) ile
Tomáš Dundáček

5

Perl, 52 50 48 45B

$,=",
";say map<\\'$_:{0,3}0\\'>,"00".."23"

ThisSuitIsBlackNot :) 'ın yardımıyla


4

JAVA 95 94 bayt

Printf'nin Java'da var olduğu gerçeğini seviyorum:

void p(){for(int i=0;i<24;)System.out.printf("'%02d:00',\n'%02d:30'%c\n", i,i++,(i<24)?44:0);}

Ungolfed

void p(){
    for(int i=0;i<24;)
        System.out.printf("'%02d:00',\n'%02d:30'%c\n", i,i++,(i<24)?44:0);
}

EDIT değiştirildi. ',' ile44


24. kez {printf ("'% 02d: 00', \ n '% 02d: 30'% c \ n", bunu, (<<24)? 44: 0)} groovy :) aynı çözüm , sadece 65
chr'ye düştü

@EspenSchulstad Bağımsız bir işlev olarak mı kabul edilebilir, yoksa çalışması için gerekli olan başka bir kazan plakası var mı?
tfitzger

1
Groovy'niz varsa, bunu groovysh'de veya sadece bir .groovy dosyasındaki groovy komut dosyası olarak çalıştırabilirsiniz. o zaman hiçbir işleve ihtiyacınız yok.
Espen Schulstad


@EspenSchulstad İlginç. Groovy ile sadece çok az iş yaptım.
tfitzger

4

Pyth, 32 31 bayt

Python'da bir şeyler golf oynamıştım ancak Sp3000'in cevabıyla tamamen aynı olduğu ortaya çıktı. Bu yüzden Pyth'i denemeye karar verdim:

V48<%"'%02d:%d0',",/N2*3%N2-54N

Sp3000 cevabının tam bir çevirisi:

for i in range(48):print"'%02d:%d0',"[:57-i]%(i/2,i%2*3)

Bu ilk Pyth'e gitmem, lütfen beni 1 baytlık tasarruf hakkında aydınlat.


Güzel bitti ve Pyth'a hoş geldiniz.
isaacg

3

PHP, 109 bayt

foreach(new DatePeriod("R47/2015-05-07T00:00:00Z/PT30M")as$d)$a[]=$d->format("'H:i'");echo implode(",\n",$a);

3

Ruby, 54 51 bayt

puts (0..23).map{|h|"'#{h}:00',
'#{h}:30'"}.join",
"

1
\nGerçek yeni satırlara geçerek joinve ile arasındaki boşluğu kaldırarak 3 bayt azaltabilirsiniz ". Öte yandan, belirtilen çıkışın saatlerce başında sıfır olduğuna dikkat edin.
rorlork

Ayrıca değiştirerek biraz daha bayt puts için $><<(boşluk bırakmadan) ve.join ile *. Yine de, saatlerce önde gelen sıfır probleminiz var.
rorlork

3

C, 116 , 115 , 101 , 100 , 95 , 74 , 73 , 71

Bundan bir kaç bayt daha kazıyabilirsin ...

main(a){for(;++a<50;)printf("'%02d:%d0'%s",a/2-1,a%2*3,a<49?",\n":"");}

Tam bir program yerine bir işlev oluşturarak 3 bayt tasarruf edebilirsiniz. Sadece "main" ifadesini "f" ile değiştirin veya en sevdiğiniz harf neyse.
Bijan

Oh bu çok güzel bir öneri ..... her zaman unutuyorum!
Joshpbarron

3

T-SQL, 319 307 305 bayt

WITH t AS(SELECT t.f FROM(VALUES(0),(1),(2),(3),(4))t(f)),i AS(SELECT i=row_number()OVER(ORDER BY u.f,v.f)-1FROM t u CROSS APPLY t v),h AS(SELECT i,h=right('0'+cast(i AS VARCHAR(2)),2)FROM i WHERE i<24)SELECT''''+h+':'+m+CASE WHEN i=23AND m='30'THEN''ELSE','END FROM(VALUES('00'),('30'))m(m) CROSS APPLY h

Golfsüz versiyon:

WITH
t AS(
    SELECT
        t.f
    FROM(VALUES
         (0),(1),(2),(3),(4)
    )t(f)
),
i AS(
    SELECT
        i = row_number() OVER(ORDER BY u.f,v.f) - 1
    FROM t u 
    CROSS APPLY t v
),
h AS(
    SELECT
        i,
        h = right('0'+cast(i AS VARCHAR(2)),2)
    FROM i
    WHERE i<24
)
SELECT
    '''' + h + ':' + m + CASE WHEN i=23 AND m='30' 
                              THEN '' 
                              ELSE ',' 
                         END
FROM(
    VALUES('00'),('30')
)m(m)
CROSS APPLY h

2

Pyth, 34 bayt

j+\,bmjk[\'?kgd20Z/d2\:*3%d2Z\')48

Bu kesinlikle geliştirilebilir.

Çevrimiçi deneyin: Pyth Compiler / Executor

Açıklama:

     m                          48   map each d in [0, 1, ..., 47] to:
        [                      )       create a list with the elements:
         \'                              "'"
           ?kgd20Z                       "" if d >= 20 else 0
                  /d2                    d / 2
                     \:                  ":"
                       *3%d2             3 * (d%2)
                            Z            0
                             \'          "'"
      jk                               join by "", the list gets converted into a string
j+\,b                                join all times by "," + "\n"

Bu golf dilleriyle her zaman etkileyici :) Golf dışı bir dilde yapıldığında daha fazla takdir ediyorum. Örneğin, java için bir golf-jar-lib olup olmadığını bilen var mı?
Espen Schulstad

Cenova'nın zorunlu limanı 31: j+\,bm%"'%02d:%s0'",/d2*3%d2 48string formatlama ile verilir
Sp3000

2

Python 2,69 bayt

print',\n'.join(["'%02d:%s0'"%(h,m)for h in range(24)for m in'03'])

Oldukça açık, ama işte bir açıklama:

  • döngü için çift kullanarak
  • arasında değişen '0've '3'dize biçiminde bir liste daha kısadır
  • %02d için dolgu yapar h
  • mDeğişken karakter sabit bir pozisyonda olduğu için doldurmaya gerek yoktur
  • '\n'.join() final hattı gereksinimlerini çözer

Daha kısa sürede yapılabileceği hakkında hiçbir fikrim yok (Python 2'de).

Sp3000, 61 bayt: print',\n'.join("'%02d:%s0'"%(h/2,h%2*3)for h in range(48))


1
Nasıl yapılır:print',\n'.join("'%02d:%s0'"%(h/2,h%2*3)for h in range(48))
Sp3000

Mükemmel, Sp3000! (göndermelisiniz)
sentiao

1
Hayır, kitabımda yayınlayacak kadar farklı değil. Tek yaptığım köşeli parantezleri (sizin için bile gereksiz olan) düşürüp bırakmaktı m. (Ayrıca 59 bayt, 61 değil)
Sp3000

2

Haskell, 85 bayt

putStr$init$init$unlines$take 48['\'':w:x:':':y:"0',"|w<-"012",x<-['0'..'9'],y<-"03"]

Ne yazık ki printf19 bayt gerektirdiğinden import, kullanamıyorum.


2

Julia: 65 64 61 karakter

[@printf("'%02d:%d0'%s
",i/2.01,i%2*3,i<47?",":"")for i=0:47]

Julia: 64 karakter

(Julia'nın güzel forsözdizimini göstermek için burada kaldım .)

print(join([@sprintf("'%02d:%d0'",h,m*3)for m=0:1,h=0:23],",
"))

2

Fortran 96

do i=0,46;print'(a1,i2.2,a,i2.2,a2)',"'",i/2,":",mod(i,2)*30,"',";enddo;print'(a)',"'23:30'";end

Tiplerin ve gereksinimlerin standart olarak kötüye kullanılması, yalnızca endderleme finalinde . Ne yazık ki, örtük biçimlendirme nedeniyle '(a)', son printifadede gerekli. Yine de, C ve C ++ cevaplarından daha iyi;)


2

JavaScript (ES6), 77 86 + 1 bayt

Her satırda tırnak olması gerektiğinin farkında değildim (+1 -pdüğümü olan bayrak içindir):

"'"+Array.from(Array(48),(d,i)=>(i>19?"":"0")+~~(i/2)+":"+3*(i&1)+0).join("',\n'")+"'"

eski çözüm:

Array.from(Array(48),(d,i)=>~~(i/2).toFixed(2)+":"+3*(i&1)+"0").join(",\n")

ungolfed versiyonu (bunun yerine bir for döngüsü kullanarak Array.from):

var a = [];
// there are 48 different times (00:00 to 23:30)
for (var i = 0; i < 48; i++) {
    a[i] =
        (i > 19 ? "" : "0") +
            // just a ternary to decide whether to pad
            // with a zero (19/2 is 9.5, so it's the last padded number)
        ~~(i/2) +
            // we want 0 to 24, not 0 to 48
        ":" +  // they all then have a colon
        3*(i&1) +
            // if i is odd, it should print 30; otherwise, print 0
        "0" // followed by the last 0
}
console.log(a.join(",\n"));

72: Array.from(Array(48),(d,i)=>`'${i>19?"":0}${0|i/2}:${i%2*3}0'`).join`,\n`. \ N'yi gerçek bir yeni satırla değiştirin.
Mama Fun Roll

2

golflua 52 51 karakter

~@n=0,47w(S.q("'%02d:%d0'%c",n/2,n%2*3,n<47&44|0))$

Ascii 44 = ,ve 0 kullanarak boşluk karakter kaydeder.

Bir ungolfed Lua versiyonu olacak

for h=0,47 do
   print(string.format("'%02d:%d0'%c",h/2,h%2*3, if h<47 and 44 or 0))
end

Bu ififade üçlü operatöre çok benziyor a > b ? 44 : 0.


2

120 bayt

class P{static void Main(){for(var i=0;i<24;i++)System.Console.Write("'{0:00}:00',\n'{0:00}:30'{1}\n",i,i==23?"":",");}}

2

Python, 60 58 64 bayt

for i in range(24):print("'%02d:00,\n%02d:30'"%(i,i)+', '[i>22])

Ungolfed:

for i in range(24):
    if i <23:
        print( ('0'+str(i))[-2:] + ':00,\n' + str(i) + ':30,')
    else:
        print( ('0'+str(i))[-2:] + ':00,\n' + str(i) + ':30')

Burada çevrimiçi deneyin .


1
Neden 1 satıra koymuyorsun ve başka bir 2 bayt kaydet.
isaacg,

Bunun işe yaradığını sanmıyorum - saat başında lider sıfır yok.
isaacg,

1
@ isaacg düzeltildi!
Tim

Çıktı, orijinal sorudakiyle aynı değil.
sentiao

@sentiao farklı olan ne?
Tim


2

PHP, 69 70 62 bayt

for($x=-1;++$x<47;)printf("'%02d:%d0',
",$x/2,$x%2*3)?>'23:30'

Çevrimiçi deneyin

Çıktısı '23:30'ucunda biraz topal ve böylece kullanarak php bağlamı kapatıyor ?>açıklık ya da yeniden açmadan. Daha temiz bir alternatif (ancak 65 bayt):

for($x=-1;++$x<48;)printf("%s'%02d:%d0'",$x?",
":'',$x/2,$x%2*3);

Çevrimiçi deneyin

İpuçları için @Dennis teşekkür ederiz. Alternatif olarak @ ismael-miguel'in katkılarından ilham alınmıştır.


1
Programlama Bulmacaları ve Kod Golf'üne Hoşgeldiniz! Kodunuz sonunda boş bir bayt yazdırır. Buna izin verilip verilmediğinden emin değilim.
Dennis

@Dennis Teşekkürler, haklısın ... PHP'nin onu dizenin sonu olarak göreceğini varsaydım. Yeni bir sürüm gönderdi.
mk8374876

<?...?>'23:30'üç bayt kaydeder. Ayrıca, \ngerçek bir yeni satırla değiştirebilirsiniz .
Dennis

2

Swift, 74 bayt

Updated for Swift 2/3...and with new string interpolation...

for x in 0...47{print("'\(x<20 ?"0":"")\(x/2):\(x%2*3)0'\(x<47 ?",":"")")}

The final line is specified to not have a comma & your code prints it.
Kyle Kanos

1

Javascript, 89 bytes

for(i=a=[];i<24;)a.push((x="'"+("0"+i++).slice(-2))+":00'",x+":30'");alert(a.join(",\n"))

1
Quick question: how many arguments Array.push() supports? ;)
manatwork

You're right. That is a polyad. Thanks, I'll make that change after I finish testing my entry for another challenge.
SuperJedi224

A few more characters can be removed with some elementary reorganizations: for(i=a=[];i<24;)a.push((x=("0"+i++).slice(-2))+":00",x+":30");alert(a.join(",\n"))
manatwork

There, I fixed it.
SuperJedi224

That reuse of variable x is quite ugly coding habit. If you change the loop control variable to something else (as in my suggestion at 2015-05-07 15:28:25Z), then you can add the opening single quotes to x's value to reduce the two "'"+ pieces to one: for(i=a=[];i<24;)a.push((x="'"+("0"+i++).slice(-2))+":00'",x+":30'");alert(a.join(",\n"))
manatwork

1

Python 2: 64 bytes

print ',\n'.join(['%02d:00,\n%02d:30'%(h,h) for h in range(24)])

The output is not the same as in the original question.
sentiao

I don't know what happened to the edit I made. here is the correct version also 64 chars: print',\n'.join("'%02d:00',\n'%02d:30'"%(h,h)for h in range(24))
Alan Hoover

1

Ruby - 52 bytes

puts (0..47).map{|i|"'%02d:%02d'"%[i/2,i%2*30]}*",
"

This seems like my solution with just the change of the .join for *... It's common courtesy to instead of just posting a new answer with a minor improvement, to suggest the improvement to the original poster. See meta.codegolf.stackexchange.com/questions/75/…
rorlork

@rcrmn I agree I made a mistake and I apologize for it - should've had looked for other ruby answers first. Great work though in your answer with $><<!
Tomáš Dundáček

Don't worry about it, you are new here: I was advising you so that you could avoid this in the future.
rorlork

1

Python 2, 74 65 bytes

We generate a 2 line string for each hour, using text formatting:

print',\n'.join("'%02u:00',\n'%02u:30'"%(h,h)for h in range(24))

This code is fairly clear, but the clever indexing and integer maths in the answer by Sp3000 gives a shorter solution.


1
no reason to use formatting for 00 and 30, save 9 bytes with "'%02u:00',\n'%02u:30'"%(h,h)
DenDenDo

you could save some bytes by having too loops : print',\n'.join("'%02u:%02u'"%(h,i)for h in range(24)for i in[0,30])
dieter

Thanks DenDenDo. I used this to save some bytes. Dieter, I can see where your idea may help, but I could save more bytes with that idea from DenDenDo.
Logic Knight
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.