Das Folgende ist von einer Frage inspiriert , die heute bei Stack Overflow gestellt wurde .
Bei einer gegebenen Anzahl von Mikrosekunden 0 <= n <= 86400000000
(z. B. 12345678900
) wird eine formatierte Zeichenfolge ausgegeben hh:mm:ss:000:000
, z 03:25:45:678:900
.
0 -> '00:00:00:000:000'
12345678900 -> '03:25:45:678:900'
86400000000 -> '24:00:00:000:000'
Ich habe eine Lösung in Python in 209 Bytes, aber kann es niedriger gehen?
hh:mm:ss.000000
wahrscheinlich besser (und einfacher) gewesen wäre. Ich kann es jetzt noch nicht ändern.Antworten:
Python 2,
8279 BytesErstellt den String und durchläuft eine Reihe von Divmods. Das einzig ausgefallene ist das
%7/2
, welches1000 -> 3
und abbildet60 -> 2
.quelle
Pyth, 31 Bytes
Probieren Sie es online aus: Demonstration
Erläuterung:
quelle
Bash + Coreutils, 61
Kürzeste "Mainstream" -Sprache bisher ...
Testausgang:
quelle
CJam,
37 3534 BytesDas ist ziemlich lang .. Golf jetzt ..
UPDATE: 1 Byte gespart dank @ Sp3000
Probieren Sie es hier online aus
quelle
C 97 Bytes
Testcode:
quelle
q (34)
Ich bin sicher, dass es kürzer sein kann
z.B
quelle
":"sv 0 8 11__[;8]15$2_($)"n"$1e3*
Julia,
1109695 BytesDadurch wird eine unbenannte Funktion erstellt, die eine Ganzzahl als Eingabe akzeptiert und eine Zeichenfolge zurückgibt. Um es zu nennen, geben Sie ihm einen Namen, z
f=t->...
.Ungolfed + Erklärung:
Beispiele:
quelle
C #
179175 BytesWenn Sie über integrierte Funktionen verfügen, können Sie diese verwenden.
Mit besserer Formatierung:
quelle
Excel,
6563 ZeichenAngenommen, Ihre Mikrosekunden sind in A1 :
Ausgabe:
quelle
Perl,
14178 Bytes77 Byte Code, +1 für das
-n
Flag. Laufen mit:Vielen Dank an Thomas Kwa und chilemagic, die meinen Code fast halbiert haben.
quelle
3600000000
kann sein36e8
.chomp($n=<STDIN>);
können Sie es als Einzeiler mit der-n
Flagge (die als 1 Zeichen zählt) ausführen . Sie brauchen auch nicht dieint(..)
um jeden$_
. Wenn wir auch Thomas 'Tipp anwenden, können wir es auf den Punkt bringen,echo 12345678900 | perl -ne'printf"%02d:%02d:%02d:%03d:%03d\n",$_/36e8,$_/6e7%60,$_/1e6%60,$_/1e3%1e3,$_%1e3'
und es könnte sogar einen kürzeren Weg geben!\n
in der Ausgabezeichenfolge. Sie können die Zeichenfolge auch durch"%02d:"x3 ."%03d:%03d"
printf"%02d:%02d:%02d:%03d:%03d\n",$_/36e8,$_/6e7%60,$_/1e6%60,$_/1e3%1e3,$_%1e3
Sie fügen ein zusätzliches Byte für das-n
Flag hinzu. Wenn Sie-nle
zum Beispiel verwenden, würde dies als zusätzliche 2 (für dasn
und dasl
) zählen. Sie erhalten das-
und dase
(oderE
wenn Sie es benötigensay
) kostenlos.Matlab - 88
89BytesErhalten Sie ein Byte mit einer Lösung, ohne die eingebaute Funktion zu verwenden:
Erstellen Sie eine Inline-Funktion, die ein numerisches Eingabeargument akzeptiert
t
und eine Zeichenfolge zurückgibt.Es verwendet eine vektorisierte Kombination von
fix
undmod
, um die Zeitelemente zu trennen und dann anzuzeigen.Es ist ein bisschen frustrierend, dass die Formatierung des Ausgabe-Strings so viel Zeit in Anspruch nimmt, mehr als die Berechnungen selbst ...
Prüfung:
89-Byte-Version:
Es teilt die Zahl auf und verwendet eine eingebaute Funktion für den Teil hh: mm: ss, der keine Mikrosekunden verarbeiten kann, sodass die Zeichenfolge mit einer Kombination aus
fix
undmod
Operationen vervollständigt wirdquelle
JavaScript (ES6),
128118116111 ByteDarin liegt wahrscheinlich ein gewisses Golfpotential.
Demo
Es ist ES6, also nur Firefox, für den Moment sowieso:
quelle
C
113103105 BytesEDIT: einige Bytes mehr abgeschoben
UPDATE: langer Typ wurde dank einiger Benutzer entfernt
Nicht die kürzeste C-Antwort, aber ich hatte ein bisschen Spaß mit Wagenrückläufen, also hatte ich das Gefühl, dass jemand dies mögen könnte.
Nennen Sie es wie folgt:
quelle
CoffeeScript, 127 Bytes
Nahm den Ansatz in der Antwort von ASCIIThenANSI . Es ist schade, dass die JavaScript- Konsolen-API keine Formatplatzhalter zum Auffüllen von Zahlen enthält.
quelle
Powershell, 153
Verwendung
quelle
F #,
111 92102 BytesErste Iteration: Grundidee.
Zweite Iteration: Kleinere Konstanten
Dritte Iteration: Korrekte Formatierung für einstellige Teile.
Beachten Sie, dass für diese Funktion ein int64 angegeben werden muss, um zu funktionieren.
Beispielausgaben:
quelle
PHP -
115102 BytesEine Lösung in 155 Bytes (hier aus Gründen der Lesbarkeit in 3 Zeilen eingeschlossen):
Die zweite Zeile berechnet (von innen nach außen) die genauen Werte der Komponenten, beginnend mit den Mikrosekunden.
Die kürzere Version (115 Bytes, aus Gründen der Lesbarkeit in zwei Zeilen eingeschlossen):
Außerdem werden eingebettete Zuweisungen verwendet, um die eingegebene Anzahl von Mikrosekunden in Millisekunden, Sekunden, Minuten und Stunden mithilfe von Gleitkommazahlen zu berechnen. Der Moduloperator (
%
) und das Dezimalzahlenformat (%d
) vonprintf()
werden dann verwendet, um sie zu Ganzzahlen zu zwingen (der Bruchteil wird ignoriert).Eine andere Lösung, die die Datumsfunktionen verwendet (102 Bytes)
Die Stunden: Minuten: Sekunden Teil wird von den PHP Datumsfunktionen behandelt
gmdate()
undstrtotime()
die Milli- und Mikrosekunden werden als Zeichenfolge aus dem Eingangswert extrahieren.Verwendung:
quelle
Java, 215 Bytes
Methode
f
führt einige Berechnungen durchn
, um die Stunden, Minuten usw. zu berechnenp
, und delegiert an Methode, um jeden Wert korrekt zu formatieren.Formatiert:
Verwendung:
quelle
Ruby - 82 Bytes
quelle