Ich habe einen blöden alten Wecker mit zwei Knöpfen: hourund minute. Die hourTaste erhöht die Stunde eines eingestellten Alarms und minutedie Minutenzeit eines eingestellten Alarms. Einige clevere Designer erkannten jedoch, dass das gleichzeitige Drücken beider Tasten eine Bedeutung haben sollte, und entschieden, dass durch Drücken von hourund minutegleichzeitig der Alarm auf 12:00 am
/ gesetzt wird 0:00
. Ihre Aufgabe ist es, dieses Verhalten zu simulieren.
Aufgabe
Bestimmen Sie bei gegebener Startzeit und einer Folge von Schaltflächenzuständen die Endzeit.
Erhöhen Sie ab der Startzeit die Stunde für jedes Vorkommen von (1,0)
, erhöhen Sie die Minute für jedes Vorkommen von (0,1)
und stellen Sie die Zeit auf 0:00
für jedes Vorkommen von ein (1,1)
. Die Zustände (0,0)
sollten ignoriert werden, da sie keiner gedrückten Taste entsprechen.
Wenn die Minuten und Stunden addiert werden und die Minuten / Stunden das Maximum überschreiten, stellen Sie dies auf 0
ein. Wenn Sie also einen Minutenwert von 59
erhöhen, stellen Sie den Minutenwert auf 0
und einen Stundenwert von 23
erhöhen, stellen Sie den Stundenwert auf ein 0
. Das Erhöhen der Minuten- / Stundenwerte über ihre Grenzen hinaus hat keinen Einfluss auf den anderen Wert, z. B. das Erhöhen der 10:59
Minutenerträge 10:00
, nicht 11:00
.
Beispiel
In Anbetracht der Eingabezeit 13:58
und Schritte [(0,1),(0,1),(0,1),(0,0),(1,1),(1,0)]
,
(0,1)
. Dies entspricht minutedem Drücken. Die Zeit ist jetzt13:59
.(0,1)
. Dies entspricht minutedem Drücken. Die Zeit ist jetzt13:00
.(0,1)
. Dies entspricht minutedem Drücken. Die Zeit ist jetzt13:01
.(0,0)
. Dies entspricht keiner gedrückten Taste. Die Zeit ist jetzt unberührt13:01
(1,1)
. Dies entspricht dem Drücken beider Tasten. Die Zeit ist jetzt0:00
.(1,0)
Dies entspricht hourdem Drücken. Die Zeit ist jetzt1:00
.
Da wir mit enden 1:00
, ist es die Ausgabe.
I / O
Die Eingabe besteht aus einer Zeit und einer Folge von Tastenzuständen. Die Ausgabe erfolgt einmalig.
Die Eingabezeit und die Ausgabezeit können sein
- ein 2-Tupel
(hour, minute)
oder(minute, hour)
in-24
Stunden-Zeit wie(13, 30)
(hour
reicht von0
bis23
undminute
reicht von0
bis59
) - Wie vorher, jedoch in
12
Stunden und mit einem Booleschen Wertam
/pm
Schalter (hour
Bereich von0
bis11
oder12
und1
bis11
mitminute
von0
bis59
). - eine Anzahl von Minuten seit
0:00
wie 810 (von 0 bis einschließlich 1439) - jedes andere Format, das die gleichen Informationen codiert
Die Reihenfolge der Schaltflächenzustände ist eine Darstellung einer Liste von Booleschen 2-Tupeln, zum Beispiel:
- eine Liste von Tupeln:
[(0,1),(1,0),(0,0),(1,1)]
- eine durch Leerzeichen getrennte Zeichenfolge:
"01 10 00 11"
- ein Faden:
"01100011"
- im Quartär:
[1,2,0,3]
- in eine ganze Zahl umgewandelt:
99
- jedes andere Format, das die gleichen Informationen codiert
Testfälle
time,steps -> output
06:49,[(0, 1)] -> 06:50
12:23,[(1, 0)] -> 13:23
02:23,[(0, 1), (1, 0)] -> 03:24
21:40,[(0, 1), (0, 1), (0, 1), (0, 1)] -> 21:44
13:10,[(0, 1), (0, 1), (0, 1), (0, 1), (1, 0), (1, 1), (0, 1), (0, 1)] -> 00:02
21:33,[(1, 0), (0, 1), (1, 0), (0, 1)] -> 23:35
14:21,[(0, 1), (0, 1), (0, 1)] -> 14:24
02:39,[(0, 0), (0, 1)] -> 02:40
16:07,[(0, 1), (0, 1), (0, 1), (0, 1), (1, 0), (1, 0), (0, 1), (0, 1), (1, 0), (0, 1), (0, 1), (0, 1)] -> 19:16
17:55,[(0, 1), (1, 0), (0, 1)] -> 18:57
15:55,[(1, 0), (1, 0), (1, 0), (0, 1), (0, 1), (0, 1), (1, 0), (1, 0), (0, 1), (1, 0), (1, 0), (0, 1), (1, 0)] -> 23:00
22:11,[(0, 1), (1, 0), (0, 1), (0, 1), (0, 1), (0, 1), (0, 1), (1, 0), (0, 1), (0, 1)] -> 00:19
03:58,[(1, 0), (0, 0), (0, 0), (0, 1), (0, 1), (1, 0), (1, 0), (0, 1), (0, 1), (1, 0), (0, 1)] -> 07:03
13:02,[(0, 1), (1, 0), (0, 1), (1, 0), (0, 1), (0, 1), (1, 0)] -> 16:06
04:37,[(1, 0), (0, 1), (0, 1), (0, 1), (0, 1), (0, 1), (0, 1), (0, 1), (0, 1), (1, 0), (0, 1), (1, 0), (0, 1), (1, 0)] -> 08:47
00:01,[(0, 1), (1, 0), (1, 0), (0, 1), (0, 1), (0, 1), (1, 0), (0, 1), (0, 1), (0, 1)] -> 03:08
02:58,[(1, 0), (1, 0), (0, 1)] -> 04:59
01:43,[(0, 1), (0, 1), (1, 0), (0, 1), (0, 1), (0, 1), (0, 1), (0, 1), (1, 0), (0, 1), (1, 0), (0, 1)] -> 04:52
07:54,[(1, 0), (0, 1), (1, 0), (1, 0), (1, 1)] -> 00:00
09:33,[(0, 1), (0, 1), (0, 1), (1, 0), (0, 1), (0, 1)] -> 10:38
09:01,[(0, 1), (0, 1)] -> 09:03
19:04,[(0, 1), (1, 0), (0, 1), (1, 0)] -> 21:06
11:17,[(0, 1), (1, 0), (0, 1), (0, 1), (1, 0), (0, 1), (0, 1), (1, 1), (0, 1), (0, 1)] -> 00:02
19:32,[(0, 1), (1, 0), (0, 1), (1, 0), (1, 0), (1, 0)] -> 23:34
17:31,[(0, 1), (0, 1), (0, 1), (1, 0), (0, 1), (1, 0), (0, 1), (0, 0), (1, 1), (0, 1)] -> 00:01
06:46,[(0, 1), (0, 1), (0, 1), (0, 1), (1, 0), (0, 1), (0, 1), (0, 1), (0, 1), (0, 1), (0, 1), (1, 0), (0, 1), (0, 1), (1, 0), (1, 0), (0, 1), (0, 1), (0, 1), (1, 0), (1, 0), (0, 1), (0, 1), (0, 1), (1, 0), (0, 1), (1, 0), (0, 1), (0, 1), (1, 0), (0, 1), (0, 1), (0, 1), (1, 0), (1, 0), (0, 1), (1, 0), (0, 1), (0, 1), (0, 1), (0, 1), (0, 1)] -> 18:16
[h, m]
Format mit quartären Schritten .[[initialHour, initialMinute], [hourPressed1, minuitePressed1], [hourPressed2, minuitePressed2], ...]
?Antworten:
Gelee , 13 Bytes
Probieren Sie es online!
quelle
C
8987 BytesVielen Dank an Jonathan Frech für das Speichern von zwei Bytes!
Probieren Sie es online!
quelle
Jelly ,
21(17?) 19 Bytes17 Bytes? - Wenn das Eingabeformat:
[[initHour, initMinute], [a1, b1], [a2, b2], ...]
akzeptabel ist, haben wir einen monadischen Link und entfernen ihn möglicherweiseW;
vom Anfang der zweiten Zeile.Hinweis: Dies ist jetzt eine Annäherung an die Antwort von Erik the Outgolfers Jelly , sodass ich mich nicht mehr ums Golfen kümmern werde (ich hatte es noch nicht gesehen) ...
Ein dyadischer Link mit einer Liste der Anfangszeit als Ganzzahl
[hour, minute]
(24 Stunden) auf der linken Seite und einer Liste der Schaltflächen[[hourPressed, minPressed], ...]
auf der rechten Seite,die wiederum eine Liste der Endergebniszeit als Ganzzahl
[hour, minute]
(24 Stunden) zurückgibt .Probieren Sie es online! oder sehen Sie sich die Testsuite an
Wie?
quelle
⁹Ạ¤
durchẠ}
. Ein weiteres -2 für die Verwendung eines zulässigen Formats. Zum Schluss noch ein -1 weil die Kette vor demµ
hier als Dyade bezeichnet wird ..Python 2 ,
8475 BytesProbieren Sie es online!
Funktion, die Zeit als Tupel benötigt (Stunde, Minute); Ausgänge auf die gleiche Weise.
quelle
all(b)
anstelle vonb[0]&b[1]
:lambda c,a:reduce(lambda t,b:all(b)and((t[0]+b[0])%24,(t[1]+b[1])%60)or(0,0),a,c)
lambda(h,m),(d,e):
stimmt dieses Muster mit Python überein?Netzhaut , 75 Bytes
Probieren Sie es online! Link enthält Testfälle. Erläuterung:
Löschen Sie alles bis einschließlich des letzten doppelten Tastendrucks und ersetzen Sie es durch eine leere Zeit (falls dies der letzte Tastendruck ist).
In Unary konvertieren.
Sortieren Sie die Minuten bis zum Ende.
Addiere die Stunden zusammen.
Fügen Sie die Minuten zusammen, aber halten Sie die Stunden getrennt.
Reduzieren Sie die Stunden- und Minutenmodule 24 oder 60 entsprechend.
In Dezimalzahl konvertieren.
Format auf zwei Ziffern.
quelle
Python 3,
135117115 Bytes-20 Bytes dank Jonathan Frech
Probieren Sie es online!
Nimmt die Zeit als Liste im Formular
[hour, minute]
.quelle
(m[0]+1)
mit-~m[0]
undif m[0]<23 else 0
mit ersetzen*(m[0]<23)
.b
undc
sind immer Boolesche Werte, können Sie ersetzenb+c>1
mitb&c
.Haskell , 58 Bytes
Probieren Sie es online! Beispiel Nutzung:
foldl(#) (23,58) [(0,1),(1,0),(0,0),(0,1),(0,1)]
.quelle
JavaScript (ES6), 55 Byte
Nimmt Eingaben in Curry-Syntax vor, wobei die Startzeit in der Array-Form
[min, hour]
und die Schritte als quartäres Array angegeben werden. Die Ausgabezeit hat dasselbe Format wie die Eingabezeit.Testfälle
Code-Snippet anzeigen
quelle
Perl 6 , 40 Bytes
Probieren Sie es online!
Nimmt eine Liste mit der Startzeit gefolgt von den Tastendrücken auf. Gibt die Endzeit zurück. Zeiten und Schaltflächen sind
(hour, minute)
Paare. 24 Stunden Zeit.quelle
Perl 5 , 70 Bytes
69 Byte Code + 1 für
-n
FlagProbieren Sie es online!
Eingabeformat
hh:mm,abcdabcdabcdaddccbbaa
woher:
Zwischenräume oder andere Abstandshalter zwischen den Pressen sind unerheblich.
Erläuterung
quelle
Swift ,
10696 Bytes-10, danke an Xcoder
Probiere es auf ideone aus!
Die Funktion nimmt den Anfangswert und ein Array von Tupeln an und gibt die letzte Zeit zurück.
quelle
func x(m:(Int,Int),n:[(Int,Int)]){let i=n.reduce(m){($0.0+$1.0,$0.1+$1.1)};print(i.0%24,i.1%60)}
. Dies wird auch lostypealias
.Sumpfschildkröten-Logo, 304 Bytes
Nicht optimiert; viele Räume.
Nimmt eine Liste als erste Eingabe und die Startstunde + Minute (separate Eingaben) als zweite bzw. dritte.
Ich kann Terrapin Logo nicht kopieren und einfügen, da es sich um eine Testversion handelt.
quelle
R , 61 Bytes
Wird
I
als Längen-2-Vektorc(H,M)
undB
als Liste von Längen-2-Vektoren für die Schaltflächen verwendetc(H,M)
. DurchläuftB
und setztI
auf,c(0,0)
wenn die Summe ist2
. Dann geht es am Ende runter. Es gibt auch eine Funktion in der Kopfzeile, mit der Sie die Tastendrücke in das richtige R-Format übersetzen können, wenn Sie alle testen möchten. Das Array wird[(H,M),...]
als Zeichenfolge verwendet.Probieren Sie es online!
quelle
C # (.NET Core) , 93 Byte
Probieren Sie es online!
Nimmt Eingaben wie in Trinary vor, wobei 0 == (1,0), 1 == (0,1), 2 == (1,1) und die Zeit in einem Array mit Index 0 Stunden und 1 Minuten sind. Ändert das vorhandene Zeitarray.
quelle
Pyth, 22 Bytes
Probieren Sie es hier aus.
quelle
Mathematica, 54 Bytes
Anonyme Funktion. Nimmt eine Liste von 2-Tupeln als Eingabe und gibt ein 2-Tupel als Ausgabe zurück.
quelle
Scala , 116 Bytes
Ich nehme also einfach die Startzeit als zwei erste Parameter meiner Funk (
h
undm
) und nehme die Eingabesequenz als Array [Tuple2].Ich frage mich, ob ich die Funkdeklaration (
def time(h:Int,m:Int,a:Array[Tuple2[Int,Int]]):Tuple2[Int,Int]={
plus die Endung}
) in Byte zählen soll.Probieren Sie es online!
quelle