Ich kann eine große if/else
Bedingung für jede 30 Minuten haben, aber ich suche mehr Mathe und Unicode-basierte Lösung.
Hier sind Uhr Emojis::. Wenn Sie keine ordnungsgemäße Renderunterstützung haben, können Sie diese unten (sie sind nicht in derselben Reihenfolge angeordnet und können anders aussehen als die angezeigten) oder im Unicode-Diagramm auf Seite 4 anzeigen. Sie entsprechen den Unicode-Codepunkten U + 1F550 (CLOCK FACE ONE OCLOCK) bis U + 1F567 (CLOCK FACE TWELVE-THIRTY).
Ihre Herausforderung besteht darin, ein Programm zu schreiben, das an STDOUT das Zifferblatt ausgibt, das der aktuellen Systemzeit am nächsten kommt (AM und PM sollten gleich behandelt werden). Wenn zum Beispiel die Zeit t
[5:15 <t <5:45) ist, würden Sie das 5:30 Emoji 🕠 anzeigen.
Das ist Code-Golf, also gewinnt der kürzeste Code in Bytes. Möglicherweise möchten Sie eine Möglichkeit angeben, die Zeit zum Testen des Codes auf einfache Weise festzulegen.
Edge-Testfälle
Time Output Written
----------------------
11:48 🕛 12:00
3:15 🕞 3:30
9:45 🕙 10:00
Antworten:
Rubin -
6154 BytesPython 3 - 79 77 75 74 Bytesedit: Es stellt sich heraus, dass dies in Ruby viel kürzer ist, da
Time
es nicht importiert werden muss und die Ganzzahldivision die Standarddivision ist.Arithmetik:
Time.now.to_i
: Sekunden seit der Epoche./900
: Kombinieren Sie die Zeit in 15-Minuten-Segmente.-3
:-4
weil die Zeichen um 1 Uhr beginnen,+1
sodass auf die nächste halbe Stunde gerundet wird und nicht abwärts./2
: In halbstündigen Abschnitten kombinieren.%24
: Aktuelles halbstündiges Segment von 12 Stunden abrufen.a/2 + a%2*12
: Berücksichtigen Sie, dass Zeichen für eine ganze Stunde in einem Block vor Zeichen für eine halbe Stunde stehen.Ortszeitversion, 69 Bytes:
Ursprüngliche Python 3-Version:
Druckt die aktuelle Uhrzeit UTC. Python 2
chr
akzeptiert nur 0-255 undunichr
nur 0-65535. In Python 3/
ist dies immer eine Gleitkommadivision und//
eine Ganzzahldivision.quelle
12*(a%2)
wenn Sie es in der anderen Reihenfolge tun:a%2*12
.Bash + Coreutils, 60 Bytes
Emojis rendern gut auf dem OSX-Terminal, aber für Linux (Ubuntu 14.04) müssen Sie
sudo apt-get install ttf-ancient-fonts
Fügen Sie zum Testen verschiedener Zeiten
-d $time
den Befehl date ein. zB zum Testen 12:59:quelle
JavaScript -
13711710710295Dies wird leicht zu übertreffen sein, aber ich werde hier einfach mein Bestes geben.
EDIT 1 : Druckt jetzt in UTC wie die Python-Antwort, um 20 Bytes zu sparen.
EDIT 2: Geändert
new Date().getTime()
zuDate.now()
, um 10 Bytes zu sparen.EDIT 3: Geändert
Math.round(x)
zu~~(x+.5)
, um 5 Bytes zu sparen.BEARBEITUNG 4: Unnötig entfernt
(
und&1023)
aus einer alten Entwicklungsversion entfernt, in der ich eine universellere UTF-16-Codierung durchgeführt habe, um 7 Bytes zu sparen.JavaScript ist für Emojis erlauben, aber in UTF-16 , die sie als zwei Zeichen kodiert. Zum Glück können wir sie einfach als zwei Zeichen definieren. Das erste Zeichen ist ebenfalls konstant (
0xD83D
), während sich das andere ändert.Alternativ, Drucke in Ortszeit,
137132125Code-Snippet anzeigen
quelle
(d%2?23+d:d)
dasselbe wied+d%2*23
?CJam, 50 Bytes
Der Algorithmus ist einfach, rund um die Zeit auf die nächsten 30 Minuten, zählen Sie, wie viele 30 Minuten seit 12 Uhr / nachmittags vergangen sind. Wenn die Zahl ungerade ist, addieren Sie 24 dazu, teilen Sie den Floor durch 2 und erhöhen Sie den anfänglichen Unicode um so viele Codepunkte, um das richtige Zifferblatt zu erhalten.
Stellen Sie außerdem sicher, dass Sie mit 1 Uhr morgens / nachmittags statt mit 12 Uhr beginnen, und nehmen Sie dort einen Versatz vor.
Verwenden Sie zu Testzwecken den folgenden Code:
Dabei ist der
3:H;
Teil die aktuelle Stunde und der45:M;
Teil die aktuelle Minute der Stunde. Einfach ersetzen3
und45
mit dem gewünschten Wert.Probieren Sie es hier online aus
Abhängig von Ihrem Browser und Betriebssystem sowie den installierten Schriftarten werden möglicherweise nicht alle Unicode-Zeichen in der Online-Version korrekt gedruckt. Aber für mich drucken alle gut auf Firefox mit Windows 7.
quelle
CJam, 31 Bytes
Sie können die Zeit in dem folgenden Programm ändern, um es zu testen:
quelle