Daftarkan semua waktu dalam sehari dengan tarif setengah jam

31

Jawaban terpendek menang.

Itu harus disortir, dan dalam 24 jam. Baris terakhir tidak memiliki koma.

Output harus sebagai berikut:

'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'
Espen Schulstad
sumber
6
Apakah ini waktu 24 jam? Bisakah Anda memberikan seluruh output?
xnor
1
Haruskah output diurutkan?
orlp
44
Bagaimana jika program saya berjalan 23,5 jam?
tfitzger
9
Saya tidak mengerti mengapa itu negatif.
Espen Schulstad
6
Hanya sedikit saran tentang upvotes. Saya mencoba memvotasikan setiap jawaban yang valid untuk tantangan yang saya buat sebagai hadiah kecil untuk mengambil upaya. Saya punya banyak perwakilan dan tidak benar-benar membutuhkan upvote di sini, tapi tolong pertimbangkan penjawab lain yang mungkin menyerah merespons jika jawaban mereka diabaikan setelah banyak berpikir keras dan men-debug.
Logic Knight

Jawaban:

17

Pyth, 26 byte

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

Demonstrasi.

Kita mulai dengan produk cartesian dari range(24)( U24) dengan string "03".

Kemudian, kami memetakan nilai-nilai ini ke subtitusi formating string yang sesuai ( m%"'%02d:%s0',"d).

Kemudian, string yang dihasilkan digabungkan pada karakter baris baru ( jb).

Akhirnya, kami menghapus tanda koma ( P) dan mencetak.

isaacg
sumber
1
Sepertinya kami memiliki pesaing baru untuk hadiah. Penulis pyth, itu hampir curang;)
Espen Schulstad
15

Befunge-93, 63 byte

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

 

animasi (Animasi dibuat dengan BefunExec )

Mikescher
sumber
14

Bash: 58 47 46 karakter

h=`echo \'{00..23}:{0,3}0\'`
echo "${h// /,
}"
manatwork
sumber
Saya suka solusi ini :)
Espen Schulstad
1
Pengguna anonim disarankan echo \'{00..23}:{0,3}0\'|sed 's/ /,\n/g'40 karakter. Bagus. Terima kasih. Tapi saya lebih suka memanfaatkan bashkekuatan sendiri.
manatwork
1
printf "'%s',\n" {00..23}:{0,3}0
izabera
@manatwork oh saya tidak membaca pertanyaan dengan baik, maaf ...
izabera
printf "'%s'\n" {00..23}:{0,3}0|sed $\!s/$/,/ adalah 45 byte
izabera
10

CJam, 31 30 29 byte

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

Ini sangat mudah menggunakan format printf:

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

Cobalah online di sini

Pengoptimal
sumber
Sepertinya ini akan mengambil emas. Kami akan memberikannya sampai besok;)
Espen Schulstad
@EspenSchulstad Saya berharap itu benar-benar akan memberi saya beberapa emas. desah
Pengoptimal
3
Ingat, ini bukan hanya emas viritual, tetapi juga kehormatan. Apa yang kita lakukan dalam hidup gema dalam kekekalan.
Espen Schulstad
10

Python 2, 58 56 byte

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

Seperti jawaban sentiao tetapi menggunakan forlingkaran, dengan irisan untuk menghapus koma. Terima kasih kepada @grc untuk merobohkan dua byte.

Sp3000
sumber
Apakah ini bekerja:"'%02d:%s0',"[:57-i]
grc
@ grc Ahaha tentu saja, itu jauh lebih baik
Sp3000
Lebih baik daripada yang bisa saya lakukan!
Tim
6

Java - 119 byte

Saya mulai dengan StringJoiner Java 8, tetapi itu berarti termasuk pernyataan impor, jadi saya memutuskan untuk melakukannya dengan cara lama:

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

Mungkin ini dapat ditingkatkan dengan menyingkirkan beberapa occuring Stringdan Systemkata kunci.

