Ich mag wirklich Zeiten, die bestimmten Mustern folgen. Insbesondere mag ich Zeiten, in denen alle Ziffern gleich sind oder sich alle Ziffern rechnerisch von links nach rechts um eins erhöhen. Außerdem hasse ich es, wenn Leute Briefe in meine Zeit stecken, so dass all dieser Unsinn von AM / PM für mich tot ist. So sind meine Lieblingszeiten:
0000 0123 1111 1234 2222 2345
Zu meiner Beruhigung müssen Sie mir ein einzelnes Programm schreiben, das unter Berücksichtigung der aktuellen Zeit als Eingabe beide: (A) Wenn es jetzt nicht eine meiner Lieblingszeiten ist, sagt es mir beide (i) wie viele Minuten es sind seit meiner letzten Lieblingszeit und (ii) in wie vielen Minuten wird meine nächste Lieblingszeit eintreten; und (B) , wenn es ist jetzt eine meiner Lieblings - Zeiten liefert einen einzigen ‚Signalwert‘.
Eingang
Ihr Programm sollte (mit welcher Methode auch immer: Funktionsargument stdin
, Befehlszeilenargument usw.) die aktuelle Uhrzeit in einem der folgenden Formate akzeptieren :
Eine vierstellige Zeit als Zeichenfolge
Eine Ganzzahl, die links mit Nullen aufgefüllt werden kann, um eine vierstellige Zeit als Zeichenfolge zu erhalten
Eine Folge von vier (oder weniger) Ganzzahlen, die so angeordnet sind, dass die erste Ganzzahl in der Folge die am weitesten links stehende (signifikante) Ziffer in der Zeiteingabe ist (z. B.
0951
als[0, 9, 5, 1]
oder gültig dargestellt werden könnte[9, 5, 1]
).- Die Darstellung
0000
als Sequenz mit der Länge Null ist akzeptabel
- Die Darstellung
Im Fall einer Zeichenfolge-Eingabe sollte sie nur Ziffern enthalten, keine Doppelpunkte oder andere Satzzeichen. Es kann davon ausgegangen werden, dass Eingaben immer rund um die Uhr gültig sind:, HHMM
where 0 <= HH <= 23
und 0 <= MM <= 59
. Ignorieren Sie die Möglichkeit einer Schaltsekunde.
Ausgabe
Ihr Programm muss stdout
entweder (A) oder (B) liefern (Funktionsrückgaben usw. sind in Ordnung) , je nachdem, ob der Eingabewert eine Zielzeit ist oder nicht.
Für ein):
Geben Sie zwei numerische Werte in einem sinnvollen Format an, z. B .:
Single-String-Ausgabe mit passendem Begrenzer
Sequentielle Ganzzahl- / Zeichenfolgenausgaben, z. B.
bash
Drucken von zwei Zeilen nachstdout
:49 34
Sortierte Rückgabewerte der Länge zwei, z. B. eine Python-Liste, ein C-Array usw .:
[49, 34]
Die Werte können in beliebiger Reihenfolge angegeben werden. Beispielsweise wären beide der folgenden Ausgaben gültige Ausgaben für eine Eingabe von 1200
:
49 34
34 49
Die Reihenfolge und das Trennzeichen müssen jedoch für alle Eingabewerte gleich sein!
Für (B):
Produzieren Sie ein sonst unerreichbares Ergebnis. Es muss jedoch für alle sechs Zielzeiten das gleiche Ergebnis erzielt werden. Endlosschleifen sind ausgeschlossen.
Beispieleingänge / -ausgänge
YAY!!!
wird hier als anschauliches Beispiel verwendet und ist nicht vorschreibend.
Input Output
------ --------
0000 YAY!!!
0020 20 63
0105 65 18
0122 82 1
0123 YAY!!!
0124 1 587
0852 449 139
1111 YAY!!!
1113 2 81
1200 49 34
1234 YAY!!!
1357 83 505
1759 325 263
1800 326 262
1801 327 261
2222 YAY!!!
2244 22 61
2345 YAY!!!
2351 6 9
Das ist Code-Golf , also gewinnt der kürzeste Code in Bytes. Standardlücken sind nicht zulässig.
Antworten:
Jelly ,
3433323128 Bytes3 Bytes dank Mr. Xcoders
.ị
und³
Tricks.Probieren Sie es online!
Einige Teile sind genau wie in Jonathan Allans Antwort , aber ich poste sie, da ich denke, dass sie sich ausreichend von der Antwort unterscheidet und unabhängig von meiner Pyth-Antwort geschrieben wurde (und kürzer: D). Sollte auch Raum für Verbesserungen haben.
Die Eingabe ist eine Ganzzahl, die Ausgabe ist ein Array der vorherigen und nächsten Zeiten oder das leere Array für bestimmte Zeiten.
Erläuterung
Beispieleingabe verwenden
1200
.d³
wandelt die Zeit , um die Basis 100, in Stunden und Minuten:[12,0]
.ḅ60
Konvertiten von der Basis 60 gesamt Minuten zu erhalten:720
.;15
Paare mit 15:[720, 15]
.83,588
Erstellt das Array[83, 588]
.ṁ5
macht es Länge 5:[83, 588, 83, 588, 83]
.¤
kombiniert die beiden oben genannten Aktionen. Nur eine technische Sache.j
schließt sich das Paar mit dem Array:[720, 83, 588, 83, 588, 83, 15]
._\
subtrahiert jeden Array Wert aus dem ersten und bekommt Zwischenergebnisse:[720, 637, 49, -34, -622, -705, -720]
.ṠÞ
stabil sortiert diese nach signum:[-34, -622, -705, -720, 720, 637, 49]
.A
nimmt die absoluten Werte:[34, 622, 705, 720, 720, 637, 49]
.µ
startet eine neue monadische Kette. Auch hier eine technische..ị
nimmt die letzten und ersten Produkte[49, 34]
.×Ạ
wiederholt , dass einmal , wenn es keine Nullen oder Null mal anders:[49, 34]
.quelle
,
in,;
seitdem es als Listenliteral aufgenommen wurde).³
anstelle von100
ist erlaubt ) DerYAY!!!
Wert ist[0, 0]
immer gleich.xẠ
als Null - Filter , da ich von Art bevorzugen[]
über ,[0, 0]
weil es deutlich anders.JavaScript (ES6),
8783 Bytes4 Bytes gespart dank @ l4m2
Übernimmt die Eingabe als Zeichenfolge. Gibt entweder
0
ein Array mit zwei Elementen zurück.Testfälle
Code-Snippet anzeigen
Wie?
Das Ergebnis der
.every()
Schleife interessiert uns nicht . Sofern die Eingabe gültig ist, ist sie immer falsch. Was uns wirklich interessiert, ist, wann wir diese Schleife verlassen.Wir verlassen das Menü, sobald wir eine Lieblingszeit
i
(in Minuten) gefunden haben, die größer oder gleich der Referenzzeit istk
(diet
in Minuten umgerechnete Eingabezeit ). Wir kommen dann zurück,0
wenni == k
oder die 2 Verspätungen anders sind.quelle
t%100+(t/25>>2)*60
=>t-(t/100|0)*40
Befunge-93,
8885868074 BytesProbieren Sie es online!
Gibt die Anzahl der Minuten seit der letzten bevorzugten Zeit aus, gefolgt von der Anzahl der Minuten bis zur nächsten bevorzugten Zeit (getrennt durch die zweistellige Folge: Leerzeichen, Bindestrich). Wenn es bereits eine Lieblingszeit ist, wird eine einzelne Null zurückgegeben.
quelle
C 121 Bytes
Gibt eine neue Zeile aus, wenn die Zeit eine Lieblingszeit ist.
Probieren Sie es online!
quelle
Sauber , 126 Bytes
Definiert die Funktion
?
, EntgegennehmenInt
und Zurückgeben(Int, Int)
.Wenn das Argument eine Lieblingszeit ist, stürzt das aufrufende Programm mit ab
hd of []
.Probieren Sie es online!
quelle
Pyth,
484542 BytesProbieren Sie es online aus. Testsuite.
Der Code nimmt einen Zeitstring auf und gibt das vorherige und das nächste Mal als Array aus, oder
0
wenn die Zeit speziell ist.Interessanterweise ist ein imperativer Ansatz auch 42 Bytes:
Erläuterung
cz2
teilt input (z
) in zwei Zeichen auf.sM
wertet sie als ganze Zahlen aus.i
…60
Analysiert das resultierende Array mit zwei Elementen als Basis 60.,83 588
repräsentiert das Array[83, 588]
.*3
verdreifacht das zu[83, 588, 83, 588, 83, 588]
.P
Entfernt den letzten588
.+
…15
Ergänzt15
das Ende..u-NY
Beginnt mit der analysierten Zahl, subtrahiert jede Zahl im Array und gibt die Zwischenwerte zurück. Dies sind die Unterschiede zu jeder besonderen Zeit.J
weist diese Unterschiede zuJ
.*F
berechnet das Produkt der Differenzen. Dies wird 0 sein, wenn die Zeit speziell war.&
stoppt die Auswertung hier und gibt 0 zurück, wenn die Zeit speziell war.._DJ
Stable-Sortiert die Unterschiede nach Vorzeichen.K
speichert das Array inK
.e
Nimmt das letzte Element im Array._hK
Nimmt das erste Element im Array und negiert es.,
gibt die beiden als Array zurück.quelle
cz2 60
auf umschaltenc2z60
(dies entspricht Listen mit 4 Elementen)Jelly ,
33 3234 Bytes+3+2 Bytes zum Korrigieren, damit alle gewünschten Zeitausgaben gleich sind.muss ein kürzerer Weg sein!
Ein monadischer Link, der eine Liste mit vier Ziffern erstellt und eine Liste mit zwei ganzen Zahlen zurückgibt
- wenn es eine beliebte Zeit ist, sind beide Einträge Nullen.
Probieren Sie es online! oder sehen Sie sich die Testsuite an .
Wie?
quelle
Schale , 36 Bytes
Probieren Sie es online!
Vielen Dank an Zgarb , der mir erklärt hat, wie Ternaries im Chat funktionieren.
↑0
Ich habe versucht, Golf zu spielen , habe es aber aus irgendeinem Grund nicht zum Laufen gebracht (?). Dies ist meine erste nicht triviale Antwort auf Husk, und abgesehen davon bin ich ziemlich zufrieden damit. Der Wert, der stattdessen verwendet wird,YAY!!!
ist[]
(aber ich hoffe, dass sich dies für Golfzwecke ändern wird).Erläuterung
quelle
Kotlin , 293 Bytes
Verschönert
Prüfung
TIO
TryItOnline
quelle