하루 중 시간을 반 시간 비율로 나열


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 2016 년

9
왜 부정적인지 알 수 없습니다.
Espen Schulstad

6
공감에 대한 작은 제안. 나는 노력에 대한 작은 보상으로 내가 만든 도전에 대한 모든 유효한 답변을지지하려고 노력합니다. 나는 많은 담당자가 있으며 실제로 투표를 필요로하지 않지만 많은 열심히 생각하고 디버깅 한 후에 답변이 무시되면 응답을 포기할 수있는 다른 응답자를 고려하십시오.
논리 기사

답변:


17

Pyth, 26 바이트

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

데모.

우리 는 문자열 로 range(24)( U24) 의 데카르트 곱으로 시작 합니다 "03".

그런 다음이 값을 적절한 문자열 형식화 대체 ( m%"'%02d:%s0',"d)에 매핑합니다 .

그런 다음 결과 문자열이 줄 바꿈 문자 ( jb) 에 결합됩니다 .

마지막으로 후행 쉼표 ( P)를 제거 하고 인쇄합니다.


1
상금에 대한 새로운 경쟁자가있는 것 같습니다. pyth의 저자, ​​그것은 거의 부정 행위입니다;)
Espen Schulstad

15

Befunge-93, 63 바이트

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

 

animation ( BefunExec 로 만든 애니메이션 )


14

배쉬 : 58 47 46 자

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

나는이 솔루션 :) 좋아
에스 펜 Schulstad

1
익명 사용자 echo \'{00..23}:{0,3}0\'|sed 's/ /,\n/g'는 40자를 제안했습니다 . 좋은. 감사. 그러나 나는 bash자신의 힘 을 사용하는 것을 선호합니다 .
manatwork

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

여기에서 온라인으로 사용해보십시오


이것이 금을 가져갈 것 같습니다. 우리는 내일까지주지)
에스 펜 Schulstad에게

@EspenSchulstad 나는 그것이 실제로 금을 줄 것이기를 바랍니다. 한숨
옵티 마이저

3
그것은 단지 금의 가치 ​​일뿐 아니라 명예이기도합니다. 우리가 인생에서하는 일은 영원합니다.
Espen Schulstad

10

파이썬 2, 58 56 바이트

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

sentiao의 답변같지만for 루프를 사용 하여 쉼표를 제거하기 위해 슬라이싱합니다. 2 바이트를 차단 해 준 @grc에게 감사합니다.


이게 작동 "'%02d:%s0',"[:57-i]
grc

@grc Ahaha 물론, 훨씬 낫습니다
Sp3000

내가 할 수있는 것보다 낫다!
Tim

6

자바-119 바이트

Java 8의 StringJoiner로 시작했지만 import 문을 포함한다는 의미이므로 이전 방식으로하기로 결정했습니다.

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

아마도 이것은 여러 발생하는 치우는에 의해 개선 될 수 StringSystem키워드.


아마도 그루비 버전 :)
Espen Schulstad

이를 159로 단축 할 수 있습니다. 전에 공백을 제거하고 a, i증분을 이동하고 , for중괄호를 잃고 , 쉼표 / ​​개행을 처음으로 이동하십시오 (더 짧게 사용하고 substring제거 할 수 있음 length()). 함수는 기본적으로 허용되므로 상용구를 제거하여 더 짧게 만들 수 있습니다. 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

젠장, 훌륭합니다! 그 트릭을 명심해야합니다. 감사합니다!
샌더

아, 또 몇 개 :로 변경 String.format하십시오 s.format. 컴파일러 / IDE가 그것에 대해 불평 할 수도 있지만 작동합니다.)
Geobits

1
좋은 것! 형식은 정적 메소드이므로 클래스에서 액세스 해야 하지만 실제로이 방법을 사용하면 작동합니다!
샌더

5

루비, 94 61 56 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

루비에는 사랑이 필요합니다. 58 bytes;)puts Array.new(48){|i|"'%02d:%02d'"%[i/2,i%2*30]}.join','
blutorange

당신 @rcrmn @blutorange은 4 바이트 이상을 절감 (그리고 : 아래 내 솔루션에 도착)로 대체하여) 수 .join*:)
토마스 Dundáček을


4

자바 95 94 바이트

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

언 골프

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

편집은을 대체 ','와 함께44


24.times {printf ( " '% 02d : 00', \ n '% 02d : 30'% c \ n", it, it, (it <24)? 44 : 0)} 그루비에서 :) 같은 솔루션 , 그것은 단지 65 chr로 줄었다
Espen Schulstad

@EspenSchulstad 독립형 기능으로 간주됩니까, 아니면 실행하기 위해 필요한 다른 상용구가 있습니까?
tfitzger 2016 년

