ทำรายการทุกครั้งในวันนี้ด้วยอัตราครึ่งชั่วโมง


31

คำตอบที่สั้นที่สุดชนะ

มันจะต้องถูกจัดเรียงและในเวลา 24 ชั่วโมง บรรทัดสุดท้ายไม่มีเครื่องหมายจุลภาค

ผลลัพธ์ควรเป็นดังนี้:

'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
24 ชั่วโมงนี้หรือไม่ คุณช่วยส่งออกทั้งหมดได้ไหม
xnor

1
ต้องเรียงลำดับผลลัพธ์หรือไม่
orlp

44
จะเป็นอย่างไรถ้าโปรแกรมของฉันใช้เวลา 23.5 ชั่วโมงในการรัน
tfitzger

9
ฉันไม่เห็นสาเหตุที่จะเป็นลบ
Espen Schulstad

6
เพียงข้อเสนอแนะเล็ก ๆ เกี่ยวกับ upvotes ฉันพยายาม upvote ทุกคำตอบที่ถูกต้องสำหรับความท้าทายที่ฉันสร้างขึ้นเป็นรางวัลเล็ก ๆ สำหรับความพยายาม ฉันมีตัวแทนจำนวนมากและไม่ต้องการ upvote ที่นี่จริงๆ แต่โปรดพิจารณาผู้ตอบคนอื่น ๆ ที่อาจยอมแพ้ถ้าคำตอบของพวกเขาถูกเพิกเฉยหลังจากการคิดอย่างหนักและการดีบัก
Logic Knight

คำตอบ:


17

Pyth, 26 ไบต์

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

สาธิต.

เราเริ่มต้นด้วยผลิตภัณฑ์คาร์ทีเซียนของrange(24)(U24 ) "03"กับสตริง

จากนั้นเราจับคู่ค่าเหล่านี้กับการแทนที่สตริงที่เหมาะสมในการจัดรูปแบบ (m%"'%02d:%s0',"d )

จากนั้นสตริงผลลัพธ์จะถูกรวมเข้ากับอักขระบรรทัดใหม่ (jb )

สุดท้ายเราลบเครื่องหมายจุลภาคต่อท้าย ( P) และพิมพ์


1
ดูเหมือนว่าเรามีคู่แข่งคนใหม่สำหรับรางวัล ผู้แต่ง pyth เกือบจะโกง;)
Espen Schulstad


14

Bash: 58 47 46 ตัวอักษร

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

ฉันชอบวิธีนี้ :)
Espen Schulstad

1
ผู้ใช้ที่ไม่ระบุชื่อแนะนำecho \'{00..23}:{0,3}0\'|sed 's/ /,\n/g'40 ตัวอักษร ดี ขอบคุณ แต่ฉันชอบที่จะใช้bashความแข็งแกร่งของตัวเอง
จัดการ

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

@manatwork โอ้ฉันไม่ได้อ่านคำถามที่ดีขอโทษ ...
izabera

printf "'%s'\n" {00..23}:{0,3}0|sed $\!s/$/,/ คือ 45 ไบต์
izabera

10

CJam, 31 30 29 ไบต์

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

สิ่งนี้ค่อนข้างตรงไปตรงมาโดยใช้การจัดรูปแบบ 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

ลองออนไลน์ได้ที่นี่


ดูเหมือนว่านี่จะเป็นทองคำ เราจะให้จนถึงวันพรุ่งนี้;)
Espen Schulstad

@EspenSchulstad ฉันหวังว่ามันจะให้ทองคำกับฉันจริงๆ ถอนหายใจ
เครื่องมือเพิ่มประสิทธิภาพ

3
โปรดจำไว้ว่ามันไม่เพียง แต่เป็นทองคำที่มีชีวิตชีวา แต่ยังให้เกียรติ สิ่งที่เราทำในชีวิตก้องในนิรันดร์
Espen Schulstad

10

Python 2, 58 56 ไบต์

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

