다음 "흥미로운"시간 찾기


9

나는 오늘 정확히 11시 11 분 11 초 (현재는 1/11; 2011 년이 아니 어서 너무 나쁘다)에서 시계를 한눈에 보았습니다 . 이것으로 코드 골프 질문을해야합니다! 나는 독사입니다.

어쨌든, 당신의 도전은 입력으로 1 시간, 1 분, 2 초가 걸리고 다음 "흥미로운"시간을 출력하는 것입니다. 여기서는 다음 단계로 흥미로운 것을 정의합니다.

  1. 시, 분 및 초를 연결하십시오. (예 : 4:14:14의 경우 41414입니다.)
  2. 전체 문자열의 길이에 걸쳐있는 1 개, 2 개 또는 3 개의 연속 그룹을 확인하십시오. 예를 들어, [41][41][4]예제 시간에서 그룹을 찾을 수 있습니다 (그룹이 문자열을 통해 도달 할 수없는 경우이 예제에서와 같이 잘라 내십시오 ). 또 다른 예 : 질문의 시작 부분에서 내 첫 번째 예에서 시간에, 그것은 것 [1][1][1][1][1][1], [11][11][11]또는 [111][111].
  3. 문자열을 통과하는 연속 그룹이 있습니까? 그렇다면 시간은 "흥미 롭다"입니다. 그렇지 않으면 그렇지 않습니다.

입력은 적절한 형식 일 수 있지만 하드 코딩해서는 안됩니다. 출력은 또한 합리적인 형식 일 수 있으며 입력과 같은 형식 일 필요는 없습니다.

어떤 이유로 네트워크 액세스를 사용하는 경우 네트워크 에서 다운로드 한 모든 바이트가 점수에 포함됩니다.

이것은 ; 바이트 단위의 가장 짧은 코드가 이깁니다.


1
11 월이 아닌 1 월입니다. P
변동성

@Volatility 으악는 오타 - P는 고정
손잡이

1
네트워크 액세스 제한이 마음에 듭니다.
Kyle Kanos

1
코드는 12 시간 시계의 시간 만 고려해야합니까? 예를 들어 24 시간제 14:14:14는 흥미로운 시간이지만 12 시간제에서는 그리 흥미롭지 않습니다 (2:14:14)
Kevin Anderson

답변:


2

J, 113 99 90

아마 여전히 꽤 골프입니다.

f=:t#:[:(>:^:([:(3&g+:2&g=.[:*/]=(]$)${.)@(":@{.,3}.7":100#.1,])t#:])^:_)1+(t=.24,2$60)#.]

벡터 (h m s)를 입력으로 받아서 출력과 같은 형식으로 벡터를 반환합니다.

예 :

   f 0 0 0
0 1 0
   f 4 14 14
4 14 41
   f 23 59 59
0 0 0
   f 3 14 15
3 14 31

1

하스켈- 227223

그것이 한 가지 방법입니다.

    import Data.List
e _ []=False
e f s=let (h,t)=f s in t`isPrefixOf`h||h`isPrefixOf`t&&e f t
i [a,b,s]=head[t|s<-[s+1..],f<-map splitAt[1..3],let m=b+s`div`60;h=a+m`div`60;t=[h`mod`24,m`mod`60,s`mod`60],e f$concatMap show t]

λ: i [11,11,11]
[11,21,1]
λ: i [4,14,14]
[4,14,41]

샘플 런을 게시 할 수 있습니까? 나는 Haskell에 대해 실마리가 없기 때문에 입출력이 어떻게 작동하는지 전혀 모른다 :-P
Doorknob

1

매스 매 티카 125

F=Do[#~MatchQ~{#〚-1〛..,_}&&Break@#&@Partition[(i=IntegerDigits)@f[n~i~60,100],m,m,1,a_],
{n,#~(f=FromDigits)~60+1,7^6},{m,3}]&

다음에 흥미로운 시간의 패턴을 반환합니다.

F@{11, 11, 11}
F@{4, 14, 14}

{{1, 1, 2}, {1, 1, 2}}

{{4, 1, 4}, {4, 1, a_}}

a_ 시간의 끝을 표시합니다.


1

루아

몇 가지 요구 사항에 대해 확신하지 못했기 때문에 4 가지 솔루션이 있습니다.

버전 1 : 0 제거, 명령 줄 입력 및 os.time () 백업 (315)

최소화 :

z=arg if z[1] then y={hour=z[1],min=z[2],sec=z[3],day=1,month=1,year=1}end h,g,e,u=os.date,os.time(y),":",tonumber while 1 do g=g+1 b,c,d=u(h("%H",g)),u(h("%M",g)),u(h("%S",g)) a=b..c..d for x=1,#a/2 do p=1 for _ in a:gmatch(a:sub(1,x))do p=p+1 if p>math.ceil(#a/x) then print(b..e..c..e..d)return 1 end end end end

주석이있는 정식 버전 :

z=arg if z[1] then y={hour=z[1],min=z[2],sec=z[3],day=1,month=1,year=1}end --get command line arguments
h,g,e,u=os.date,os.time(y),":",tonumber --set up references, if command line arguments accepted use y else use current time
while 1 do
    g=g+1
    b,c,d=u(h("%H",g)),u(h("%M",g)),u(h("%S",g)) --get HH:MM:SS seperately (which allows removal of the zeroes with tonumber())
    a=b..c..d  --concat
    for x=1,#a/2 do  --check up to half of the string
        p=1
        for _ in a:gmatch(a:sub(1,x))do --for each match
            p=p+1  --count number of matches
            if p>math.ceil(#a/x) then print(b..e..c..e..d)return 1 end --if matches span entire string, cheer (and print in a pretty format)
        end
    end
end

다른 버전은 매우 유사하므로 최소화 된 버전 만 게시합니다.

버전 2 : 명령 행 입력 없음 (239)

h,g,e,u=os.date,os.time(),":",tonumber while 1 do g=g+1 b,c,d=u(h("%H",g)),u(h("%M",g)),u(h("%S",g)) a=b..c..d for x=1,#a/2 do p=1 for _ in a:gmatch(a:sub(1,x))do p=p+1 if p>math.ceil(#a/x) then print(b..e..c..e..d)return 1 end end end end

버전 3 : 제거 없음, 명령 줄 입력 (240)

z=arg if z[1] then y={hour=z[1],min=z[2],sec=z[3],day=1,month=1,year=1}end h,g=os.date,os.time(y) while 1 do g=g+1 a=h("%H%M%S",g) for x=1,3 do p=1 for _ in a:gmatch(a:sub(1,x))do p=p+1 if p>6/x then print(h("%T",g))return 1 end end end end

버전 4 : 멋진 기능 없음 (0 제거 또는 명령 행 입력 없음)

h,g=os.date,os.time() while 1 do g=g+1 a=h("%H%M%S",g) for x=1,3 do p=1 for _ in a:gmatch(a:sub(1,x))do p=p+1 if p>6/x then print(h("%T",g))return 1 end end end end

사용 지침

터미널에서 실행 (버전 1 및 3)

lua interesting.lua HOURS MINUTES SECONDS

아니면 그냥

lua interesting.lua

시스템 시계를 끄려면

기능 완성에 대한 상이 있습니까? :피

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.