Listen Sie bei einer Ganzzahl zwischen 0 und 141 (einschließlich) alle 24-Stunden-Zeiten auf, deren Einheiten für Stunde, Minute und Sekunde zu dieser Ganzzahl addiert werden.
Regeln der Hinzufügung
Zahlen werden nach ihrer Zeiteinheit und nicht nach einzelnen Ziffern addiert.
Nehmen Sie zum Beispiel 17:43:59
17 + 43 + 59 = 119
Denken Sie daran, dass dies ein Beispiel für das Hinzufügen von Ziffern ist . In Wirklichkeit würden Sie 119 eingeben und 17:43:59 wäre eines der Ergebnisse. Die Ausgabe sollte als HH: MM: SS oder H: MM: SS erfolgen.
Denken Sie auch daran, dass die höchstmögliche Zahl 141 ist, nämlich 23:59:59. Dies ist Codegolf, also gewinnt der niedrigste Betrag. Versuch und Irrtum sind erlaubt, aber es könnte einen besseren Weg geben, dies zu tun.
Bearbeiten: Bitte geben Sie an, wo in Ihrem Code der Eingabewert ist.
Antworten:
Jelly ,
16302920 BytesJetzt mit dem richtigen Ausgabeformat! Vielen Dank an Dennis für seine Hilfe beim Debuggen dieser Antwort. Golfvorschläge sind willkommen. Probieren Sie es online!
Edit: +14 Bytes von der Verwendung des richtigen Ausgabeformats. -1 Byte für das Entfernen eines zusätzlichen Leerzeichens. -3 vom Wechsel von
24,60,60
zu“ð<<‘
. -6 Bytes vom Ändern+100DḊ€€
aufd⁵
.Erläuterung
quelle
Bash, 71
Probieren Sie es online aus .
quelle
printf
ist hier teuer. Wenn Sie sicht
dem richtigen Format((t-$1))
for t in {0..23}+{00..59}+{00..59};{((${t//+0/+}-$1))||echo ${t//+/:};}
Perl 6 ,
6256 BytesÜberprüft einfach alle möglichen Kombinationen im Kreuzprodukt aller Stunden, Minuten und Sekunden.
quelle
Python 3 , 91 Bytes
Es gibt kürzere Lösungen mit
exec
(Python 2) oder Rekursion (Python 3), aber beide erfordern eine unzumutbare Menge an Speicher.Probieren Sie es online!
quelle
PowerShell ,
87.77ByteDank John L. Bevan 10 Byte gespeichert
Probieren Sie es online! (dies wird Zeitüberschreitung, es ist sehr langsam)
Erläuterung
Ziemlich einfach, beginnend mit der aktuellen
[datetime]
, addiere 1 Sekunde 86.399 mal, formatiere als Zeichenkette und behalte dann nur die, bei denen die Summe summiert.quelle
10000000
mit1e7l
zu speichern 4 Bytes ... oder sogar1e7
für ein zusätzliches Byte (ich glaube, ich hatte das umfassenL
zum Nutzen des Parameters, aber Ihr Ansatz vermeidet den Verdacht , dass Bedarf.1e7
mindestens 30 Minuten, und es war dasL
Postfix, das ich verpasste; Ich habe es vergessen und konnte keinen Weg finden, es auf int zu bringen, der kürzer als die Konstante war. Wer hat entschieden, dass[timespan]
ein[int]
als Zecken und ein[double]
als Tage ohnehin interpretiert ? Dasiex
Bit ist ziemlich brillant, obwohl es das Ganze ungemein langsamer macht.iex
Trick wurde von einem Tipp hier angepasst: codegolf.stackexchange.com/a/746/6776Haskell, 77 Bytes
quelle
Haskell, 90 Bytes
Gibt eine Liste von HH: MM: SS-Zeichenfolgen zurück, z . B.
f 140
->["22:59:59","23:58:59","23:59:58"]
.Es sind drei einfache Schleifen durch die Stunden, Minuten und Sekunden. Behalten und formatieren Sie alle Werte, bei denen die Summe die eingegebene Zahl ist
x
.quelle
Pyth - 30 Bytes
Nimmt alle möglichen Zeiten auf und filtert dann.
Test Suite .
quelle
Julia 0,5 , 69 Bytes
Probieren Sie es online!
quelle
Batch, 168 Bytes
Gibt einstellige Stunden aus.
quelle
Mathematica, 79 Bytes
quelle
Oktave,
83, 87 BytesProbieren Sie es online!
quelle
QBIC ,
8272 BytesDies ist eine unglückliche Angelegenheit in QBasic, da das Aufzählen, Zuschneiden und Voranstellen
0
bei Bedarf sehr kostspielig ist.Beispielausgabe:
ErklärungIch habe einen Roman darüber geschrieben:quelle
PowerShell , 67
79Bytes (böse Version)Da die Regeln nichts über das Abschließen in einer bestimmten Zeit (oder überhaupt) und nichts über das Fehlen von Duplikaten aussagen, ist hier eine schreckliche Lösung:
quelle
Schläger 39 Bytes
Ungolfed:
quelle
MATL , 29 Bytes
Probieren Sie es online!
Erläuterung
quelle
JavaScript,
122120 BytesNimmt eine zusätzliche leere Zeichenkette als Eingabe,
was ich vermute, zählt nicht für die Größe. Bytecount (einschließlich Verlauf) aktualisiert, um zwei Bytes für die Initialisierung der Zeichenfolge hinzuzufügen.quelle
JavaScript (ES6), 110
Weniger golfen
Prüfung
quelle
JavaScript, 96 Bytes
Erweiterte Ansicht:
Durchlaufen Sie alle möglichen Zeiten, indem Sie 86399 auf 1 schleifen.
Subtrahieren Sie alle 3 Zahlen vom Eingabewert, um einen falschen Wert zurückzugeben, wenn sich die drei Zahlen zum Eingabewert addieren. Wenn der Wert falsch ist, geben Sie den Wert aus.
quelle
Bash, 78 Bytes (mit einem BSD-Dienstprogramm) oder 79 Bytes (auch Nicht-BSD)
Dies ist ein bisschen länger als die nette 71-Byte-Bash-Lösung von @DigitalTrauma und @ hvd, aber mir gefiel die Idee, hier Zahlen in Basis 60 zu verwenden. Ich bin gespannt, ob jemand noch ein bisschen mehr Golf spielen kann.
Mit dem BSD-Standard-Jot-Utility:
Mit dem universelleren Dienstprogramm seq:
Die Idee ist, die Zahlen von 0 bis 83699 zu generieren und sie mit dc in die Basis 60 umzuwandeln. Die "Ziffern" in der Ausgabe der Basis 60 von dc sind zweistellige Zahlen von 00 bis 59, wobei die "Ziffern" durch Leerzeichen voneinander getrennt sind Dies listet alle gewünschten Zeiten von 00 00 00 bis 23 59 59 in fast dem benötigten Format auf.
Wenn Sie dies jedoch buchstäblich ausführen, sind Zahlen unter 60 ^ 2 keine dreistelligen Zahlen in der Basis 60, sodass die ersten 00 oder 00 00 fehlen. Aus diesem Grund generiere ich die Zahlen von 60 ^ 3 bis 60 ^ 3 + 83699; Dies stellt sicher, dass alle generierten Zahlen in Basis 60 genau 4 Stellen lang sind. Dies ist in Ordnung, solange ich die zusätzliche erste Stelle (01), die nicht benötigt wird, wegwerfe.
Sobald die gewünschten Zeiten generiert sind, nehme ich einfach jedes Vierfache von 01 00 00 00 bis 01 23 59 59, addiere die letzten drei Zahlen und subtrahiere das Argument $ 1. Wenn das 0 ist, nehme ich ab dem 3. Zeichen alles im Vierfachen (wirf die "01" weg), konvertiere mit tr Leerzeichen in Doppelpunkte und drucke das Ergebnis.
quelle
PowerShell , 91 bis
97Byte (einschließlich Eingabe)param($x)0..23|%{$h=$_;0..59|%{$m=$_;0..59|?{$h+$m+$_-eq$x}|%{"{0:0}:{1:00}:{2:00}"-f$h,$m,$_}}}
oder
param($x)0..23|%{$h=$_;0..59|?{($s=$x-$h-$_)-le59-and$s-ge0}|%{"{0:0}:{1:00}:{2:00}"-f$h,$_,$s}}
<\ s>Erweitert und kommentiert
NB: Von der @ Briantist-Version übertroffen: /codegolf//a/105163/6776
quelle