패턴을 따르는 모든 시간 찾기


13

귀하의 직업은 다음 패턴 중 하나를 따르는 모든 시간 (HH : MM, 24 시간 형식)을 인쇄하는 프로그램을 작성하는 것입니다.

  • 분과 같은 시간, 예 : 22 : 22,01 : 01
  • 역 분과 같은 시간, 예 : 10:01, 01:10, 22:22
  • H : MM 또는 HH : MM과 일치하는 시퀀스는 항상 HH : MM으로 인쇄됩니다. 예 : 00:12, 01:23, 23:45, 03:45 등 (항상 숫자 사이의 단일 단계)

규칙 :

  • 원하는 언어를 선택할 수 있습니다
  • 반복해서 인쇄 할 수 없습니다
  • 하루의 순서에 따라 라인 당 한 번
  • 우승자는 2 월 5 일에 선발됩니다.

추신 : 이것은 내 첫 번째 질문이며 일부 불일치가있을 수 있습니다. 자유롭게 편집하십시오.

PS2 : 예상되는 44 가지 솔루션은 다음과 같습니다 (이미 Josh와 primo가 발표했습니다!)

00:00
00:12
01:01
01:10
01:23
02:02
02:20
02:34
03:03
03:30
03:45
04:04
04:40
04:56
05:05
05:50
06:06
07:07
08:08
09:09
10:01
10:10
11:11
12:12
12:21
12:34
13:13
13:31
14:14
14:41
15:15
15:51
16:16
17:17
18:18
19:19
20:02
20:20
21:12
21:21
22:22
23:23
23:32
23:45

2
그 기대 3:45기록 03:45에 HH:MM따라서 순서를하지 형식과.
— Howard

권리! 나는 예에서 그를 그리워
— RSFalcon7

3
않는 13:57순서로 계산? 무엇에 대해 6:54? 같은 메모에서 6:42결정해야합니다.
— John Dvorak

3
00:01시퀀스 로 카운트하는 것과 같이 선행 0이 아닌 하나의 숫자 만있는 시간이 있습니까?
— Josh

2
@ RSFalcon7 그렇다면 선행 0 만 무시됩니까? 어느 것? 23:45, 02:34, 00:23, 00:02는 비슷한 경우 인 것 같습니다.
— Joachim Isaksson

답변:


4

골프 스크립트 ( 82 72)

아직 초보자는 많지만 GS 답변이 없었으므로 ... :)

24,{'0'\+-2>..+\.-1%+}%5,{'0'7,{+}/>4<.(;0\+}%|{2=54<},$);{2/~':'\++}%n*

PHP는 그것을 이길 수 없습니다.
— primo

그리고 C는 확실히 그것을 이길 수 없습니다.
— Josh

4

PHP-93 바이트

<?for(;24>$h;)@ereg(+$h=&date(i,$i).$m=date(s,$i++),"0123456$h$h".strrev($h))&&print"$h:$m
";

이것은 같은 패턴을 찾을 수 02:34있지만 00:23또는 같은 패턴을 찾을 수 없습니다 00:02. 의견에서 OP의 설명을 이해하면 이것이 맞습니다.

총 44 개의 결과를 인쇄합니다.

00:00
00:12
01:01
01:10
01:23
02:02
02:20
02:34
03:03
03:30
03:45
04:04
04:40
04:56
05:05
05:50
06:06
07:07
08:08
09:09
10:01
10:10
11:11
12:12
12:21
12:34
13:13
13:31
14:14
14:41
15:15
15:51
16:16
17:17
18:18
19:19
20:02
20:20
21:12
21:21
22:22
23:23
23:32
23:45

4

C, 118 (초기 136)

h,m;main(){h<24&&main(m>57?m=0,h++:h==m|h==m%10*10+m/10|m-12==h*11|h==m-22&!(~-m++%11)&&printf("%02d:%02d\n",h,m-1));}

119 자의 반복 버전 :

h;main(m){for(;h<24;h++)for(m=0;m<57;m++)h==m|h==m%10*10+m/10|m-12==h*11|h==m-22&!(~-m%11)&&printf("%02d:%02d\n",h,m);}

@squeamish ossifrage에게 큰 감사합니다!


1
지금은 좋아야합니다.
— Josh

2
내 솔루션은 (예 :)를 출력합니다 02:34. 규칙 m-12==h*11은 그들을 잡는다.
— Josh

