Çalışırken geçerli saate en yakın saat emojisini döndürün


20

if/elseHer 30 dakika için büyük bir durum olabilir ama daha fazla matematik ve Unicode tabanlı çözüm arıyorum.

Saat emojileri: 🕐🕑🕒🕓🕔🕕🕖🕗🕘🕙🕚🕛🕜🕝🕞🕟🕠🕡🕢🕣🕤🕥🕦🕧. Doğru oluşturma desteğine sahip değilseniz, bunları aşağıda görebilirsiniz (aynı sırada değiller ve gördüklerinizden farklı görünebilirler) veya Unicode grafiğinde , sayfa 4. Unicode kod noktaları U + 1F550 (SAAT) FACE ONE OCLOCK) ile U + 1F567 (SAAT YÜZ İKİ otuz).

Zorluğunuz STDOUT'a en yakın saat yüzü emojisini geçerli sistem saatine (AM ve PM aynı şekilde işlemelidir) gönderen bir program yazmaktır. Örneğin, zaman t[5:15 <t <5:45) ise, 5:30 emojisini display gösterirsiniz.

Bu kod golf, bayt en kısa kod kazanır. Kodunuzu test etme zamanını kolayca belirtmek için bir yol eklemek isteyebilirsiniz.

Edge test kutuları

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

resim açıklamasını buraya girin


7
Bu soru şu anda burada değil ama muhtemelen kolay bir çözümdür. Objektif bir kazanma koşulu gerekir, ancak soru kodu-golf etiketlerseniz kazanan en kısa programı kim yazar olacak. Ayrıca biraz altında belirtilmiştir, ancak "çalıştırıldığında geçerli saate en yakın saat emojisini veren bir komut dosyası" diyebilirsiniz ve bu yeterli olmalıdır. Ayrıca, teknik olarak gerekli olmasa da, diğer dillerde gönderime izin vermenizi öneririm. (Birisi muhtemelen yine de Bash'de bir tane yapacak.)
yeraltı

Windows Komut istemi emojiyi desteklemiyor :(
stokastic

2
Mesajınızı, kuralları açıklığa kavuşturarak ve golf kodunu yaparak standartlarımızı karşılamaya çalışmak için düzenledim. Herhangi bir şeyi yanlış yorumladıysam düzenlemekten çekinmeyin.
NinjaBearMonkey

3
Xx: 15 ve xx: 45 nasıl yuvarlanmalıdır?
Peter Taylor

1
@PeterTaylor Test örneklerinde görüldüğü gibi, yuvarlanmaları gerekir (yani 1:45 => 2:00)
NinjaBearMonkey

Yanıtlar:


9

Yakut - 61 54 bayt

Python 3-79 77 75 74 bayt

edit: Bu Ruby, çok daha kısa olduğu ortaya çıkıyor çünküTime içe aktarılması gerekmiyor ve tamsayı bölümü varsayılan.

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

Aritmetik:

  • Time.now.to_i: Dönemden beri geçen saniye.
  • /900: Zamanı 15 dakikalık bölümler halinde birleştirin.
  • -3: -4çünkü karakterler saat 1'den başlıyor,+1 böylece yuvarlama aşağı doğru değil en yakın yarım saate kadar yapılır.
  • /2: Yarım saatlik segmentlerde birleştirin.
  • %24: Geçerli yarım saatlik segmenti 12 saatten alın.
  • a/2 + a%2*12: Tam saatlik karakterlerin yarım saatlik karakterlerden önce bir blok halinde gelip gelmediğini hesaba katın.

Yerel saat sürümü, 69 bayt:

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

Orijinal Python 3 sürümü:

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

Geçerli saati UTC olarak yazdırır. Python 2'ler sadece chr0-255 ve unichrsadece 0-65535 kabul eder . Python 3'te /her zaman kayan nokta bölümü ve //her zaman tamsayı bölümüdür.


Şunlar arasından parens kesebilir 12*(a%2)diğer sırayla yaparsan: a%2*12.
xnor

7

Bash + Coreutils, 60 bayt

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

Emojiler OSX terminalinde iyi çalışır, ancak Linux için (Ubuntu 14.04) sudo apt-get install ttf-ancient-fonts

Farklı zamanları test -d $timeetmek için tarih komutuna ekleyin . örneğin test etmek için 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

Bu kolayca dövülecek, ama burada elimden gelenin en iyisini yapacağım.

DÜZENLEME 1 : Şimdi 20 bayt kaydetmek için UTC'de Python yanıtı gibi yazdırılıyor.

DÜZENLEME 2: Değiştirildi new Date().getTime()için Date.now()10 bayt kaydedin.

DÜZENLEME 3: Değiştirildi Math.round(x)için ~~(x+.5)5 bayt kaydedin.

EDIT 4: Gereksiz kaldırıldı (ve &1023)7 bayt kaydetmek için daha evrensel bir UTF-16 kodlaması yaptığım bazı eski geliştirme sürümünden ayrıldı.

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

JavaScript gelmez emoji'yi izin, ancak UTF-16 iki karakter olarak kodlar içinde. Neyse ki, onları iki karakter olarak tanımlayabiliriz; ilk karakter de sabittir ( 0xD83D), diğer karakter ise değişir.

Alternatif, yerel saatte yazdırır, 137 132 125:


İle (d%2?23+d:d)aynı değil d+d%2*23mi?
Neil

4

CJam, 50 bayt

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

Algoritma basittir, zamanı en yakın 30 dakikaya yuvarlayın, 12:00 / PM'den bu yana kaç 30 dakika geçtiğini sayın, eğer sayı garipse, buna 24 ekleyin, kat 2'ye bölün ve ilk unicode'u bu kadar artırın kod saat doğru saat yüzünü almak için.

Ayrıca, 12 yerine 1 AM / PM ile başladığınızdan emin olun.

Test amacıyla aşağıdaki kodu kullanın:

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

Parçanın 3:H;geçerli saat ve45:M; parçanın geçerli dakikadır. Basitçe 3ve 45istenen değerle değiştirin .

Buradan çevrimiçi deneyin

Tarayıcınıza, işletim sisteminize ve yüklü yazı tiplerine bağlı olarak tüm unicode karakterler çevrimiçi sürümde doğru yazdırılamayabilir. Ama benim için, Windows 7 ile Firefox'ta hepsi iyi yazdırılıyor.


@ user23013 Güzel !. Ben bunu herhangi bir golf yapmadı gibi yeni bir cevap olarak göndermek gerektiğini düşünüyorum :)
Optimizer

3

CJam, 31 bayt

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

Test etmek için aşağıdaki programdaki saati değiştirebilirsiniz:

"🕐")[2014 12 19 22 14 1 901 5 -28800000]5<60b675+30/24%2mdC*++
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.