समय क्या हुआ है?


25

मुझे अपनी कलाई पर तीन घड़ियाँ पहनकर, काफी शाब्दिक रूप से समय बचाना पसंद है ... समस्या यह है कि वे प्रत्येक को एक अलग समय देते हैं। एक घड़ी वास्तविक समय से x मिनट पीछे है। एक घड़ी वास्तविक समय से x मिनट आगे है। अंतिम घड़ी वास्तविक समय दिखाती है।

समस्या यह है, मैं नहीं बता सकता कि किस घड़ी का सही समय है ...

प्रत्येक घड़ी पर प्रदर्शित समय से, वास्तविक समय निर्धारित करें। यदि समय निर्धारित करना संभव नहीं है, तो "सूरज को देखो" प्रिंट करें।

इनपुट: तीन रीडिंग, सिंगल स्पेस कैरेक्टर द्वारा अलग: H1:M1 H2:M2 H3:M3 प्रत्येक रीडिंग H1, H2, H3 में प्रदर्शित घंटों का प्रतिनिधित्व करते हैं (0 <H1, H2, H3 <13), और M1, M2, M3 प्रदर्शित मिनटों का प्रतिनिधित्व करते हैं (0 = M1) , एम 2, एम 3 <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 घंटे की घड़ी के साथ काम कर रहे हैं ... मुझे एएम या पीएम की परवाह नहीं है ... कल्पना कीजिए कि हम एनालॉग घड़ियों के साथ काम कर रहे हैं ...


सही समय से, आपका मतलब वर्तमान स्थानीय समय से है?
ऑप्टिमाइज़र

7
@sanchises क्योंकि वे 4 घंटे अलग हैं। 12:00वास्तव में के बीच है 8:00और 4:00भी, तुम्हें पता है ...
Siguza

1
आप कहते हैं कि आउटपुट The correct time is HH:MMपूर्ण विराम के बिना फॉर्म का है , लेकिन फिर पहले दो उदाहरणों में एक पूर्ण विराम को शामिल करने के लिए आगे बढ़ें। कौन सा संस्करण सही है?
Sp3000

1
क्या इसे कमांड लाइन के तर्कों के रूप में पढ़ने की अनुमति है?
डेनिस

1
में के रूप में whattimeisit 07:21 08:39 08:00? ज़रूर!
वैलेस्ट

जवाबों:


10

सीजाम, 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

@ लाक्षयार्ग: प्रश्न कहता है कि वे प्रत्येक को एक अलग समय देते हैं । वह झूठा होगा यदि x = 0
डेनिस

@ डेनिस आप इसे और कम करने में सक्षम हो सकते हैं, अंत में पूर्ण विराम की आवश्यकता नहीं है ...
WallyWest

7

जावास्क्रिप्ट ( ईएस 6 ), 164 168 172

प्रत्येक पढ़ने के लिए, अन्य दो से दूरी को शांत करें। जो समान दूरी है वही आपको चाहिए। अगर एक से अधिक है, तो आप नहीं बता सकते।

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

4
@ लाक्षायगर्ग सं। Problem is they each give a different timeतो x 0. नहीं हो सकता है
edc65

प्रत्येक उत्थान के साथ, आपको मिलना चाहिए edc65++
एलेक्स ए।

4

पायथन 3, 166 163 बाइट्स

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

अंकगणितीय मिनट modulo 720 होने के साथ।


एक समान दृष्टिकोण (ए + एबीसी == 0) का उपयोग करके मैंने पाया कि छंटाई की आवश्यकता नहीं है। क्या आपने इससे बचने की कोशिश की?
edc65

@ edc65 मैंने इसके बजाय एक गिनती रखने की कोशिश की, लेकिन मुझे लगता है कि यह अधिक लंबा हो गया। मेरे पास शुरू में एक + एबीसी भी था, लेकिन f(और प्री-लिस्ट-कॉम्प लंबा है) के लिए बहुत सारी कॉलें हैं
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 की बदौलत मुझे इसे ठीक करने में मदद मिली।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.