2
다음 100*h+m==1234||100*h+m==2345과 같이 바꿀 수 있습니다 ((m-h)==22)&&!((m-1)%11)(대괄호가
— 적을

1
공동 자금! 128 자로 줄이십시오. 감사!
— Josh

1
내 이해에는와 같은 한 자리 숫자 만있는 시퀀스는 포함하지 않아야했습니다 00:01. 설명을 위해 원래 질문에 게시하겠습니다.
— Josh

2

파이썬 (178)

s=sorted
for i in[x for x in['%04d'%i for i in range(2400)if i/10%10<6]if s(x[:2])==s(x[2:])or len({i-ord(y)for i,y in enumerate(x.lstrip('0'))})==1]:print'%2s:%2s'%(i[:2],i[2:])

시퀀스 전에 모든 선행 0을 제거하면 총 57 개의 결과가 제공됩니다.


2

APL (90)

F←{,'ZI2'⎕FMT⍵}⋄↑⊃¨{(F⍺),':',F⍵}/¨Z/⍨{(⍺=⍵)∨(≡/0 1⌽∘F¨⍺⍵)∨∧/¯1=2-/⍎¨(⍕⍺),F⍵}/¨Z←,1-⍨⍳24 60

그게 다야. 모든 키워드와 대부분의 기능이 단일 문자 인 perl의 방언을 만들려고합니다. +1, btw;)
— primo 2019

1

자바 스크립트-171 자 (5/2/14)!

for(h='00';+h<24;h=(++h<10?'0':'')+h)for(m='00';+m<60;m=(++m<10?'0':'')+m)if(h[1]+h[0]==m||h==m||+m[1]-m[0]==1&&+m[0]-h[1]==1&&(!+h[0]||+h[1]-h[0]==1))console.log(h+':'+m)

나는 골프를 심각하게 중단하고있다. 지금부터 되돌아 보면 거의 30자를 줄였습니다! JSBin .

Ungolfed (및 의견) :

// Note: +'string' is same as 'parseInt(string, 10)'
// Also, this code is not the shortest one, I have purposely made this code longer for
// understanding purposes

for(h = '0'; +h < 24; h = +h + 1 + '') //initialize h(our), loop while it's less than 24
{                                      // increase it by 1 and cast back to string
    for(m = '0'; +m < 60; m= +m + 1 + '') // intialize m(inute), loop while < 60
    {                                  // increase it by 1 and cast back to string
        if(h.length < 2) h = 0 + h;    // if it is '9', convert to '09'
        if(m.length < 2) m = 0 + m;    // if it is '9', convert to '09'

        // Tests for printing
        if(h[0] === m[1] && m[0] === h[1] ||
           h === m ||
           +m[1] - +m[0] === 1 && +m[0] - +h[1] === 1 && (+h[0] === 0 || +h[1] -+ h[0] === 1))
        console.log(h + ':' + m);  // print
    } // inner loop end
}     // outer loop end

187 자 (구) (14/2/4)

for(h='00';+h<24;h=(+h<9?'0':'')+(+h+1))for(m='00';+m<60;m=(+m<9?'0':'')+(+m+1))if(h[0]==m[1]&&m[0]==h[1]||h==m||+m[1]-m[0]==1&&+m[0]-h[1]==1&&(!+h[0]||+h[1]-h[0]==1))console.log(h+':'+m)

약간의 실험과 로트 개선 (9 문자) :) JSBin

196 자 (구) (14/2/3)

for(h='00';+h<24;h=(+h<9?'0':'')+(+h+1))for(m='00';+m<60;m=(+m<9?'0':'')+(+m+1))if(h[0]==m[1]&&m[0]==h[1]||h==m||+m[1]-m[0]==1&&+m[0]-h[1]==1&&(!+h[0]||+h[1]-h[0]==1))console.log(h+':'+m)

신선한 마음으로 앉아서 많은 라이너를 개선했습니다 :) JSBin .

208 자 (구) (2/2/14)

for(h='0';+h<24;h=+h+1+''){for(m='0';+m<60;m=+m+1+''){if(h.length<2)h=0+h
if(m.length<2)m=0+m
if(h[0]==m[1]&&m[0]==h[1]||h==m||+m[1]-+m[0]==1&&+m[0]-+h[1]==1&&(+h[0]==0||+h[1]-+h[0]==1))console.log(h+':'+m)}}

정확히 44 시간이 필요합니다 (각 줄마다)

내 코드를 계속 개선 할 것입니다.

의견을 보내 주셔서 감사합니다. 감사합니다.


최근 업데이트 !!
— Gaurang Tandon

1

파이썬 3, 248 자

나는 조금 늦었고 좋지도 않다고 생각하지만, 마지막으로 공유 할 첫 번째 코드 골프를 얻었습니다.

00:12가 아닌 01:23 및 23:45와 같은 실제 시퀀스 만 지원하기로 결정했습니다. 어쨌든, 나는 더 나은 일이 많을 것이므로 내 의견을 공유하십시오.