Sander
sumber
versi di groovy mungkin :)
Espen Schulstad
Anda dapat mempersingkat ini menjadi 159: Hapus spasi sebelumnya a, pindahkan ikenaikan, kehilangan forkawat gigi, dan pindahkan koma / baris baru ke awal (yang memungkinkan Anda menggunakan yang lebih pendek substringdan menyingkirkan length()). Karena fungsi diperbolehkan secara default, Anda bisa membuatnya lebih pendek dengan menghilangkan boilerplate: 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));}Bahkan sedikit lebih banyak jika Anda membuatnya hanya mengembalikan string daripada mencetaknya, tetapi itu tampaknya bertentangan dengan semangat, jika bukan hurufnya.
Geobits
Sial, itu brilian! Aku harus mengingat semua trik itu, terima kasih!
Sander
Oh, beberapa lagi: ganti String.formatke s.format. Kompiler / IDE Anda mungkin mengeluh tentang hal itu, tetapi berhasil;)
Geobits
1
Yang bagus! format adalah metode statis, jadi harus diakses oleh kelasnya, tetapi memang, menggunakannya dengan cara ini juga berfungsi!
Sander
5

Ruby, 94 61 56 51

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

Terima kasih kepada @blutorange (lagi) untuk bantuannya dalam bermain golf!

rorlork
sumber
Anda dapat menguranginya menjadi 61 byte: puts (0..47).to_a.map{|h|"'%02d:%02d'"%[h/2,h%2*30]}.join","(ada baris baru setelah koma terakhir)
blutorange
Terima kasih lagi! Saya benar-benar tidak mencobanya banyak ...
rorlork
Ruby membutuhkan cinta. 58 bytes;)puts Array.new(48){|i|"'%02d:%02d'"%[i/2,i%2*30]}.join','
blutorange
@blutorange @rcrmn Anda dapat mengurangi 4 byte lebih banyak (dan mendapatkan solusi saya di bawah ini :))) dengan mengganti .joindengan *:)
Tomáš Dundáček
5

Perl, 52 50 48 45B

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

Dengan bantuan dari ThisSuitIsBlackNot :)

alexander-brett
sumber
4

JAVA 95 94 byte

Saya suka fakta bahwa printf ada di Jawa:

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

Tidak disatukan

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 Mengganti ','dengan44

tfitzger
sumber
24. kali {printf ("'% 02d: 00', \ n '% 02d: 30'% c \ n", itu, itu, (itu <24)? 44: 0)} di groovy :) solusi yang sama , hanya saja turun ke 65 chr
Espen Schulstad
@EspenSchulstad Apakah itu dianggap sebagai fungsi yang berdiri sendiri, atau adakah platplate lain yang diperlukan untuk menjalankannya?
tfitzger
1
Jika Anda memiliki groovy, Anda bisa menjalankannya di groovysh atau hanya sebagai skrip groovy dalam file .groovy. maka Anda tidak perlu fungsi.
Espen Schulstad
@EspenSchulstad Menarik. Saya hanya melakukan pekerjaan minimal dengan Groovy.
tfitzger
4

Pyth, 32 31 byte

Saya golf sesuatu dengan python tetapi ternyata persis sama dengan jawaban Sp3000. Jadi saya memutuskan untuk mencoba Pyth:

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

Ini adalah terjemahan tepat dari jawaban Sp3000:

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

Ini pertama kalinya saya pergi di Pyth, jadi tolong beri tahu saya tentang penghematan 1 byte itu.

Def
sumber
Bagus sekali, dan selamat datang di Pyth.
isaacg
3

PHP, 109 byte

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

Ruby, 54 51 byte

puts (0..23).map{|h|"'#{h}:00',
'#{h}:30'"}.join",
"
golgappa
sumber
1
Anda dapat mengurangi 3 byte dengan mengubah \nke baris baru yang sebenarnya dan menghapus ruang antara joindan ". Di sisi lain, perhatikan bahwa output yang ditentukan memiliki nol di depan untuk jam.
rorlork
Juga, beberapa byte lagi dengan mengubah puts ke $><<(tanpa spasi) dan.join dengan *. Anda masih memiliki nol masalah utama selama berjam-jam.
rorlork
3

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

Mungkin dapat mengikis beberapa byte lagi dari ini ...

main(a){for(;++a<50;)printf("'%02d:%d0'%s",a/2-1,a%2*3,a<49?",\n":"");}
Joshpbarron
sumber
Anda dapat menyimpan 3 byte dengan membuat fungsi daripada program yang lengkap. Cukup ganti "main" dengan "f", atau apa pun huruf favorit Anda.
Bijan
Oh itu saran yang sangat bagus ..... yang saya selalu lupa!
Joshpbarron
3

T-SQL, 319 307 305 byte

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

Versi tidak golf:

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
Pieter Geerkens
sumber
2

Pyth, 34 byte

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

Ini pasti bisa diperbaiki.

Cobalah online: Pyth Compiler / Executor

Penjelasan:

     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"
Jakube
sumber
Selalu mengesankan dengan bahasa-bahasa golf ini :) Saya entah bagaimana lebih menghargainya ketika dilakukan dalam bahasa non-golf. Apakah ada yang tahu jika ada golf-jar-lib ke java misalnya?
Espen Schulstad
Port wajib dari sentiao memberi 31: j+\,bm%"'%02d:%s0'",/d2*3%d2 48dengan pemformatan string
Sp3000
2

