Herausforderung
Schreiben Sie den kürzesten Code, der alle Zeitdauern summieren kann, die im stdin erscheinen. Das Programm muss nur die Zeichenfolgen berücksichtigen, die mit einem der folgenden Muster übereinstimmen, und den Rest ignorieren.
HH:MM:SS (it will be interpreted as HH hours, MM minutes and SS seconds)
H:MM:SS (it will be interpreted as H hours, MM minutes and SS seconds)
MM:SS (it will be interpreted as MM minutes, SS seconds)
M:SS (it will be interpreted as M minutes, SS seconds)
Beispiele für Zeichenfolgen, die mit den aufgelisteten Mustern übereinstimmen:
12:00:01
2:03:22
00:53
9:13
Die Ausgabe sollte von der Form sein
HHh MMm SSs (that means HH hours, MM minutes and SS seconds with non-zero-padding)
Beispiel
STDIN
Sehen Sie sich das Begrüßungsvideo an.
Video: 10:37 min.
Sehen Sie sich die Video-Einführung zum Kurs an.
Video: 3:30 min. Sehen Sie sich das Video zur Verwendung der Lektionsübersicht an.
Video: 9:13 min.
In der Videoübersicht sehen Sie, wie Sie mit dem Epsilen-System Ihre Arbeit teilen können.
Video: 03:15 min.
Sehen Sie sich das Video an, um mehr über die Bewertung der akademischen Bereitschaft (STAAR) im US-Bundesstaat Texas zu erfahren.
Video: 1:05:26 min.
STDOUT
1h 32m 1s
quelle
10:4:56
? Entsprechend der aktuellen Spezifikation müssen sie als behandelt werden4m 56s
, Teile10
werden ignoriert. Gleiche Frage zu10:12:7
bedeutet es10m 12s
beim Ignorieren von7
? Oder kann der Umgang mit solchen Strings implementierungsdefiniert werden?1h 19m 18s
zur Ausgabe gekommen?37+30+13+15+26==121
,10+3+9+3+5==30
,1==1
, So erwarte ich1h 32m 01s
. Was ist falsch an dieser Logik? Ein solches Ausgabeformat ist auch dasjenige, das erwartet wird, nicht wahr?Antworten:
Pyth 105
Probieren Sie es online aus.
Dies erfordert die Eingabe von STDIN auf die gleiche Weise wie die Javascript-Antwort, da Text mit Zeilenumbrüchen in Anführungszeichen wie
\n
s steht.Probe:
Ausgabe
Beispiel für die Arbeit mit seltsamen Daten:
Ausgabe
(Nur der 10:10 und der 1:10 sind legitime Zeiten)
Der Hauptgrund dafür, dass dies so lange dauert, ist, dass Sie mit Pyth keine positiven Übereinstimmungen extrahieren können. Dies entspricht stattdessen allem, was keine gültige Zeit ist, und ersetzt es durch ein Leerzeichen. Durch Aufteilen auf Leerzeichen bleiben dann nur Zeiten und einige unberechenbare Zahlen übrig. Die überschüssigen Zahlen werden entfernt, indem nach
:
Zeichen gesucht wird , die aus ungültigen Zeiten entfernt wurden. Das könnte mit ziemlicher Sicherheit noch weiter golfen werden;)quelle
Javascript ES6, 138 Zeichen
Funktion, 139
Nimmt string als Argument und schreibt die Ausgabe in die Konsole:
Programm, 138
Funktion testen
Ausgabe
quelle
JavaScript, ES6,
208 200197 BytesIch weiß, das ist super lang, aber ich wollte die neuesten Funktionen von ES6, Rückwärtsfahren, Kartenverkleinern, Pfeilfunktionen und Array-Verständnis (Spread-Operator) kennenlernen.
Führen Sie das Snippet einfach in einem aktuellen Firefox aus.
Wie es funktioniert (ein bisschen ungolfed)
quelle
Bash (mit grep, sed, awk und date): 124 Bytes, 120 Bytes
Leiten Sie den Text einfach so ein:
Wie es funktioniert
0123456789:
quelle
Perl -
228201Es ist zufällig derselbe Algorithmus wie der des Optimierers (grep, split, reverse, add).
Ich bin kein Perl-Experte, daher kann die Anzahl der Bytes möglicherweise verringert werden.
Ungolfed
quelle
my
Schlüsselwörtern).Rebol - 174
Ungolfed + kommentiert:
Rebol wird mit einem eigenen
time!
Datentyp geliefert . Wie der obige Code dies nutzt, können Sie dem folgenden Beispiel (in der Rebol-Konsole) entnehmen:quelle
Groovy - 195
Ich kann nicht herausfinden, wie ich es mehr komprimieren kann.
Ungolfed
quelle
Mathematica 300 Zeichen
Diese kleine Übung nahm selbst für Mathematica viel Code in Anspruch. Sicher gibt es effizientere Möglichkeiten, dies zu tun.
Golf gespielt
Unter der Annahme, dass die Eingabe in gespeichert ist
txt
,Wie es funktioniert (mit unGolfed Code):
1-Finde die Zeiten.
2-Break in Stunden, Minuten, Sekunden
3-Summiere die Zeiten. Zeitobjekte sind Uhrzeiten. Das Subtrahieren eines Zeitobjekts von einem anderen gibt eine Dauer zurück, in diesem Fall 92.0167 Minuten.
QuantityMagnitude
Lässt die Maßeinheit fallen.4-Konvertieren Sie 92.0167 Minuten in Stunden, Minuten, Sekunden.
quelle
Perl, 146
Mein Eintrag druckt die Ausgabe mit einem Leerzeichen nach - ich hoffe, das ist in Ordnung
Wenn wir davon ausgehen können, dass es pro Eingabezeile nur ein Mal gibt, können wir 4 Zeichen trennen:
Diese arbeiten, indem sie die insgesamt verstrichenen Sekunden aufsummieren und diesen Wert anschließend formatieren.
quelle