Stellen Sie sich die folgende 24-Stunden-Uhr vor, die mit den Pfeiltasten gesteuert werden kann:
╔══╗ ┌──┐
║00║:│00│
╚══╝ └──┘
HH mm
Zweimaliges Drücken des Aufwärtspfeils ( ↑↑
) erhöht die aktuell fokussierte Stundeneingabe:
╔══╗ ┌──┐
║02║:│00│
╚══╝ └──┘
HH mm
Durch Drücken des Rechtspfeils ( →
) wird die andere Eingabe fokussiert.
┌──┐ ╔══╗
│02│:║00║
└──┘ ╚══╝
HH mm
Durch dreimaliges Drücken des Abwärtspfeils ( ↓↓↓
) wird diese Eingabe nun verringert.
┌──┐ ╔══╗
│02│:║57║
└──┘ ╚══╝
HH mm
Kurz gesagt:
- Der Aufwärtspfeil (
↑
) erhöht den aktuell aktiven Eingang. - Der Abwärtspfeil (
↓
) verringert die aktive Eingabe. - Der rechte Pfeil (
→
) verschiebt den Fokus auf den rechten Eingang. - Der linke Pfeil (
←
) verschiebt den Fokus auf den linken Eingang. - Die Auf- und Abbewegung wird wie erwartet für eine Zeiteingabe wiederholt.
- Linke und rechte Bewegung laufen nicht umher.
Die Herausforderung
Die Uhr beginnt bei 00:00
aktivem Stundeneingang (siehe erstes Schema). Geben Sie bei einer Liste von Eingabebefehlen die resultierende Zeit im HH:mm
Format aus.
Die Eingabe kann entweder eine Zeichenfolge oder eine Liste (oder eine Ihrer Sprache entsprechende) sein, wobei die verschiedenen Eingaberichtungen eine der folgenden Optionen sein können:
↑↓←→
udlr
^v<>
- Die tatsächliche Pfeiltaste wird gedrückt, wenn Ihr Programm über eine grafische Benutzeroberfläche verfügt
Es gelten Standardlücken.
Testfälle
↑↑→↓↓↓ = 02:57
↓→↑←↑→↓ = 00:00
↓→→↓ = 23:59
←←←←→↑ = 00:01
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓→↓ = 23:59
0123
würde die Herausforderung in bestimmten Sprachen erheblich erleichtern, während andere davon nicht profitieren.Antworten:
HTML in Google Chrome 67 in Chinesisch (vereinfacht), 39 Byte
Chrome zeigt verschiedene UI-Komponenten in verschiedenen Sprachen. Sogar eine einfache Zeiteingabe: AM / PM wird angezeigt, wenn Sie Englisch (US) verwenden. Wenn Sie dies testen möchten, ändern Sie die Sprache Ihres Chrome. Massieren Sie nicht, wie Sie es zurück ändern.
quelle
AM/PM
für michC (GCC) ,
117107 BytesProbieren Sie es online!
quelle
t,i,m[8];e(char*_){for(*m=i=2[m]=0;t=*_++;t<63?i=t%4:(i[m]+=t&8?1:119));printf("%02d:%02d",*m%24,2[m]%60);}
Probieren Sie es online aus!Stax ,
36353332 BytesFühren Sie es aus und debuggen Sie es
Verwendet
lrud
.Erläuterung:
quelle
Python 2 , 105 Bytes
Probieren Sie es online!
quelle
JavaScript (Node.js) , 103 Byte
Übernimmt die Eingabe als Zeichenfolge mit
udlr
.Probieren Sie es online!
quelle
C # (.NET Core) ,
149132 BytesProbieren Sie es online!
Verwenden
^v<>
.Dieser hat mir klar gemacht, dass der Modulo-Operator in C # nicht wie erwartet funktioniert, weil
-1 % 60 = -1
ich in C # am Ende diese seltsame Operation ausführen muss.quelle
Lua (love2d Framework),
311308 BytesUncrumbeled Version:
Wahrscheinlich immer noch nicht 100% leicht zu lesen, da alle ifs mit einer trinären Aussage (..und ..oder) ausgetauscht werden :)
Wenn Sie in einer main.lua mit Liebe gestartet sind, wird ein Fenster geöffnet und Sie können die Pfeiltasten drücken, um die Zahlen zu ändern
quelle
MATL ,
575655 BytesProbieren Sie es online!
Stellt Stunden und Minuten mit komplexen Zahlen dar, wobei der Realteil Stunden und der Imaginärteil Minuten sind.
Mit Kommentaren:
quelle
PHP ,
145134133 Bytes(-11 Bytes durch mehr Golf)
(-1 Byte mit Davids Schleifenmethode)
Um es auszuführen:
Beispiel:
Oder versuchen Sie es online!
Anmerkungen:
error_reporting=0
Option verwendet, um keine Warnungen auszugeben.u d l r
quelle
JavaScript,
104103 BytesNimmt die Eingabe als Array von Zeichen unter Verwendung von
<>^v
.Probieren Sie es online aus
quelle
Haskell, 236 Bytes
f
ist die Hauptfunktion und hat den TypString -> String
:Im Wesentlichen
u
undv
sind gegenseitig rekursive Funktionen vom TypInteger -> Integer -> String -> String
. Sie nehmen die Stunde, die Minute und eine Liste von Zeichen über den Satz{v,^,<,>}
und geben die Zeitzeichenfolge zurück.u
Verhält sich so, als ob die Stundenanzeige hervorgehoben ist, und ruft rekursiv an,u
wenn sich der Kopf der Liste in{v,^}
befindet undv
wenn sich der Kopf der Liste in befindet{<,>}
.v
ist ähnlich, aber für die Minutenanzeige.Alles andere ist nur das Speichern von Zeichen.
quelle
Lua , 132 Bytes
Probieren Sie es online!
Erläuterung
Dies ist eine anonyme Funktion (eine Verwendungsweise ist im Link angegeben).
quelle
HH:mm
Format und nicht in einer Tabelle erfolgenJava 8, 121 Bytes
Port von Jonathan Frech 's C Antwort . Akzeptiert
^v<>
. Probieren Sie es hier online aus .quelle
Gelee , 36 Bytes
Ich glaube,
O%5;4ṣ3œṡ€4Z%3’§§%"“ð<‘DŻ€ṫ€-j”:
sollte für 32 arbeiten,œṡ
scheint aber derzeit einen Fehler zu haben .Ein vollständiges Programm, das das Ergebnis an STDOUT ausgibt (als monadische Verknüpfung gibt es tatsächlich eine gemischte Liste von Ganzzahlen (wenn auch einstelligen) und Zeichen (die) zurück
:
) zurück.Verwendet die
udlr
Option zur Eingabe.Probieren Sie es online! Oder sehen Sie ein Testsuite an .
Wie?
quelle
APL (Dyalog Classic) ,
9784 BytesProbieren Sie es online!
Benötigt
⎕IO←1
quelle
QBasic , 229 Bytes
Ein Skript, das Eingaben als Tastenanschläge aufnimmt und an die Konsole ausgibt.
Hinweis: Die Terminals
"
dienen nur der Syntaxhervorhebung und tragen nicht zum bytecount beiKommentiert
quelle
(m+y)
?m
es wäre aus irgendeinem Grund für Minuten ... Ich sehe, dass Ihre kommentierte Version besser lesbar ist.Powershell,
109103 Bytes-6 byte danke AdmBorkBork
Testskript:
Ausgabe:
Erläuterung
Die Grundidee ist die Verwendung von a
[hashtable]
, bei denenkeys
es sich um Steuerbefehle undvalues
Scriptblöcke handelt. Der Code führt den Scriptblock für jeden Befehl aus Argumenten aus.quelle
$i=0
indem Sie Ihren Array-Index wie$t[+$i]
einige Bytes speichern. Probieren Sie es online!Perl 6 ,
101 91 8986 BytesProbieren Sie es online!
Anonymer Codeblock, der eine Zeichenfolge
uldr
akzeptiert und im angegebenen Format zurückgibtquelle
Perl -F // -E, 72 Bytes
quelle
Python, 120 Bytes
quelle
ld
oderrru
bewirkti
, dass der Bereich (0,1) verlassen wird undo[i]
anschließend darauf zugegriffen wird?unput()
.LL
lll
ist nicht dasselbe wier
. Habenll
oderrr
ist eine gültige Eingabe, es ist auch in den Testfällen, siehe die dritte zum Beispiel.23:59
. Probieren Sie es online!Haskell , 186 Bytes
Probieren Sie es online!
quelle
R,
368355 BytesAuf jeden Fall nicht der beste Ansatz, aber funktioniert.
Funktionalität: Führen Sie die Funktion aus, geben Sie jeden Buchstaben ein, um ihn zu vergrößern oder zu verkleinern, oder bewegen Sie sich nach links oder rechts. Wenn Sie "s" eingeben, wird das "Spiel" beendet. Der Haken ist, dass immer nur ein Buchstabe akzeptiert wird.
-13 Byte Einige Werte in einer Zeile zusammengefasst, T als F anstelle von break überschrieben, mehrere zu entfernende Leerzeichen gefunden und stattdessen eine Zeichenfolge in einer Variablen gespeichert
Ich bearbeite auch ein alternatives Format, um eine R-Zeichenfolge und / oder einen Vektor zu akzeptieren.
quelle
SmileBASIC, 123 Bytes
BUTTON()
Gibt eine Ganzzahl zurück, wobei jedes Bit eine Schaltfläche darstelltBUTTON(2)
gibt nur die Tasten zurück, die gerade gedrückt wurden (nicht gehalten werden)WAIT
ist erforderlich, daBUTTON
nur einmal pro Frame (1/60 Sekunde) aktualisiert wird. Andernfalls würde der gleiche Tastendruck mehrmals erkannt.Dies kann definitiv kürzer sein
quelle
05AB1E ,
3837 BytesVerwendet
udlr
für die Anweisungen, könnte aber auch^v<>
für die gleiche↑↓←→
Bytezahl verwendet werden (die Zeichen sind nicht Teil der Codepage von 05AB1E, daher würde durch die Verwendung dieser Zeichen die Bytezahl um ein Vielfaches erhöht, da die Codierung in ASCII geändert werden sollte).Probieren Sie es online aus oder überprüfen Sie alle Testfälle .
Erläuterung:
Sehen Sie sich meinen Tipp 05AB1E (Abschnitt Wie komprimiere ich große ganze Zahlen? ) An, um zu verstehen, warum dies so
Ž9¦
ist2460
.quelle