Python 2, 69 byte

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

Cukup jelas, tapi inilah penjelasannya:

  • menggunakan double-for-loop
  • bergantian antara '0'dan '3'dalam format string lebih pendek dari daftar
  • %02d apakah padding untuk h
  • mtidak perlu padding karena karakter bolak-balik berada pada posisi tetap
  • '\n'.join() menyelesaikan persyaratan garis akhir

Saya tidak tahu apakah itu bisa dilakukan lebih pendek (dengan Python 2).

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

sentiao
sumber
1
Bagaimana dengan:print',\n'.join("'%02d:%s0'"%(h/2,h%2*3)for h in range(48))
Sp3000
Cemerlang, Sp3000! (Anda harus mempostingnya)
sentiao
1
Nah, tidak cukup berbeda untuk memposting di buku saya. Yang saya lakukan adalah menjatuhkan tanda kurung (yang tidak perlu bahkan dalam Anda) dan drop m. (Juga 59 byte, bukan 61)
Sp3000
2

Haskell, 85 byte

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

Sayangnya printfmembutuhkan 19 byte import, jadi saya tidak bisa menggunakannya.

nimi
sumber
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

(Tetap di sini untuk menunjukkan forsintaks yang bagus dari Julia .)

print(join([@sprintf("'%02d:%d0'",h,m*3)for m=0:1,h=0:23],",
"))
manatwork
sumber
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

Penyalahgunaan standar jenis & persyaratan hanya untuk final enduntuk dikompilasi. Sayangnya, karena pemformatan implisit, pernyataan '(a)'final printdiperlukan. Namun, lebih baik daripada jawaban C dan C ++;)

Kyle Kanos
sumber
2

JavaScript (ES6), 77 86 +1 byte

Tidak menyadari harus ada tanda kutip di setiap baris (+1 untuk -pflag dengan simpul):

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

solusi lama:

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

versi ungolfed (menggunakan for for bukannya 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"));
royhowie
sumber
72: Array.from(Array(48),(d,i)=>`'${i>19?"":0}${0|i/2}:${i%2*3}0'`).join`,\n`. Ganti \ n dengan baris baru yang sebenarnya.
Mama Fun Roll
2

golflua 52 51 chars

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

Menggunakan ascii 44 = , dan 0 a spasi menyimpan karakter.

Versi Lua ungolfed akan menjadi

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

The ifPernyataan jauh seperti operator ternary a > b ? 44 : 0.

Kyle Kanos
sumber
2

C # - 120 byte

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?"":",");}}
Berend
sumber
2

Python, 60 58 64 byte

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

Tidak Disatukan:

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')

Cobalah online di sini .

Tim
sumber
1
Mengapa tidak meletakkannya di 1 baris, dan simpan 2 byte lagi.
isaacg
Saya tidak berpikir ini berhasil - tidak ada angka nol di awal jam.
isaacg
1
@isaacg memperbaikinya!
Tim
Outputnya tidak sama dengan pertanyaan aslinya.
sentiao
@sentiao apa yang berbeda?
Tim
2

𝔼𝕊𝕄𝕚𝕟, 39 karakter / 67 byte (tidak bersaing)

