몇 시야?


25

손목에 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을 신경 쓰지 않습니다 ... 우리가 아날로그 시계를 다루고 있다고 상상해보십시오 ...


정확한 시간이란 현재 현지 시간을 의미합니까?
Optimizer

7
@sanchises 그들은 4 시간 떨어져 있기 때문에. 12:00정확히 사이에 8:00그리고 4:00... 당신도 알
Siguza

1
출력이 The correct time is HH:MM전체 중지없이 형식 이지만 처음 두 예제에서는 전체 중지를 포함하도록 진행합니다. 어떤 버전이 올바른가요?
Sp3000

1
명령 줄 인수로 시간을 읽을 수 있습니까?
Dennis

1
에서처럼 whattimeisit 07:21 08:39 08:00? 확실한!
WallyWest 2016 년

답변:


10

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#

1
qS/_':f/60fb_f{f-:+720%!,}\"The correct time is "f\2/.e&$("Look at the sun"@?. b의미합니다 :i.
jimmy23013

3
"The correct time is "lS/_':f/60fb:T.{Tf-:+720%{}@?}{];"Look at the sun"}*.
jimmy23013

x = 0 일 때 사건을 놓쳤다
Lakshay Garg

@LakshayGarg : 문제는 각각 다른 시간을 준다고 말합니다 . 이 경우 거짓이됩니다 x = 0.
Dennis

@Dennis 당신은 그것을 더 줄일 수 있습니다, 마지막에 전체 정지가 필요하지 않습니다 ...
WallyWest

7

자바 스크립트 ( 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:00 3:00 3:00에 3:00을 제공하지 않아야합니다. x = 0 : P
Lakshay Garg 2016

4
@LakshayGarg 번호 Problem is they each give a different timex는 0이 될 수 없습니다.
edc65

당신이 얻는 각각의 공감대와 함께, 당신은해야합니다 edc65++.
Alex A.

4

파이썬 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입니다.


비슷한 접근법 (a + abc = = 0)을 사용하면 정렬이 필요하지 않다는 것을 알았습니다. 피하려고 했습니까?
edc65

@ edc65 대신 카운트를 유지하려고했지만 더 오래되었다고 생각합니다. 나는 또한 처음에 + abc를 가졌지 만 그것은 많은 호출이다 f(그리고 pre-list-comp는 길다)
Sp3000

2

파이썬 2, 254 ... 199 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 덕분에이 문제를 해결할 수 있습니다.

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