1
groovy가 있다면 groovysh에서 실행하거나 .groovy 파일에서 groovy 스크립트로 실행할 수 있습니다. 기능이 필요하지 않습니다.
Espen Schulstad


@EspenSchulstad 재미있는. Groovy와 함께 최소한의 작업 만했습니다.
tfitzger 2016 년

4

피스, 32 31 바이트

나는 파이썬에서 무언가를 골프 쳤지 만 Sp3000의 대답과 정확히 같은 것으로 밝혀졌습니다. 그래서 나는 Pyth에게 시도해보기로 결정했습니다.

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

Sp3000 답변의 정확한 번역입니다.

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

Pyth에서 처음 갔으므로 1 바이트 절약에 대해 알려주십시오.


Pyth에 오신 것을 환영합니다.
isaacg

3

PHP, 109 바이트

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

3

루비, 54 51 바이트

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

1
당신은 변경하여 3 바이트를 줄일 수있는 \n실제 줄 바꿈과 사이의 공간을 제거 join하고 ". 반면에, 지정된 출력에는 시간에 선행 0이 있습니다.
rorlork

또한 (공백없이) 및 로 변경 puts 하여 더 많은 바이트를 추가하십시오 . 그래도 몇 시간 동안 여전히 제로 문제가 있습니다. $><<.join*
rorlork

3

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

이것에서 몇 바이트 더 긁을 수 있습니다 ...

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

완전한 프로그램이 아닌 함수를 작성하여 3 바이트를 절약 할 수 있습니다. "main"을 "f"로 바꾸거나 좋아하는 문자를 바꾸십시오.
Bijan

오, 아주 좋은 제안입니다 ..... 하나는 항상 잊어 버립니다!
Joshpbarron

3

T-SQL, 319 (307) 305 바이트

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

골프 용 버전 :

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 바이트

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

이것은 확실히 개선 될 수 있습니다.

온라인 사용해보기 : Pyth Compiler / Executor

설명:

     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"

이 골프 언어로 항상 인상적입니다. 예를 들어 Java에 golf-jar-lib가 있는지 아는 사람이 있습니까?
Espen Schulstad

sentiao의 필수 포트 는 31을 제공합니다 : j+\,bm%"'%02d:%s0'",/d2*3%d2 48문자열 형식
Sp3000

2

파이썬 2, 69 바이트

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

매우 명백하지만 여기에 설명이 있습니다.

  • 이중 루프 사용
  • 문자열 형식 '0''3'문자열 형식을 번갈아가는 것이 목록보다 짧습니다.
  • %02d 패딩 h
  • m대체 문자가 고정 위치에 있기 때문에 패딩이 필요하지 않습니다.
  • '\n'.join() 최종 요구 사항을 해결

더 짧게 수행 할 수 있는지 모르겠습니다 (Python 2에서).

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


1
어떻습니까 :print',\n'.join("'%02d:%s0'"%(h/2,h%2*3)for h in range(48))
Sp3000

훌륭합니다, Sp3000! – 당신은 그것을 게시해야합니다
sentiao

1
아냐, 내 책에 올릴만큼 다르지 않아. 내가 한 것은 대괄호 (당신의 경우에도 불필요)를 떨어 뜨리고 떨어 뜨린 것 m입니다. (또한 61 바이트가 아닌 59 바이트 임)
Sp3000

2

하스켈, 85 바이트

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

불행히도 printf19 바이트가 필요 import하므로 사용할 수 없습니다.


2

줄리아 : 65 64 61 자

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

줄리아 : 64 자

(Julia의 멋진 for구문 을 보여주기 위해 여기에 보관하십시오 .)

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

2

포트란 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

end컴파일 의 최종 유형에 대한 표준 남용 유형 및 요구 사항 . 안타깝게도, 암시 적 형식으로 인해 '(a)'마지막 print문장에 필수입니다. 여전히 C 및 C ++ 답변보다 낫습니다.)


2

자바 스크립트 (ES6), 77 86 + 1 바이트

각 줄에 따옴표가 있어야한다는 것을 몰랐습니다 (+1은 -p노드 가있는 플래그입니다).

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

오래된 해결책 :

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