↺;Ḁ⧺<Ḱ;)ᵖ`'⦃Ḁ<Ḕ?0:⬯}⦃0|Ḁ/2}:⦃Ḁ%2*3}0',”

Try it here (Firefox only).

Tidak ada karakter alfabet tunggal yang terlihat ...

Mama Fun Roll
sumber
2

PHP, 69 70 62 byte

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

Cobalah online

Mengeluarkan '23:30'pada akhirnya agak timpang, dan begitu juga menutup konteks php menggunakan ?>tanpa membuka atau membukanya kembali. Alternatif yang lebih bersih (tetapi 65 byte) adalah:

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

Cobalah online

@Dennis terima kasih untuk tipsnya. Alternatif terinspirasi oleh kontribusi @ ismael-miguel.

mk8374876
sumber
1
Selamat Datang di Programming Puzzles & Code Golf! Kode Anda mencetak byte nol di bagian akhir. Saya tidak yakin apakah itu diizinkan.
Dennis
@ Dennis Terima kasih, Anda benar ... Saya berasumsi PHP akan melihatnya sebagai end-of-string. Diposting versi baru.
mk8374876
<?...?>'23:30'menghemat tiga byte. Anda juga dapat mengganti \ndengan baris baru yang sebenarnya.
Dennis
2

Swift, 74 byte

Diperbarui untuk Swift 2/3 ... dan dengan interpolasi string baru ...

for x in 0...47{print("'\(x<20 ?"0":"")\(x/2):\(x%2*3)0'\(x<47 ?",":"")")}
GoatInTheMachine
sumber
Baris terakhir ditentukan untuk tidak memiliki koma & kode Anda mencetaknya.
Kyle Kanos
1

Javascript, 89 byte

for(i=a=[];i<24;)a.push((x="'"+("0"+i++).slice(-2))+":00'",x+":30'");alert(a.join(",\n"))
SuperJedi224
sumber
1
Pertanyaan cepat: berapa banyak argumen yang Array.push()didukung? ;)
manatwork
Kamu benar. Itu adalah polyad. Terima kasih, saya akan melakukan perubahan itu setelah saya selesai menguji entri saya untuk tantangan lain.
SuperJedi224
Beberapa karakter lagi dapat dihapus dengan beberapa reorganisasi dasar:for(i=a=[];i<24;)a.push((x=("0"+i++).slice(-2))+":00",x+":30");alert(a.join(",\n"))
manatwork
Di sana, saya memperbaikinya.
SuperJedi224
Penggunaan kembali variabel x adalah kebiasaan pengkodean yang buruk. Jika Anda mengubah variabel kontrol loop ke sesuatu yang lain (seperti dalam saran saya di 2015-05-07 15: 28: 25Z), maka Anda dapat menambahkan tanda kutip tunggal pembukaan ke nilai x untuk mengurangi dua "'"+bagian menjadi satu:for(i=a=[];i<24;)a.push((x="'"+("0"+i++).slice(-2))+":00'",x+":30'");alert(a.join(",\n"))
manatwork
1

Python 2: 64 byte

print ',\n'.join(['%02d:00,\n%02d:30'%(h,h) for h in range(24)])
Alan Hoover
sumber
Outputnya tidak sama dengan pertanyaan aslinya.
sentiao
Saya tidak tahu apa yang terjadi pada hasil edit yang saya buat. di sini adalah versi yang benar juga 64 karakter:print',\n'.join("'%02d:00',\n'%02d:30'"%(h,h)for h in range(24))
Alan Hoover
1

Ruby - 52 byte

puts (0..47).map{|i|"'%02d:%02d'"%[i/2,i%2*30]}*",
"
Tomáš Dundáček
sumber
Ini sepertinya solusi saya dengan hanya perubahan .joinuntuk *... Ini adalah kesopanan yang umum untuk bukan hanya memposting jawaban baru dengan sedikit perbaikan, untuk menyarankan perbaikan pada poster aslinya. Lihat meta.codegolf.stackexchange.com/questions/75/…
rorlork
@ rrmn Saya setuju saya melakukan kesalahan dan saya minta maaf untuk itu - seharusnya mencari jawaban ruby ​​lainnya terlebih dahulu. Kerja bagus meskipun dalam jawaban Anda dengan $><<!
Tomáš Dundáček
Jangan khawatir tentang hal itu, Anda baru di sini: saya menasihati Anda sehingga Anda dapat menghindari ini di masa depan.
rorlork
1

Python 2, 74 65 byte

Kami menghasilkan string 2 baris untuk setiap jam, menggunakan pemformatan teks:

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

Kode ini cukup jelas, tetapi pengindeksan cerdas dan bilangan bulat matematika dalam jawaban oleh Sp3000 memberikan solusi yang lebih pendek.

Ksatria Logika
sumber
1
tidak ada alasan untuk menggunakan format untuk 00 dan 30, simpan 9 byte dengan"'%02u:00',\n'%02u:30'"%(h,h)
DenDenDo
Anda bisa menghemat beberapa byte dengan memiliki terlalu banyak loop: print',\n'.join("'%02u:%02u'"%(h,i)for h in range(24)for i in[0,30])
dieter
Terima kasih DenDenDo. Saya menggunakan ini untuk menyimpan beberapa byte. Dieter, saya bisa melihat di mana ide Anda dapat membantu, tapi saya bisa menghemat lebih banyak byte dengan ide itu dari DenDenDo.
Logic Knight