De nombreuses horloges numériques affichent l'heure en utilisant des chiffres simplifiés composés de seulement sept lumières différentes qui sont allumées ou éteintes:
Lorsqu'ils sont mis en miroir horizontalement, les chiffres 018
ne changent pas car ils sont symétriques. En outre, les chiffres 2
et 5
échangent, 2
devenant 5
et vice versa. Tous les autres chiffres deviennent invalides lorsqu'ils sont mis en miroir.
Ainsi, étant donné une horloge numérique de 24 heures, il existe de nombreuses lectures d'horloge telles que l'image miroir de l'affichage numérique est également une lecture d'horloge valide. Votre tâche consiste à générer toutes ces lectures d'horloge avec les lectures en miroir.
Par exemple, 22:21
devient 15:55
et 00:15
devient 21:00
. En revanche, 12:34
ou 16:27
ne sont plus valides lorsqu'ils sont mis en miroir (les chiffres 34679
deviennent invalides), et ni l'un 22:22
ni l'autre 18:21
, car, comme il n'y a que 24 heures par jour et 60 minutes par heure, aucune horloge saine ne s'afficherait 55:55
ou 12:81
.
Tâche
Écrivez un programme ou une fonction qui ne prend aucune entrée et sort toutes les paires valides dans l'ordre croissant comme indiqué ci-dessous:
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
Une nouvelle ligne de fin ou de début est autorisée. Il est également permis d'avoir quelques espaces juste avant un saut de ligne. Les heures doivent être au format hh:mm
, complétées de zéros si nécessaire.
Il s'agit de code-golf , donc la réponse la plus courte en octets l'emporte. Comme d'habitude, les failles standard sont interdites.
la source
String
est un tableau deChar
. Est-ce acceptable si ma réponse donne une liste deChar
? Les types semblent identiques lorsqu'ils sont imprimés nus.1
n'est pas exactement identique à son image miroir car vous pouvez dire si les segments les plus à droite ou les segments les plus à gauche sont utilisés pour former la "ligne" verticale qui compose le chiffre. Je comprends que nous les considérons comme identiques ici.1
pourrait être centré.Réponses:
05AB1E , 34 octets
Essayez-le en ligne!
Explication
la source
Python 2 ,
187180178177 octetsEssayez-le en ligne!
Merci pour +1 Kevin Cruijssen.
la source
APL (Dyalog Unicode) , 84 octets SBCS
Sortie complète du programme vers STDOUT. Nécessite
⎕IO
( I ndex O rigin) d'être0
celui par défaut sur de nombreux systèmes.Essayez-le en ligne!
⍳1440
que beaucoup de ɩ ntegers0 60⊤
convertir en base mixte ∞, 60100+
ajouter 100 (cela ajoute les 0 nécessaires)⍕¨
formater (stringify) chacun1↓¨
supprimer le premier caractère de chacun (cela supprime les 1 premiers){
…}⌿
Appliquez la fonction anonyme suivante colonne par colonne (⍺
est l'heure supérieure,⍵
est la minute)0::
si une erreur se produit, ne renvoyez rien⋄
essayer:'015xx2xx8x:'[
…]
Indexez cette chaîne avec:∊⍺':'⍵
la liste ϵ nlistée (aplatie) des heures, deux points, minutesi←
stocké dansi
(pour i nput)⎕D⍳
ɩ ndices de chaque caractère dans la liste des D igits⌽
inverser celat←
stocker en tant quet
(pour t ime)(
… Le)⊆
groupe court où:':'≠t
le côlon diffère det
⍎¨
exécuter (évaluer) chacun23 59≥
Booléen pour chacun, qu'ils soient respectivement inférieurs ou égaux à 23 et 59∧/
sont les deux vrais?:
si oui, alors:⍕i'-'t
la liste formatée (séparée par des espaces) des entrées, tiret, heure1↓
déposez le premier (espace)⎕←
sortie vers STDOUTla source
Rétine , 57 octets
Essayez-le en ligne! Explication:
Insérez le séparateur.
Générez tous les ensembles possibles de quatre chiffres en miroir.
Supprimez ceux avec des heures illégales.
Insérez les deux points.
Trier dans l'ordre.
la source
Python 2 ,
279277255 octetsEssayez-le en ligne!
Crédits
279 octets réduits à 256 par dylnan .
256 octets réduits à 255 par FlipTrack .
la source
Nettoyer ,
269...172170 octetsEssayez-le en ligne!
Non golfé:
la source
Pyth , 48 octets
Essayez-le en ligne!
Génère toutes les combinaisons possibles
0125
puis les manipule dans le temps. Celles-ci sont dans le bon ordre car elles sont générées dans l'ordre lexicographique. Enfin, cela filtre les temps non valides supplémentaires en supprimant les lignes qui correspondent à l'expression régulière5.:
ou25:
. Malheureusement, il ne semble pas que la compression fonctionne bien sur l'une des chaînes que ce programme utilise, sauf si j'ai fait une erreur ou une erreur.la source
Perl 5 , 147 octets
Essayez-le en ligne!
la source
Japt v2 (+
-R
), 51 octetsTestez-le en ligne!
Explication
la source
JavaScript (ES6), 142 octets
Essayez-le en ligne!
la source
Fusain , 59 octets
Essayez-le en ligne! Le lien est vers la version détaillée du code. Explication:
Créez quatre boucles imbriquées pour les chiffres non mis en miroir.
Vérifiez que ni les heures ni les minutes ne sont égales à 25. (La mise en miroir des 25 minutes se traduira par 25 heures, donc ce n'est pas possible.)
Imprimez l'heure sans miroir.
Imprimez l'heure en miroir en convertissant les chiffres inversés (ou
3
pour les deux-points) de la chaîne en entier et en les recherchant dans une table de traduction.Alternativement, également pour 59 octets:
Essayez-le en ligne! Le lien est vers la version détaillée du code. Explication:
Créez des boucles pour les heures et les minutes.
Exclure
25
et également toutes les minutes se terminant par2
.Convertissez les heures et les minutes en base 4.
Imprimez les chiffres recherchés dans une table de traduction.
Imprimez le séparateur.
Imprimer les chiffres inversés recherchés dans une table de traduction en miroir.
la source
Gelée ,
72666255 octetsEssayez-le en ligne!
Programme Niladic. J'ai eu le double produit de l'
'0125'
idée de la réponse 05AB1E d'Emigna mais le reste j'ai fait sans consulter ça puisque les langues divergent ensuite. Il y a probablement des opportunités pour le golf, peut-être beaucoup.Explication
Le programme fonctionne comme suit:
Prenez tous les produits de la longueur quatre de la liste des personnages
'0125'
avec“0152:”©ṢṖp`⁺
.©
copie la chaîne'0152:'
dans le registre pour une utilisation ultérieure.ṢṖ
trie puis affiche le dernier élément de la chaîne →'0125'
.⁺
duplique le lien du produit.ḣ176
supprime toutes les heures au format25xx
ou5xxx
(heures non valides).j€“:”
joint chaque paire de chiffres avec un':'
. par exemple['05'],['21']]
→'05:12'
.Ç€
applique le premier lien à chacune de ces heures. Il trouve l'index de chaque caractère dans la chaîne'0125:'
puis pour chacun de ces indices obtient le caractère dans la chaîne'0152:'
et l'inverse. Il s'agit de l'opération miroir (inversion et échange de2
s et5
s).µ;"
concatène l'heure d'origine avec l'heure en miroir →'05:2115:20'
⁾25ẇ$ÐṂ
filtre les temps avec la sous-chaîne'25'
. Cela attrape les paires de temps avec la moitié25:xx
ou en miroir5x:xx
. Remarque : je ne sais pas pourquoi cela$
est nécessaire. Peut-être que quelqu'un pourrait jouer au golf avec la syntaxe appropriée, mais je ne suis pas sûr.Divisez chacun de ces temps en deux moitiés (
œs€2
) puis joignez-les à la chaîne' - '
(j€“ - ”
).'05:2115:20'
→'05:21 - 15:20'
.Enfin,
Y
joint toutes les chaînes avec une nouvelle ligne et tout est implicitement imprimé.anciennes versions
62 octets
Essayez-le en ligne!
66 octets
Essayez-le en ligne!
72 octets
Essayez-le en ligne!
la source
C (gcc) ,
175174 octetsUne seule grâce à @Steadybox.
Essayez-le en ligne!
la source
Befunge, 178 octets
Essayez-le en ligne!
la source
Kotlin ,
205207 octetsEmbellie
Tester
TIO
TryItOnline
Modifications
la source
-
. Ne coûte que deux octets à ajouter: essayez-le en ligne!C, 225 octets
Puisqu'il n'y a pas de réponse C, je poste la mienne. Une autre approche pourrait être plus courte.
Essayez-le en ligne!
la source