実行時に現在の時刻に最も近い時計の絵文字を返します


20

私はif/else30分ごとに大きな条件を持つことができますが、より多くの数学とUnicodeベースのソリューションを探しています。

時計の絵文字は次のとおりです。適切なレンダリングサポートがない場合は、以下(同じ順序ではなく、表示と異なる場合があります)またはUnicodeチャート(ページ4)で表示できます。これらはUnicodeコードポイントU + 1F550(CLOCK FACE ONE OCLOCK)からU + 1F567(CLOCK FACE TWELVE-THIRTY)まで。

あなたの課題は、現在のシステム時刻に最も近い文字盤の絵文字をSTDOUTに出力するプログラムを書くことです(AMとPMは同じように扱われるべきです)。たとえば、時間tが[5:15 <t <5:45)の場合、5:30絵文字🕠を表示します。

これはコードゴルフなので、バイト単位の最短コードが優先されます。コードをテストする時間を簡単に指定する方法を含めることができます。

エッジテストケース

Time   Output  Written
----------------------
11:48  🕛       12:00
3:15   🕞       3:30
9:45   🕙       10:00

ここに画像の説明を入力してください


7
この質問は現在ここでは話題になりませんが、おそらく簡単に修正できるでしょう。客観的な勝利条件が必要ですが、質問コードゴルフにタグを付けると、最短のプログラムを書いた人が勝者になります。また、指定が少し不足していますが、「実行時に現在の時刻に最も近い時計の絵文字を出力するスクリプト」と言えば十分です。また、技術的には必須ではありませんが、他の言語での投稿を許可することをお勧めします。(とにかく誰かがBashでおそらく1つを行うでしょう。)
地下

Windowsコマンドプロンプトは絵文字をサポートしていません:(
stokastic 14

2
あなたの投稿を編集して、ルールを明確にし、ゴルフをコード化することで、私たちの基準を満たすようにしました。間違って解釈した場合は、自由に編集してください。
NinjaBearMonkey 14

3
xx:15およびxx:45はどのように丸める必要がありますか?
ピーターテイラー14

1
@PeterTaylorテストケースで見られるように、それらは切り上げられるべきです(すなわち1:45 => 2:00)
NinjaBearMonkey 14

回答:


9

Ruby — 61 54バイト

Python 3 — 79 77 75 74バイト

編集: Rubyでは、Timeインポートする必要がなく、整数除算がデフォルトであるため、これははるかに短いことがわかりました。

a=(Time.now.to_i/900-3)/2%24
puts""<<128336+a/2+a%2*12

算術:

  • Time.now.to_i:エポックからの秒数。
  • /900:時間を15分のセグメントに結合します。
  • -3-4文字は1時から始まるため+1、下方向ではなく、30分単位で丸められます。
  • /2:30分のセグメントに結合します。
  • %24:12時間のうち、現在の30分セグメントを取得します。
  • a/2 + a%2*12:1時間の文字が30分文字の前にブロックに入るという事実を説明します。

現地時間バージョン、69バイト:

n=Time.now
a=((n.to_i+n.gmtoff)/900-3)/2%24
puts""<<128336+a/2+a%2*12

オリジナルのPython 3バージョン:

import time
a=int((time.time()/900-3)/2%24)
print(chr(128336+a//2+a%2*12))

現在の時刻UTCを出力します。Python 2 chrは0〜255、および0〜65535のみを受け入れunichrます。Python 3では、/常に浮動小数点除算で//あり、常に整数除算です。


12*(a%2)他の順序で行う場合は、括弧を切り取ることができますa%2*12
XNOR

7

Bash + Coreutils、60バイト

date +%I\ 60*%M+45-30/24%%2+2~C*+C8335+0PP|dc|iconv -f ucs-4

絵文字はOSX端末で正常にレンダリングされますが、Linux(Ubuntu 14.04)の場合は、 sudo apt-get install ttf-ancient-fonts

異なる時間をテストする-d $timeには、dateコマンドに挿入します。例:12:59のテスト:

date -d 12:59 +%I\ 60*%M+45-30/24%%2+2~C*+C8335+0PP|dc|iconv -f ucs-4

5

JavaScript – 137 117 107 102 95

これは簡単にbeatられますが、ここでベストを尽くします。

編集1:20バイトを節約するために、Pythonの回答のようにUTCで印刷するようになりました。

編集2:10バイトを保存new Date().getTime()するDate.now()ように変更されました。

編集3: 5バイトを保存Math.round(x)する~~(x+.5)ように変更されました。

編集4:不要なもの(を削除&1023)し、7バイトを節約するためにもっと普遍的なUTF-16エンコーディングを行った古い開発バージョンから残しました。

d=~~(Date.now()/18e5+.5)%24;d+=d<2?24:0;alert(String.fromCharCode(55357,56655+(d%2?23+d:d)/2));

JavaScript では絵文字を使用できますが、UTF-16では絵文字を2文字としてエンコードします。幸いなことに、単純に2つの文字として定義できます。最初の文字も定数(0xD83D)ですが、他の文字は変更されます。

代わりに、現地時間で印刷し、 137 132 125:


(d%2?23+d:d)と同じではありませんd+d%2*23か?
ニール

4

CJam、50バイト

"🕐":i~et3=C%60*et4=+30d/mo2m24+24%_2%24*+2/+]:c

アルゴリズムは単純で、時間を30分単位で四捨五入し、午前12時から午後30時までの経過時間を数え、数値が奇数の場合は24を加算し、2でフロア除算し、その数だけ初期Unicodeをインクリメントします適切な時計の文字盤を取得するためのコードポイント。

また、12ではなく午前1時から開始するようにしてください。そこでオフセットを取ります。

テストの目的で、次のコードを使用します。

3:H;45:M;"🕐":i~HC%60*M+30d/mo2m48+48%_2%24*+2/+]:c

どこ 3:H;部分は現在の時間であり、45:M;部分は現在の時間の分です。単純に置き換える3と、45目的の値を持ちます。

こちらからオンラインでお試しください

ブラウザやOS、インストールされているフォントによっては、すべてのUnicode文字がオンラインバージョンで正しく印刷されない場合があります。しかし、私にとっては、Windows 7を搭載したFirefoxではすべて問題なく印刷できます。


@ user23013いいね!。私はその中でゴルフをしなかったので、新しい答えとしてそれを投稿すべきだと思います:)
オプティマイザー14

3

CJam、31バイト

"🕐")et5<60b675+30/24%2mdC*++

次のプログラムで時間を変更してテストできます。

"🕐")[2014 12 19 22 14 1 901 5 -28800000]5<60b675+30/24%2mdC*++
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.