เช่นเดียวกับคำตอบของ sentiaoแต่ใช้forloop โดยมีการแบ่งเพื่อลบเครื่องหมายจุลภาค ขอบคุณ @grc สำหรับการปิดสองไบต์


ใช้งานได้"'%02d:%s0',"[:57-i]
ไหม

@grc Ahaha แน่นอนว่าดีกว่ามาก
Sp3000

ดีกว่าที่ฉันสามารถทำได้!
ทิม

6

Java - 119 ไบต์

ฉันเริ่มต้นด้วย StringJoiner ของ Java 8 แต่นั่นหมายถึงการรวมคำสั่งการนำเข้าดังนั้นฉันจึงตัดสินใจทำแบบเก่า:

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

บางทีสิ่งนี้สามารถปรับปรุงได้โดยการกำจัดสิ่งที่เกิดขึ้นStringและSystemคำค้นหา


รุ่นใน Groovy บางที :)
Espen Schulstad

คุณสามารถย่อให้เหลือ 159: ลบช่องว่างออกก่อนaย้ายส่วนiเพิ่มลดforวงเล็บปีกกาและย้ายเครื่องหมายจุลภาค / ขึ้นบรรทัดใหม่ไปที่จุดเริ่มต้น (ซึ่งช่วยให้คุณใช้ช่องว่างที่สั้นลงsubstringและกำจัดได้length()) เนื่องจากฟังก์ชั่นอนุญาตตามค่าเริ่มต้นคุณสามารถทำให้มันสั้นลงได้โดยการกำจัด 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));}ยิ่งไปกว่านั้นถ้าคุณทำให้มันแค่คืนค่าสายแทนที่จะพิมพ์มัน แต่ดูเหมือนว่าจะขัดกับวิญญาณถ้าไม่ใช่ตัวอักษร
Geobits

ประณามนั่นยอดเยี่ยม! ฉันต้องจำกลเม็ดเหล่านั้นไว้ในใจขอบคุณ!
Sander

โอ้อีกไม่กี่: การเปลี่ยนแปลงไปString.format s.formatคอมไพเลอร์ / IDE ของคุณอาจบ่นเกี่ยวกับมัน แต่ใช้งานได้)
Geobits

1
ทำได้ดีนี่! รูปแบบของวิธีการคงที่ดังนั้นมันควรจะเข้าถึงได้โดยระดับ แต่จริง ๆ แล้วใช้วิธีนี้ได้ผล!
Sander

5

ทับทิม, 94 61 56 51 51

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

ขอบคุณ @blutorange (อีกครั้ง) สำหรับความช่วยเหลือของเขาในการเล่นกอล์ฟ!


คุณสามารถลดขนาดลงเหลือ 61 ไบต์: puts (0..47).to_a.map{|h|"'%02d:%02d'"%[h/2,h%2*30]}.join","(มีบรรทัดใหม่หลังจากเครื่องหมายจุลภาคสุดท้าย)
blutorange

ขอขอบคุณอีกครั้ง! ผมไม่ได้ลองมาก ...
rorlork

Ruby needs some love. 58 bytes ;) puts Array.new(48){|i|"'%02d:%02d'"%[i/2,i%2*30]}.join','
blutorange

@blutorange @rcrmn you can reduce 4 more bytes (and get to my solution below :)) ) by replacing .join with * :)
Tomáš Dundáček


4

JAVA 95 94 bytes

I love the fact that printf exists in Java:

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 Replaced the ',' with 44


24.times{printf("'%02d:00',\n'%02d:30'%c\n",it,it,(it<24)?44:0)}​ in groovy :) same solution, just that it's down to 65 chr
Espen Schulstad

@EspenSchulstad Would that be considered a standalone function, or is there other boilerplate that would be needed to get it to run?
tfitzger

1
If you have groovy, you could either run that in groovysh or just as a groovy script in a .groovy-file. then you don't need no function.
Espen Schulstad