import itertools as t
s=sorted
r=range
i=int
d='%02d'
e=d+':'+d
print([e%(i(a[0]),i(a[1])) for a in t.product([d% x for x in r(0,24)], [d% x for x in r(0,60)]) if s(a[0])==s(a[1]) or list(a[0]+a[1])==[str(x) for x in r(i(a[0][0]),i(a[1][-1])+1)]])

내 pastebin 에 매우 설명적인 버전이 있습니다.


0

델파이

여전히 작업 중이지만 이것이 내가 지금까지 한 것입니다.
작동하지만 더 짧아 질 수는 없습니다.
편집 : 48 회 인쇄합니다.

들여 쓰기없이 422 자

uses System.SysUtils,DateUtils;var t:TTime;a,b,c,d:integer;s:string;begin t:=StrToTime('00:01');while t<StrToTime('23:59')do begin s:=FormatDateTime('hhnn',t);a:=StrToInt(s[1]);b:=StrToInt(s[2]);c:=StrToInt(s[3]);d:=StrToInt(s[4]);if((a+1=b)and(b+1=c)and(c+1=d))or((a=0)and(b+1=c)and(c+1=d))or((a=0)and(b=0)and(c+1=d))or((a=d)and(b=c))or((a=c)and(b=d))then WriteLn(FormatDateTime('hh:nn',t));t:=IncMinute(t)end;ReadLn;end.

들여 쓰기 557 자

uses
  System.SysUtils, DateUtils;

var
  t:TTime;
  a,b,c,d:integer;
  s:string;
begin
  t:=StrToTime('00:01');
  while t<StrToTime('23:59')do
  begin
    s:=FormatDateTime('hhnn',t);
    a:=StrToInt(s[1]);
    b:=StrToInt(s[2]);
    c:=StrToInt(s[3]);
    d:=StrToInt(s[4]);
    if((a+1=b) and (b+1=c) and (c+1=d)) or
      ((a=0) and (b+1=c) and (c+1=d)) or
      ((a=0) and (b=0) and (c+1=d)) or
      ((a=d) and (b=c)) or ((a=c) and (b=d)) then
      WriteLn(FormatDateTime('hh:nn',t));
    t:=IncMinute(t)
  end;
  ReadLn;
end.

0

q (116)

distinct{t:string 00:00+x;$[(t[0 1]in(t[3 4];t[4 3]))|all 1=1_deltas{"I"$x}each t[0 1 3 4];t;"00:00"]}each til 1440

00:00에서 23:59까지 증가하고 문자열로 캐스팅 한 다음 검사 (1 또는 2 테스트) 또는 3

산출:

("00:00";"01:01";"01:10";"01:23";"02:02";"02:20";"03:03";"03:30";"04:04";"04:40";"05:05";"05:50";"06:06";"07:07";"08:08";"09:09";"10:01";"10:10";"11:11";"12:12";"12:21";"12:34";"13:13";"13:31";"14:14";"14:41";"15:15";"15:51";"16:16";"17:17";"18:18";"19:19";"20:02";"20:20";"21:12";"21:21";"22:22";"23:23";"23:32";"23:45")

0

PHP- 56 39 31 바이트

<? http_redirect("goo.gl/W2M5mo")?>

어떤 식 으로든 규칙을 구부리지 않습니다. php.ini에서 pecl_http 모듈을 설치하고 short_open_tag를 "1"로 설정해야합니다.


+1, sneakiness에 대한 아무것도 경우 옥타브는 38 자에서 그 친다하더라도 disp(urlread('http://bit.ly/1fzhb3C')):)
— 요아킴 이삭손

... 당신은 아마 사용자 정의 설계 정적 HTML을 고려해야하지만, 당신이 다른 정적 파일을 할 것있는 거로드 소스 코드의 일부 (동등하게 계산되지 ...?)
— 요아킴 이삭손

-7

TI-BASIC

TI-84 계산기 용

DelVar AWhile A<24:A+1→A:Disp A,":",A:End

3
이것은 어떤 식으로 질문에 대답합니까?
— Howard

2
공정하게 질문에 " 다음 패턴 중 하나 를 따르십시오 "
— Danny

2
@ 대니 나는 이것이 규칙을 너무 많이 굽히고 있다고 생각합니다.
— John Dvorak

1
@JanDvorak 이것은 어떻게 규칙을 굽히는가 ???
— Timtech

2
좋아 ... 규칙을 표현하는 다른 방법을 생각해 보자. 나는 당신이 의도적으로 그것을 잘못 해석했는지 확실하지 않지만, 지금까지 나뿐만 아니라 다른 anwerer에게도 충분히 분명해 보입니다.
— John Dvorak
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.