Ursprünglich gepostet (und gelöscht) von @Tlink , was höchstwahrscheinlich von dieser StackOverflow-Frage inspiriert wurde .
Da es eine Schande war, dass es gelöscht wurde, weil es im Allgemeinen eine gute Herausforderung zu sein schien, dachte ich, ich würde es mit den richtigen Formatierungen und Regeln neu veröffentlichen. (Ich habe versucht, @Tlink zu kontaktieren und seine / ihre Erlaubnis zum Posten zu erhalten, aber (s) er antwortet nicht mehr, weshalb ich mich entschlossen habe, es jetzt selbst zu posten.)
Eingabe: Sechs Ziffern.
Ausgabe: Entweder die erste oder die letzte gültige Zeit im 24-Stunden-Format ( 00:00:00
bis 23:59:59
). (Sie können selbst entscheiden, ob Sie die erste oder die letzte gültige Zeit ausgeben möchten.)
Beispiel:
Bei den Eingaben 1,8,3,2,6,4
können die folgenden Zeiten erstellt werden:
12:36:48 12:38:46 12:46:38 12:48:36
13:26:48 13:28:46 13:46:28 13:48:26
14:26:38 14:28:36 14:36:28 14:38:26
16:23:48 16:24:38 16:28:34 16:28:43
16:32:48 16:34:28 16:38:24 16:38:42
16:42:38 16:43:28 16:48:23 16:48:32
18:23:46 18:24:36 18:26:34 18:26:43
18:32:46 18:34:26 18:36:24 18:36:42
18:42:36 18:43:26 18:46:23 18:46:32
21:36:48 21:38:46 21:46:38 21:48:36
23:16:48 23:48:16
Also geben wir entweder 12:36:48
oder 23:48:16
in diesem Fall als erstes / letztes aus.
Herausforderungsregeln:
- Geben Sie an, ob Sie in Ihrer Antwort den ersten oder den letzten gültigen Zeitpunkt ausgegeben haben.
- I / O ist flexibel. Die Eingabe kann aus sechs getrennten Ganzzahlen bestehen. eine Zeichenkette mit den sechs Ziffern; eine ganzzahlige Liste / Array; eine einzelne (möglicherweise oktale) Zahl; usw. Die Ausgabe kann eine korrekt geordnete Liste / Reihe von Ziffern sein. ein String in dem Format
HH:mm:ss
/HHmmss
/HH mm ss
; Jede Ziffer wird mit einem Trennzeichen für neue Zeilen gedruckt. usw. Ihr Anruf. - Sie können die Ziffern in beliebiger Reihenfolge eingeben, damit sie bereits von der niedrigsten zur höchsten oder umgekehrt sortiert werden können.
- Wenn mit den angegebenen Ziffern (dh
2,5,5,5,5,5
) keine gültige Uhrzeit erstellt werden kann , machen Sie dies auf eine beliebige Weise deutlich. Kann zurückkehrennull
/false
;"Not possible"
; Absturz mit einem Fehler; usw. (Sie können keine ungültige Zeit wie55:55:52
oder eine andere gültige Zeit wie ausgeben00:00:00
.) Geben Sie an, wie Eingaben behandelt werden, für die keine gültige Zeit erstellt werden kann. - Sie dürfen nicht alle möglichen gültigen Zeiten ausgeben. Es sollte nur das früheste / späteste ausgegeben / zurückgesandt werden.
24
Stunden (dh24:00:00
) oder60
Minuten / Sekunden (dh00:60:60
) sind nicht gültig. Die Bereiche gelten[00-23]
für Stunden sowie[00-59]
für Minuten und Sekunden.
Allgemeine Regeln:
- Das ist Code-Golf , also gewinnt die kürzeste Antwort in Bytes.
Lassen Sie sich von Code-Golf-Sprachen nicht davon abhalten, Antworten mit Nicht-Codegolf-Sprachen zu veröffentlichen. Versuchen Sie, für jede Programmiersprache eine möglichst kurze Antwort zu finden. - Für Ihre Antwort gelten Standardregeln. Daher dürfen Sie STDIN / STDOUT, Funktionen / Methoden mit den richtigen Parametern und vollständige Programme vom Rückgabetyp verwenden. Ihr Anruf.
- Standardlücken sind verboten.
- Fügen Sie nach Möglichkeit einen Link mit einem Test für Ihren Code hinzu.
- Fügen Sie ggf. auch eine Erklärung hinzu.
Testfälle:
Input: Earliest output: Latest output:
1,2,3,4,6,8 12:36:48 23:48:16
2,5,5,5,5,5 None possible None possible
0,0,0,1,1,1 00:01:11 11:10:00
1,1,2,2,3,3 11:22:33 23:32:11
9,9,9,9,9,9 None possible None possible
2,3,5,5,9,9 23:59:59 23:59:59
1,2,3,4,5,6 12:34:56 23:56:41
0,0,0,0,0,0 00:00:00 00:00:00
1,5,5,8,8,8 18:58:58 18:58:58
1,5,5,5,8,8 15:58:58 18:58:55
1,1,1,8,8,8 18:18:18 18:18:18
23:48:16
für das Beispiel keine gültige Ausgabe?06:08:60
gültig, wenn in dieser Minute eine Schaltsekunde aufgetreten ist?60
Minuten und Sekunden sind ungültig. Bereiche sind[00-23]
,[00-59]
und[00-59]
. Wird dies in der Herausforderung verdeutlichen.Antworten:
C (GCC) ,
186174 BytesProbieren Sie es online!
-12 Bytes dank Kevin Cruijssen
Wahrscheinlich nicht optimal, aber es funktioniert. Seltsamerweise erfordert die gcc-Implementierung auf TIO aus irgendeinem Grund mit 7 Argumenten, dass Sie sie tatsächlich bereitstellen, oder sie schlägt fehl. Auf meinem Rechner ist das allerdings unnötig.
Format: G (X, 0,6) -> Y wobei X die 6-stellige Zahl ist, deren Ziffern verwendet werden sollen, und Y die 6-stellige Zahl ist, die, wenn sie als Zeit genommen wird (durch Einfügen: passend), minimal ist.
quelle
{0,1,10,100,1000,10000,100000}
auf{0,1,10,100,1e3,1e4,1e5}
. Außerdem können Sie Golffor(I=0;I<F;++I){E=O%10;M=G(O/10,L*10+E,F-1);T=T>M?M:T;O=(O/10)+E*D[F];}
auffor(I=0;I++<F;M=G(O/10,L*10+E,F-1),T=T>M?M:T,O=(O/10)+E*D[F])E=O%10;
, und entfernen Sie die Klammern um dieif
. Versuchen Sie es online 174 Bytes . Auch das gefällt mirG(O,L,F,T,I,M,E)
. :)...1e3,1e4,1e5}
hat das nicht funktioniert. Danke für den Vorschlag.Haskell ,
1149686 BytesJetzt mit weniger strenger Ausgabe. Nimmt die Eingabe als Ziffernfolge und vergleicht die Permutationen mit den Grenzwerten mit dem Listenvergleich. Bei Minuten und Sekunden wird nur die erste Ziffer geprüft. Stürzt ab und brennt, wenn keine Permutation gültig ist.
Probieren Sie es online!
quelle
Python 2 ,
13111511210910588 BytesProbieren Sie es online!
I / O sind Listen von ganzen Zahlen
Wirft einen Fehler, wenn keine Zeiten möglich sind
Alternative:
Python 2 , 88 Bytes
Probieren Sie es online!
Gibt die späteste Zeit zurück
Gibt ein leeres Tupel für ungültige Zeiten zurück
Gerettet
quelle
05AB1E ,
2015 BytesEingabe als sortierte Zeichenfolge.
Die Ausgabe ist die kürzeste Zeit als Zeichenfolge.
Falls keine Lösung vorliegt, wird eine leere Liste ausgegeben.
Probieren Sie es online!
quelle
JavaScript (ES6),
938988 BytesErwartet ein Array mit 6 Ziffern, sortiert vom niedrigsten zum höchsten. Gibt entweder die 6-stellige Zeichenfolge der ersten gültigen Zeit zurück oder
false
wenn keine Lösung vorhanden ist.Probieren Sie es online!
Kommentiert
Wir probieren rekursiv alle Permutationen der Eingabe aus, bis wir eine finden, die einen Hybridtest sowohl unter Verwendung von Arithmetik als auch eines regulären Ausdrucks besteht.
quelle
Japt , 17 Bytes
Übernimmt die Eingabe als Ziffernfolge und gibt die erste gültige Zeit aus. Endlos wiederholbar, wenn keine gültige Zeit vorhanden ist.
Versuch es
Erläuterung
quelle
Retina ,
7774696562 BytesProbieren Sie es online! Gibt die früheste Zeit oder die leere Zeichenfolge aus, wenn keine Zeit gefunden werden kann. Bearbeiten:
58 Bytes dank @TwiNight gespeichert. Erläuterung:Generieren Sie alle Permutationen. Das
:
funktioniert so, wie der String die Permutationen generiert und endet am Anfang.Ordne die Zeiten nacheinander an.
Geben Sie die erste gültige Zeit aus.
quelle
L0
0G
eigentlich.Rot ,
157124 BytesVielen Dank an Kevin Cruijssen, der mich daran erinnert hat, die Beschreibungen genauer zu lesen!
Probieren Sie es online!
Nimmt eine sortierte Zeichenfolge als Eingabe. Gibt zurück,
none
wenn es nicht möglich ist, Zeit zu machen.Erläuterung:
quelle
sort
am Start nötig? In der Herausforderung sage ich: " Sie dürfen die Ziffern in einer beliebigen Reihenfolge nehmen, damit sie bereits von der niedrigsten zur höchsten oder umgekehrt sortiert werden können. "Python 2 , 78 Bytes
Probieren Sie es online!
Arnauld hat ein Byte gespeichert. Vielen Dank!
Erwartet eine Liste wie
['1','2','3','4','6','8']
in sortierter Reihenfolge:Gibt eine Ganzzahl wie
123648
für 12:36:48 aus. Ich hoffe das ist akzeptabel.quelle
62**3
anstelle von verwenden240000
?Gelee , 15 Bytes
Probieren Sie es online!
Gepostet nach einer Anfrage. Der Ansatz ist derselbe wie bei der anderen Antwort, diese Antwort wurde jedoch unabhängig entwickelt.
quelle
Japt ,
3923 BytesIch bin mir ziemlich sicher, dass es einen kürzeren Weg gibt, aber ich wollte versuchen, Date-Objekte in Japt zu verwenden.
Nimmt die Eingabe als sortiertes Array von Zahlen, gibt die letzte gültige Zeit zurück oder gibt eine leere Ausgabe aus, wenn keine vorhanden ist.
10
Pfundverloren dank Shaggy .Probieren Sie es hier aus .
quelle
Ruby ,
68 67 62 5655 BytesProbieren Sie es online!
Eingabe: Sortiertes Array von Ziffern (als ganze Zahlen).
Ausgabe: Array von Ziffern oder
nil
falls keine Lösung gefunden wurdequelle
eval "
denke ich.a*9+b<22
für ein Byte tun .Gelee , 17 Bytes
Ich bin mir fast sicher, dass dies nicht der kürzeste Weg ist ... wir werden uns das später noch einmal ansehen :)
Probieren Sie es online!
quelle
Wolfram Language (Mathematica) , 63 Byte
Probieren Sie es online!
Nimmt eine sortierte Ziffernliste als Eingabe. Gibt
Missing[NotFound]
für ungültige Eingaben zurück.Erläuterung
Finde alle Permutationen der Eingabe. Da die Eingabe sortiert ist, wird garantiert, dass alle gültigen Zeiten in aufsteigender Reihenfolge sind.
Finden Sie die erste Liste, die passt ...
Das erste Element, markiert
a
ist 0, 1 oder 2 ist , und kennzeichnen die zweiten, dritten und fünften Elementeb
,c
undd
jeweils ...... so dass
a*b
weniger als 10d
undc
weniger als 6 sind, mitd >= c
.Der Trick ist, dass für alle Zahlen
00
bis24
das Produkt der beiden Ziffern höchstens 9 ist und die möglichen ungültigen Zahlen25
bis29
(da wir die erste Ziffer zwingen, 0, 1 oder 2 zu sein) das Produkt von mindestens 10 haben.quelle
Pyth , 37 Bytes
Testsuite
Erläuterung:quelle
Perl 5 mit
-palF
73 BytesProbieren Sie es online!
Gibt
HHmmss
eine leere Zeile für ungültige Einträge aus.Jede Antwort, die ich kürzlich gemacht habe, wurde
glob
für Permutationen verwendet ... Seltsam!quelle
Bash + GNU sed,
83,72, 69 Bytesseq 0 86399|sed "s/^/date +%T -ud@/e;h;`printf s/%d//\; $@`/\w/d;x;q"
Wie es funktioniert
Generieren Sie mit dem Befehl + GNU-sed e (xecute) alle möglichen Zeitreihen für die Zeitstempel im Bereich von 0 bis 86399 vor
date
.%seq 0 86399|sed "s/^/date +%T -ud@/e;h;"
Generieren Sie ein
sed
Skript mit 6 sequentiellen Ersetzungsbefehlen für jede eingegebene Ziffer.%echo sed `printf s/%d//\; $@`
Wenden Sie dann Substitutionen an, entfernen Sie alle Eingabezeilen, die noch mindestens eine Ziffer enthalten, und drucken Sie die erste übereinstimmende Zeile aus (die ursprüngliche Zeitzeichenfolge wird mit aus dem Haltebereich extrahiert
x
).Prüfung
Probieren Sie es online!
quelle
Kotlin ,
396391389 BytesKeine Ahnung, wie man das verkleinert. Ich denke, es ist doppelt so viel wie möglich. Erzeugt früheste Zeit. Danke an Kevin für 7 Bytes!
Probieren Sie es online!
quelle
var l=0>1
undvar e=1>0
? Auch warum sind diel=l
unde=e
notwendig? Zwei Dinge, die beim Golfen zu funktionieren scheinen, sindvar e=1>0
dasvar e=!l
Entfernen des Platzes vorher"None"
. Auch jede Falschgeldausgabe ist in Ordnung,"None"
kann also auch gerecht sein0
."0"
kann einfach sein0
0
fehlerfrei aus. Und Ihre aktuelle Funktion gibt keinen Rückgabetyp an, soweit ich das beurteilen kann. Wird es also nicht implizit als Objekt zurückgegeben? PS: Ich kenne Kotlin überhaupt nicht, habe es nur ohne Anführungszeichen versucht und die Ergebnisse waren die gleichen. ;) Vielleicht funktioniert etwas anderes nicht, was mir nicht bewusst ist.MATL ,
3130 BytesProbieren Sie es online!
Die Eingabe ist 6 Ganzzahlen, die Ausgabe ist die minimale Stunde, Minute und Sekunde in einem Array. Abstürze bei Eingaben, bei denen eine solche Zeit nicht möglich ist.
(-1 Byte dank @Luis Mendo.)
quelle
2&A
durch!A
, da die binäre Matrix nie einen Zeilenvektor seinPerl 6 , 43 Bytes
Probieren Sie es online!
Erwartet ein sortiertes Eingabearray. Gibt
Nil
für ungültige Eingaben zurück.quelle
Stax , 15 Bytes
Führen Sie es aus und debuggen Sie es
Für die Eingabe wird eine Zeichenfolge mit sortierten Ziffern benötigt. Es wird die erste Permutation zurückgegeben, die einige Kriterien erfüllt.
quelle
Retina ,
5847 BytesProbieren Sie es online!
Die Eingabe erfolgt 6-stellig in sortierter Reihenfolge. Die Ausgabe besteht aus 6 Ziffern, die die früheste gültige Zeit darstellen, oder einer leeren Zeichenfolge, wenn keine gültige Zeit vorhanden ist.
EDIT: Ich war ein Idiot, -9 Bytes
Erläuterung
Algorithmus
Der Kürze halber definieren wir eine niedrige Ziffer als 0-5 und eine hohe Ziffer als 6-9.
Ordnen Sie zunächst die Ziffern neu an, sodass "Niedrig" oder "Hoch" für jede Position korrekt ist. Die richtige Anordnung für jede Anzahl von hohen Stellen in der Eingabe:
Da bei einer eventuellen Neuanordnung die endgültige Überprüfung der Eingabe mit mehr als 4 hohen Ziffern fehlschlagen würde, können wir diesen Fall vollständig ignorieren.
Sortieren Sie dann die Tiefs und Hochs einzeln. In Kombination mit der Neuanordnung ergibt dies den niedrigsten Wert, der die Einschränkungen für Minute und Sekunde erfüllt. Dies gibt also die früheste gültige Zeit an, falls eine existiert.
Überprüfen Sie abschließend, ob wir eine gültige Zeit haben. Wenn nicht, verwerfen Sie die Zeichenfolge.
Programm
LHH
Stimmt mit den ersten beiden Ziffern überein und tauscht sie aus.HLH
Wiederholen Sie dies, bis keine weiteren mehrLHH
vorhanden sind. Dies ergibt die richtige Anordnung.Eigentlich habe ich gelogen. Es ist keine Sortierung erforderlich, da 1) das Vertauschen nur zwischen benachbarten Ziffern und nur zwischen einem niedrigen und einem hohen Wert erfolgt; und 2) die Eingabe wird sortiert. Die Tiefs und Hochs sind also bereits einzeln sortiert.
Behält die Zeichenfolge nur bei, wenn es sich um eine gültige Zeit handelt
quelle