@EspenSchulstad Interesting. I've only done minimal work with Groovy.
tfitzger

4

Pyth, 32 31 bytes

I golfed something in python but it turned out to be exactly the same as Sp3000's answer. So I decided to give Pyth a try:

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

It's a exact translation of Sp3000 answer:

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

It's my first go at Pyth, so please do enlighten me about that 1 byte saving.


Nicely done, and welcome to Pyth.
isaacg


3

Ruby, 54 51 bytes

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

1
You can reduce 3 bytes by changing \n to actual newlines and removing the space between join and ". On the other hand, take note that the specified output has leading zeros for the hours.
rorlork

Also, some more bytes by changing puts to $><< (without space) and .join with *. You still have the leading zero problem for the hours, though.
rorlork

3

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

May be able to scrape a few more bytes off this...

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

You can save 3 bytes by creating a function rather than a complete program. Just replace "main" with "f", or whatever your favourite letter is.
Bijan

Oh thats a very nice suggestion.....one I always forget!
Joshpbarron

3

T-SQL, 319 307 305 bytes

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

Un-golfed version:

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 bytes

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

This can definitely be improved.

Try it online: Pyth Compiler/Executor

Explanation:

     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"

Always impressive with these golfing languages :) I do somehow appreciate it more when it's done in a non-golfing language. Does anyone know if there is a golf-jar-lib to java for instance?
Espen Schulstad

Obligatory port of sentiao's gives 31: j+\,bm%"'%02d:%s0'",/d2*3%d2 48 with string formatting
Sp3000

2

Python 2, 69 bytes

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

Quite obvious, but here's an explanation:

  • using double-for-loop
  • alternating between '0' and '3' in string format is shorter than a list
  • %02d does the padding for h
  • mdoesn't need padding as the alternating character is on a fixed position
  • '\n'.join() solves the final-line requirements

I have no idea if it can be done shorter (in Python 2).

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


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

Brilliant, Sp3000! (you should post it)
sentiao

1
Nah, not different enough to post in my book. All I did was drop the square brackets (which are unnecessary even in your one) and drop m. (Also it's 59 bytes, not 61)
Sp3000

2

Haskell, 85 bytes

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

Unfortunately printf requires a 19 byte import, so I cannot use it.


2

Julia: 65 64 61 characters

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

Julia: 64 characters

(Kept here to show Julia's nice for syntax.)

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

Standard abuse of types & requirement only for the final end for compiling. Sadly, due to implicit formatting, the '(a)' in the final print statement is required. Still, better than the C and C++ answers ;)


2

JavaScript (ES6), 77 86+1 bytes

Didn't realize there had to be quotes on each line (+1 is for -p flag with node):

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

old solution:

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

ungolfed version (using a for loop instead of 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`. Replace \n with an actual newline.
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))$

Using ascii 44 = , and 0 a space saves a character.

An ungolfed Lua version would be

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 if statement is much like the ternary operator a > b ? 44 : 0.



2

Python, 60 58 64 bytes

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

Try it online here.


1
Why not put it on 1 line, and save another 2 bytes.
isaacg

I don't think this works - no leading zero on the hour.
isaacg

1
@isaacg fixed that!
Tim

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

@sentiao what is different?
Tim


2

PHP, 69 70 62 bytes

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

Try it online

Outputting '23:30' at the end is a bit lame, and so is closing the php context using ?> without opening or re-opening it. An cleaner alternative (but 65 bytes) would be:

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

Try it online

Thank you @Dennis for the tips. Alternative inspired by the contribution of @ismael-miguel.


1
Welcome to Programming Puzzles & Code Golf! Your code prints a null byte at the end. I'm not sure if that is allowed.
Dennis

@Dennis Thank you, you're right... I assumed PHP would see it as end-of-string. Posted a new version.
mk8374876

<?...?>'23:30' saves three bytes. Also, you can replace \n with an actual newline.
Dennis


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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.