何時ですか?


25

手首に3つの時計を装着することで、文字通り時間を節約するのが好きです。問題は、それぞれ異なる時間を与えることです。1つの時計は実際の時刻からx分遅れています。1つの時計は実際の時間よりx分進んでいます。最後の時計は実際の時間を示しています。

問題は、どの時計の時刻が正しいかわからないことです...

各時計に表示される時間から、実際の時間を決定します。時間を判断できない場合は、「Look at the sun」を印刷してください。

入力: 単一のスペース文字で区切られた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時間制の時計を扱っていることを忘れないでください...午前も午後も気にしません...アナログ時計を扱っていると想像してください...


正確な時間とは、現在の現地時間を意味しますか?
オプティマイザー

7
@sanchises彼らは4時間離れているからです。12:00丁度間にある8:004:00...あまりにも、あなたが知っている
Siguza

1
出力はThe correct time is HH:MM完全な停止のない形式であると言いますが、最初の2つの例では完全な停止を含めるように進みます。どのバージョンが正しいですか?
Sp3000

1
コマンドライン引数として時刻を読み取ることは許可されていますか?
デニス

1
のようにwhattimeisit 07:21 08:39 08:00?もちろん!
WallyWest

回答:


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
デニス

@デニスあなたはそれをさらに減らすことができるかもしれません、最後に完全に停止する必要はありません
...-WallyWest

7

JavaScript(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

4
@LakshayGargいいえ。Problem is they each give a different timeしたがって、xを0にすることはできません。
edc6515年

あなたが得るそれぞれの賛成票で、あなたはすべきedc65++です。
アレックスA.

4

Python 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

算術は720を法とする分です。


同様のアプローチ(a + abc == 0)を使用すると、ソートは不要であることがわかりました。それを避けようとしましたか?
edc65

@ edc65私は代わりにカウントを維持しようとしましたが、より長くなったと思います。最初はa + abcもありましたが、それは多くの呼び出しですf(pre-list-compは長いです)
Sp3000

2

Pythonの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.