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'

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.


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 )


14

Bash: 58 47 46 karakter

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

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


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.


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.


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!


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


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


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.


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

3

Ruby, 54 51 byte

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

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

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

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"

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


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.


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],",
"))

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


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

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.


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

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 .


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

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.


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 ?",":"")")}

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

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

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]}*",
"

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.


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.