ungolfed 버전 (대신 for 루프 사용 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을 실제 줄 바꿈으로 바꿉니다.
Mama Fun Roll

2

golflua 52 51 자

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

ascii 사용하기 44 = , 및 0을 사용하면 공백이 문자를 저장합니다.

ungolfed 루아 버전은

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

if문장은 삼항 연산자와 매우 비슷합니다 a > b ? 44 : 0.


2

C #-120 바이트

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

파이썬, 60 58 64 바이트

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

언 골프 드 :

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

여기에서 온라인으로 사용해보십시오 .


1
한 줄에 넣고 다른 2 바이트를 저장하십시오.
isaacg

나는 이것이 작동하지 않는다고 생각한다.
isaacg

1
@isaacg는 그것을 고쳤다!
Tim

결과는 원래 질문과 동일하지 않습니다.
sentiao

@sentiao 무엇이 다른가요?
Tim


2

PHP, 69 70 62 바이트

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

온라인으로 사용해보십시오

'23:30'마지막에 출력 하는 것은 약간 불충분하므로 PHP 컨텍스트를 ?>열거 나 다시 열지 않고 닫 습니다. 더 깨끗한 대안 (그러나 65 바이트)은 다음과 같습니다.

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

온라인으로 사용해보십시오

팁을 주신 @Dennis에게 감사합니다. @ ismael-miguel의 기여에서 영감을 얻은 대안.


1
프로그래밍 퍼즐 및 코드 골프에 오신 것을 환영합니다! 코드는 끝에 null 바이트를 인쇄합니다. 그것이 허용되는지 확실하지 않습니다.
Dennis

@Dennis 감사합니다. 당신 말이 맞습니다 ... PHP가 그것을 문자열 끝으로 볼 것이라고 생각했습니다. 새 버전을 게시했습니다.
mk8374876

<?...?>'23:30'3 바이트를 절약합니다. 또한 \n실제 줄 바꿈으로 바꿀 수 있습니다 .
Dennis

2

스위프트, 74 바이트

Swift 2/3 용으로 업데이트되었으며 새로운 문자열 보간으로 ...

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

마지막 줄은 쉼표 를 갖지 않도록 지정되며 코드에서 인쇄합니다.
Kyle Kanos

1

자바 스크립트, 89 바이트

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

1
빠른 질문 : 몇 개의 인수를 Array.push()지원합니까? ;)
manatwork

네가 옳아. 그것은 polyad입니다. 감사합니다. 다른 과제에 대한 응모 테스트를 마친 후에 변경하겠습니다.
SuperJedi224

일부 기본 재구성으로 몇 가지 문자를 더 제거 할 수 있습니다.for(i=a=[];i<24;)a.push((x=("0"+i++).slice(-2))+":00",x+":30");alert(a.join(",\n"))
manatwork

거기서 고쳤습니다.
SuperJedi224

변수 x를 재사용하는 것은 꽤 추악한 코딩 습관입니다. 루프 제어 변수를 다른 것으로 변경하면 (2015-05-07 15 : 28 : 25Z의 제안과 같이) 여는 작은 따옴표를 x 값에 추가하여 두 "'"+조각을 하나로 줄일 수 있습니다 .for(i=a=[];i<24;)a.push((x="'"+("0"+i++).slice(-2))+":00'",x+":30'");alert(a.join(",\n"))
manatwork

1

파이썬 2:64 바이트

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

결과는 원래 질문과 동일하지 않습니다.
sentiao

편집 한 내용이 무엇인지 모르겠습니다. 다음은 올바른 버전이며 64 자입니다.print',\n'.join("'%02d:00',\n'%02d:30'"%(h,h)for h in range(24))
Alan Hoover

1

루비-52 바이트

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

이것은 단지 변화에 내 솔루션처럼 보인다 .join위한 *... 그것은 원래 포스터에 대한 개선을 제안, 대신 작은 개선을 가진 새로운 해답을 게시의 공통 예의입니다. meta.codegolf.stackexchange.com/questions/75/…
rorlork 8:15에

@rcrmn 나는 실수를 저지른 것에 대해 사과한다. 다른 루비 답변을 먼저 찾아봐야했다. 하지만 당신의 대답에 훌륭한 작품 $><<!
Tomáš Dundáček

그것에 대해 걱정하지 마십시오, 당신은 여기에 새로운 것입니다 : 나는 당신이 나중에 이것을 피할 수 있도록 당신에게 조언하고있었습니다.
rorlork

1

파이썬 2, 74 65 바이트

텍스트 형식을 사용하여 시간당 2 줄 문자열을 생성합니다.

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

이 코드는 매우 명확하지만 Sp3000의 대답에서 영리한 색인 생성 및 정수 수학은 더 짧은 솔루션을 제공합니다.


1
00과 30에 형식을 사용할 이유가 없습니다."'%02u:00',\n'%02u:30'"%(h,h)
DenDenDo 다음을 사용

너무 많은 루프를 사용하여 바이트를 절약 할 수 있습니다. print',\n'.join("'%02u:%02u'"%(h,i)for h in range(24)for i in[0,30])
dieter

감사합니다 DenDenDo. 나는 이것을 사용하여 약간의 바이트를 절약했다. 디 이터, 나는 당신의 아이디어가 어디에서 도움이 될 수 있는지 알 수 있지만 DenDenDo에서 그 아이디어로 더 많은 바이트를 절약 할 수 있습니다.
논리 기사
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.