Viele Digitaluhren zeigen die Uhrzeit mit vereinfachten Ziffern an, die aus nur sieben verschiedenen Leuchten bestehen, die entweder an oder aus sind:
Bei horizontaler Spiegelung 018
ändern sich die Ziffern nicht, da sie symmetrisch sind. Die Ziffern auch, 2
und 5
erhalten getauscht, 2
immer 5
und umgekehrt. Alle anderen Ziffern werden ungültig, wenn sie gespiegelt werden.
Somit gibt es bei einer 24-Stunden-Digitaluhr viele Uhrablesungen, so dass das gespiegelte Bild der Digitalanzeige auch eine gültige Uhrablesung ist. Ihre Aufgabe ist es, alle diese Taktwerte zusammen mit den gespiegelten Werten auszugeben.
Zum Beispiel 22:21
wird 15:55
, und 00:15
wird 21:00
. Auf der anderen Seite sind 12:34
oder 16:27
nicht mehr gültig, wenn gespiegelt (Ziffern 34679
werden ungültig), und weder sind 22:22
noch 18:21
, weil es nur 24 Stunden am Tag und 60 Minuten in einer Stunde gibt, würde keine vernünftige Uhr 55:55
oder anzeigen 12:81
.
Aufgabe
Schreiben Sie ein Programm oder eine Funktion, die keine Eingabe akzeptiert und alle gültigen Paare in aufsteigender Reihenfolge ausgibt, wie unten gezeigt:
00:00 - 00:00
00:01 - 10:00
00:05 - 20:00
00:10 - 01:00
00:11 - 11:00
00:15 - 21:00
00:20 - 05:00
00:21 - 15:00
00:50 - 02:00
00:51 - 12:00
00:55 - 22:00
01:00 - 00:10
01:01 - 10:10
01:05 - 20:10
01:10 - 01:10
01:11 - 11:10
01:15 - 21:10
01:20 - 05:10
01:21 - 15:10
01:50 - 02:10
01:51 - 12:10
01:55 - 22:10
02:00 - 00:50
02:01 - 10:50
02:05 - 20:50
02:10 - 01:50
02:11 - 11:50
02:15 - 21:50
02:20 - 05:50
02:21 - 15:50
02:50 - 02:50
02:51 - 12:50
02:55 - 22:50
05:00 - 00:20
05:01 - 10:20
05:05 - 20:20
05:10 - 01:20
05:11 - 11:20
05:15 - 21:20
05:20 - 05:20
05:21 - 15:20
05:50 - 02:20
05:51 - 12:20
05:55 - 22:20
10:00 - 00:01
10:01 - 10:01
10:05 - 20:01
10:10 - 01:01
10:11 - 11:01
10:15 - 21:01
10:20 - 05:01
10:21 - 15:01
10:50 - 02:01
10:51 - 12:01
10:55 - 22:01
11:00 - 00:11
11:01 - 10:11
11:05 - 20:11
11:10 - 01:11
11:11 - 11:11
11:15 - 21:11
11:20 - 05:11
11:21 - 15:11
11:50 - 02:11
11:51 - 12:11
11:55 - 22:11
12:00 - 00:51
12:01 - 10:51
12:05 - 20:51
12:10 - 01:51
12:11 - 11:51
12:15 - 21:51
12:20 - 05:51
12:21 - 15:51
12:50 - 02:51
12:51 - 12:51
12:55 - 22:51
15:00 - 00:21
15:01 - 10:21
15:05 - 20:21
15:10 - 01:21
15:11 - 11:21
15:15 - 21:21
15:20 - 05:21
15:21 - 15:21
15:50 - 02:21
15:51 - 12:21
15:55 - 22:21
20:00 - 00:05
20:01 - 10:05
20:05 - 20:05
20:10 - 01:05
20:11 - 11:05
20:15 - 21:05
20:20 - 05:05
20:21 - 15:05
20:50 - 02:05
20:51 - 12:05
20:55 - 22:05
21:00 - 00:15
21:01 - 10:15
21:05 - 20:15
21:10 - 01:15
21:11 - 11:15
21:15 - 21:15
21:20 - 05:15
21:21 - 15:15
21:50 - 02:15
21:51 - 12:15
21:55 - 22:15
22:00 - 00:55
22:01 - 10:55
22:05 - 20:55
22:10 - 01:55
22:11 - 11:55
22:15 - 21:55
22:20 - 05:55
22:21 - 15:55
22:50 - 02:55
22:51 - 12:55
22:55 - 22:55
Ein abschließender oder ein führender Zeilenumbruch ist zulässig. Ein paar Leerzeichen direkt vor einem Zeilenumbruch sind ebenfalls zulässig. Die Zeiten müssen formatiert hh:mm
und bei Bedarf mit Nullen aufgefüllt sein.
Das ist Code-Golf , also gewinnt die kürzeste Antwort in Bytes. Standardlücken sind wie üblich nicht zulässig.
quelle
String
ein Array vonChar
. Ist es akzeptabel, wenn meine Antwort eine Liste von enthältChar
? Die Typen sehen im ungedruckten Zustand identisch aus.1
nicht exakt mit ihrem Spiegelbild identisch, da Sie erkennen können, ob die am weitesten rechts oder links liegenden Segmente zur Bildung der vertikalen "Linie" verwendet werden, aus der sich die Ziffer zusammensetzt. Ich verstehe, dass wir sie hier als identisch betrachten.1
zentriert werden könnte.Antworten:
05AB1E , 34 Bytes
Probieren Sie es online!
Erläuterung
quelle
Python 2 ,
187180178177 BytesProbieren Sie es online!
Danke für +1 Kevin Cruijssen.
quelle
APL (Dyalog Unicode) , 84 Byte SBCS
Komplette Programmausgabe nach STDOUT. Erfordert
⎕IO
( I ndex O rigin),0
was auf vielen Systemen Standard ist.Probieren Sie es online!
⍳1440
dass viele ɩ ntegers0 60⊤
konvertiere zu gemischter Base base, 60100+
addiere 100 (dies fügt die benötigten 0s hinzu)⍕¨
jeweils formatieren (stringifizieren)1↓¨
lösche das erste Zeichen von jedem (dies entfernt die führenden Einsen){
…}⌿
Wende die folgende anonyme Funktion spaltenweise an (⍺
ist die höchste Stunde,⍵
ist die Minute)0::
Wenn ein Fehler auftritt, wird nichts zurückgegeben⋄
Versuchen:'015xx2xx8x:'[
…]
Indexiere diesen String mit:∊⍺':'⍵
die ε nlisted (abgeflacht) Liste der Stunde, Dickdarm-, Minutei←
gespeicherti
(für i Nput)⎕D⍳
ɩ ndices jedes Zeichen in der Liste von D igits⌽
kehre das umt←
speichern alst
(für t ime)(
…)⊆
Gruppenläufe wo:':'≠t
Doppelpunkt unterscheidet sich vont
⍎¨
jeweils ausführen (auswerten)23 59≥
Boolescher Wert für jeden Wert, unabhängig davon, ob er kleiner oder gleich 23 bzw. 59 ist∧/
sind beide wahr?:
wenn ja, dann:⍕i'-'t
Die formatierte (durch Leerzeichen getrennte) Liste von Eingaben, Strichen und Zeiten1↓
Lass das erste (Leerzeichen) fallen⎕←
Ausgabe an STDOUTquelle
Retina , 57 Bytes
Probieren Sie es online! Erläuterung:
Setzen Sie das Trennzeichen ein.
Generieren Sie alle möglichen Sätze von vier gespiegelten Ziffern.
Löschen Sie die mit illegalen Stunden.
Setzen Sie die Doppelpunkte ein.
In Reihenfolge sortieren.
quelle
Python 2 ,
279277255 BytesProbieren Sie es online!
Credits
279 Bytes wurden von Dylnan auf 256 reduziert .
256 Bytes von FlipTrack auf 255 reduziert .
quelle
Sauber ,
269...172170 BytesProbieren Sie es online!
Ungolfed:
quelle
Pyth , 48 Bytes
Probieren Sie es online!
Erzeugt alle möglichen Kombinationen von
0125
und manipuliert sie dann in die Zeit. Diese befinden sich in der richtigen Reihenfolge, da sie in lexikografischer Reihenfolge generiert werden. Schließlich werden die zusätzlichen ungültigen Zeiten herausgefiltert, indem Zeilen entfernt werden, die mit dem regulären Ausdruck5.:
oder übereinstimmen25:
. Leider scheint die Komprimierung bei keinem der in diesem Programm verwendeten Strings gut zu funktionieren, es sei denn, ich habe einen Fehler gemacht oder einen Fehler übersehen.quelle
Perl 5 , 147 Bytes
Probieren Sie es online!
quelle
Japt v2 (+
-R
), 51 BytesTesten Sie es online!
Erläuterung
quelle
JavaScript (ES6), 142 Byte
Probieren Sie es online!
quelle
Kohle , 59 Bytes
Probieren Sie es online!Link ist eine ausführliche Version des Codes. Erläuterung:
Erstellen Sie vier verschachtelte Schleifen für die nicht gespiegelten Ziffern.
Stellen Sie sicher, dass weder die Stunden noch die Minuten 25 sind. (Wenn Sie die 25 Minuten spiegeln, erhalten Sie 25 Stunden.)
Drucken Sie die nicht gespiegelte Zeit.
Geben Sie die gespiegelte Zeit aus, indem Sie die umgekehrten Ziffern (oder
3
den Doppelpunkt) von Zeichenfolge in Ganzzahl konvertieren und in einer Übersetzungstabelle nachschlagen.Alternativ auch für 59 Bytes:
Probieren Sie es online! Link ist eine ausführliche Version des Codes. Erläuterung:
Erstellen Sie Schleifen für die Stunden und Minuten.
Ausschließen
25
und auch alle Minuten, die auf enden2
.Konvertieren Sie die Stunden und Minuten zur Basis 4.
Drucken Sie die Ziffern aus, die in einer Übersetzungstabelle nachgeschlagen wurden.
Drucken Sie den Separator.
Drucken Sie die umgekehrten Ziffern, die in einer gespiegelten Übersetzungstabelle nachgeschlagen wurden.
quelle
Jelly ,
72666255 BytesProbieren Sie es online!
Niladic Programm. Ich habe das doppelte Produkt der
'0125'
Idee aus der 05AB1E-Antwort von Emigna erhalten aber den Rest habe ich ohne Rücksprache gemacht, da die Sprachen danach auseinander gehen. Es gibt wahrscheinlich Möglichkeiten zum Golfen, möglicherweise um einiges.Erläuterung
Das Programm funktioniert wie folgt:
Nehmen Sie alle Produkte der Länge vier aus der Liste der Zeichen
'0125'
mit“0152:”©ṢṖp`⁺
.©
kopiert die Zeichenfolge'0152:'
zur späteren Verwendung in das Register.ṢṖ
SORTIERT dann das letzte Element der Zeichenfolge →'0125'
.⁺
dupliziert den Produktlink.ḣ176
Entfernt alle Zeiten mit Format25xx
oder5xxx
(ungültigen Stunden).j€“:”
verbindet jedes Ziffernpaar mit einem':'
. zB['05'],['21']]
→'05:12'
.Ç€
Wendet den ersten Link auf jede dieser Zeiten an. Es findet den Index jedes Zeichens in der Zeichenkette'0125:'
, erhält dann für jeden dieser Indizes das Zeichen in der Zeichenkette'0152:'
und kehrt es um. Dies ist die Spiegeloperation (Umkehren und Vertauschen von2
s und5
s).µ;"
verkettet die ursprüngliche Zeit mit der gespiegelten Zeit →'05:2115:20'
⁾25ẇ$ÐṂ
filtert mal mit dem teilstring raus'25'
. Dies fängt zu jeder Zeit Paare mit gespiegelten Hälften25:xx
oder5x:xx
. Hinweis : Ich weiß nicht, warum das$
notwendig ist. Vielleicht könnte jemand mit der richtigen Syntax Golf spielen, aber ich bin mir nicht sicher.Teilen Sie diese Zeiten in zwei Hälften (
œs€2
) und verbinden Sie sie mit der Zeichenfolge' - '
(j€“ - ”
).'05:2115:20'
→'05:21 - 15:20'
.Zum Schluss werden
Y
alle Zeichenfolgen mit einem Zeilenumbruch verbunden und alles wird implizit gedruckt.alte Versionen
62 Bytes
Probieren Sie es online!
66 Bytes
Probieren Sie es online!
72 Bytes
Probieren Sie es online!
quelle
C (GCC) ,
175174 BytesEinmalig dank @Steadybox.
Probieren Sie es online!
quelle
Befunge, 178 Bytes
Probieren Sie es online!
quelle
Kotlin ,
205207 BytesVerschönert
Prüfung
TIO
TryItOnline
Bearbeitungen
quelle
-
. Das Hinzufügen kostet nur zwei Bytes: Probieren Sie es online aus!C 225 Bytes
Da es keine C-Antwort gibt, poste ich meine eigene. Ein anderer Ansatz könnte kürzer sein.
Probieren Sie es online!
quelle