몇 시야? 시계에 표시된 시간에서 실제 시간을 결정하십시오.

손목에 3 개의 시계를 착용하여 문자 그대로 시간을 절약하고 싶습니다. 문제는 각각 시간이 다릅니다. 한 시계는 실제 시간보다 x 분 뒤입니다. 하나의 시계는 실제 시간보다 x 분 앞서 있습니다. 마지막 시계는 실제 시간을 보여줍니다.

문제는 어떤 시계가 정확한 시간인지 알 수 없다는 것입니다.

각 시계에 표시된 시간에서 실제 시간을 결정하십시오. 시간을 결정할 수 없으면 “태양을 보라”를 인쇄하십시오.

입력 :
단일 공백 ​​문자로 구분 된 3 개의 판독 값 : H1:M1 H2:M2 H3:M3
각 판독 값에서 H1, H2, H3은 표시된 시간 (0 <H1, H2, H3 <13)을 나타내고 M1, M2, M3은 표시된 분을 나타냅니다 (0 <= M1 , M2, M3 <60). 분 수가 10보다 작은 경우 앞에 0이 앞에 붙습니다. 마찬가지로 시간 수가 10보다 작 으면 앞에 0이 앞에 붙습니다.

출력 : The correct time is HH:MM 여기서 HH : MM은 정확한 시간입니다. 정확한 시간을 결정할 수 없으면이 표시됩니다 Look at the sun.

입력 1 : 05:00 12:00 10:00

출력 1 : The correct time is 05:00

입력 2 : 11:59 12:30 01:01

출력 2 : The correct time is 12:30

입력 3 : 12:00 04:00 08:00

출력 3 : Look at the sun

가장 짧은 코드가 승리합니다. 특별 처벌은 적용되지 않습니다. 또한, 우리가 12 시간 시계를 다루고 있다는 것을 명심하십시오. 나는 AM이나 PM을 신경 쓰지 않습니다 … 우리가 아날로그 시계를 다루고 있다고 상상해보십시오 …



답변

CJam, 86 83 77 75 71 바이트

"The correct time is "ea{aea+':f/60fb(f-:+720%!},{];"Look at the sun"}*

내 코드에서 6 바이트를 골라내는 @ jimmy23013에게 감사드립니다.

CJam 통역사 에서 온라인으로 사용해보십시오 .

테스트 사례

$ cjam time.cjam 05:00 12:00 10:00; echo
The correct time is 05:00
$ cjam time.cjam 11:59 12:30 01:01; echo
The correct time is 12:30
$ cjam time.cjam 12:00 04:00 08:00; echo
Look at the sun

작동 원리

"The correct time is "
        e# Push that string.
ea      e# Push the array of command-line arguments.
{       e# Filter; for each time T:
  a     e#   Wrap T in an array.
  ea+   e#   Concatenate with the array of all times.
  ':f/  e#   Split each time at the colon.
  60fb  e#   Consider it a base 60 integer.
  (f-   e#   Shift out the converted T and subtract it from the remaining times.
  :+    e#   Add them.
  720%! e#   Push 1 is the sum is 0 modulo 720 and 0 if not.
},      e#   Keep the time iff a 1 has been pushed.

        e# The array on the stack now contains one or three times.

{       e# Reduce; for each time but the first:
  ];    e#   Discard the entire stack.
  "Look at the sun"
        e#   Push that string.
}*      e#

답변

자바 스크립트 ( ES6 ) 164 168 172

각 판독 값에 대해 다른 2 개의 거리를 계산하십시오. 거리가 같은 것이 필요합니다. 둘 이상이 있으면 말할 수 없습니다.

F=s=>(s=s.split(' '))
  .map(x=>([h,m]=x.split(':'),+m+(h%12)*60))
  .map((v,i,z)=>(v+v-z[++i%3]-z[++i%3])%720||'The correct time is '+s[k+=i],k=-2)
[k]||'Look at the sun'


// TEST

out=x=>O.innerHTML += x+'\n';

['12:30 01:01 11:59', '11:50 11:55 12:00', '05:00 12:00 10:00', '12:10 04:10 08:10', '07:00 06:00 08:00']
.forEach(x => out(x + ' -> ' + F(x)))

go=_=>out(I.value + ' -> ' + F(I.value))
<pre id=O></pre>
<input id=I><button onclick="go()">Test</button>

답변

파이썬 3, 166163 바이트

L=input().split()
f=lambda x:int(x[:2])*60+int(x[3:])
s=""
for a in L:s=[s,s and"Look at the sun"or"The correct time is "+a][(sum(map(f,L))-3*f(a))%720<1]
print(s)

용도

      a-b == b-c
<==>  a+c-2*b == 0
<==>  (a+b+c)-3*b == 0

산술은 분 모듈로 720입니다.


답변

파이썬 2, 254199 207 203 194 200 바이트

아마도 이것을 단축시키는 몇 가지 방법이 있습니다.

t=[x.split(':')for x in raw_input().split()]
a,b,c=[int(x[0])*60+int(x[1])for x in t]
print["The correct time is "+':'.join(t[[(c+a)%720%(b/2)<1,2][(a+b)%720%(c/2)<1]]),"Look at the sun"][(a-b)%240<1]

Sp3000 덕분에이 문제를 해결할 수 있습니다.