Muchos relojes digitales muestran la hora utilizando dígitos simplificados que constan de solo siete luces diferentes que están encendidas o apagadas:
Cuando se refleja horizontalmente, los dígitos 018
no cambian porque son simétricos. Además, los dígitos 2
y 5
se intercambian, 2
convirtiéndose 5
y viceversa. Todos los demás dígitos se vuelven inválidos cuando se reflejan.
Por lo tanto, dado un reloj digital de 24 horas, hay muchas lecturas de reloj de tal manera que la imagen reflejada de la pantalla digital también es una lectura de reloj válida. Su tarea es generar todas esas lecturas de reloj junto con las lecturas reflejadas.
Por ejemplo, se 22:21
vuelve 15:55
y se 00:15
vuelve 21:00
. Por otro lado, 12:34
o 16:27
ya no son válidos cuando se refleja (cifras 34679
dejan de ser válidas), y tampoco lo son 22:22
o 18:21
, porque, como sólo hay 24 horas en un día y 60 minutos en una hora, no había reloj en su sano juicio visualizar 55:55
o 12:81
.
Tarea
Escriba un programa o una función que no ingrese y genere todos los pares válidos en orden ascendente como se muestra a continuación:
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
Se permite una nueva línea al final o al final. Tener algunos espacios directamente antes de un salto de línea también está permitido. Los tiempos deben estar en formato hh:mm
, rellenados con ceros cuando sea necesario.
Este es el código de golf , por lo que gana la respuesta más corta en bytes. Como de costumbre, las lagunas estándar no están permitidas.
fuente
String
es una matriz deChar
. ¿Es aceptable si mi respuesta da una lista deChar
? Los tipos se ven idénticos cuando se imprimen desnudos.1
no es exactamente idéntico a su imagen especular porque puede saber si los segmentos más a la derecha o más a la izquierda se usan para formar la "línea" vertical que constituye el dígito. Entiendo que los consideramos idénticos aquí.1
podría centrarse.Respuestas:
05AB1E , 34 bytes
Pruébalo en línea!
Explicación
fuente
Python 2 ,
187180178177 bytesPruébalo en línea!
Gracias por +1 Kevin Cruijssen.
fuente
APL (Dyalog Unicode) , SBCS de 84 bytes
Programa completo de salida a STDOUT. Requiere
⎕IO
( I ndex O rigin) ser0
que es por defecto en muchos sistemas.Pruébalo en línea!
⍳1440
que muchos Ɩ ntegers0 60⊤
convertir a base mixta ∞, 60100+
agregue 100 (esto rellena los 0s necesarios)⍕¨
formatear (stringify) cada1↓¨
suelte el primer carácter de cada uno (esto elimina los primeros 1){
...}⌿
aplique la siguiente función anónima en columna (⍺
es la hora principal,⍵
es minuto)0::
si ocurre algún error, no devuelva nada⋄
tratar:'015xx2xx8x:'[
...]
indexe esta cadena con:∊⍺':'⍵
la ε nlisted (aplanada) lista de horas, colon, minutosi←
almacenado eni
(para i Nput)⎕D⍳
Ɩ ndices de cada personaje en la lista de D igits⌽
revertir esot←
almacenart
(por t ime)(
... el)⊆
grupo corre donde:':'≠t
el colon difiere det
⍎¨
ejecutar (evaluar) cada23 59≥
Booleanos para cada uno si son menores o iguales a 23 y 59 respectivamente∧/
son ambos verdad?:
si es así, entonces:⍕i'-'t
la lista formateada (separada por espacios) de entrada, guión, tiempo1↓
soltar el primero (espacio)⎕←
salida a STDOUTfuente
Retina , 57 bytes
Pruébalo en línea! Explicación:
Insertar el separador.
Genere todos los conjuntos posibles de cuatro dígitos reflejados.
Eliminar aquellos con horas ilegales.
Insertar los dos puntos.
Ordenar en orden.
fuente
Python 2 ,
279277255 bytesPruébalo en línea!
Créditos
279 bytes reducidos a 256 por dylnan .
256 bytes reducidos a 255 por FlipTrack .
fuente
Limpio ,
269...172170 bytesPruébalo en línea!
Sin golf:
fuente
Pyth , 48 bytes
Pruébalo en línea!
Genera todas las combinaciones posibles
0125
y luego las manipula en los tiempos. Estos están en el orden correcto porque se generan en orden lexicográfico. Finalmente, esto filtra los tiempos inválidos adicionales al eliminar líneas que coinciden con la expresión regular5.:
o25:
. Lamentablemente, no parece que la compresión funcione bien en ninguna de las cadenas que utiliza este programa, a menos que haya cometido un error o supervisión.fuente
Perl 5 , 147 bytes
Pruébalo en línea!
fuente
Japt v2 (+
-R
), 51 bytes¡Pruébalo en línea!
Explicación
fuente
JavaScript (ES6), 142 bytes
Pruébalo en línea!
fuente
Carbón , 59 bytes
Pruébalo en línea! El enlace es a la versión detallada del código. Explicación:
Cree cuatro bucles anidados para los dígitos no reflejados.
Verifique que ni las horas ni los minutos sean 25. (Duplicar los 25 minutos dará como resultado 25 horas, así que no se puede ir).
Imprime el tiempo sin reflejos.
Imprima el tiempo reflejado al convertir los dígitos invertidos (o
3
para los dos puntos) de cadena a entero y buscarlos en una tabla de traducción.Alternativamente, también para 59 bytes:
Pruébalo en línea! El enlace es a la versión detallada del código. Explicación:
Crea bucles para las horas y minutos.
Excluir
25
y también cualquier minuto que termine en2
.Convierta las horas y minutos a base 4.
Imprima los dígitos buscados en una tabla de traducción.
Imprime el separador.
Imprima los dígitos invertidos en una tabla de traducción reflejada.
fuente
Gelatina ,
72666255 bytesPruébalo en línea!
Programa niladic. Obtuve el doble producto de la
'0125'
idea de la respuesta 05AB1E de Emigna, pero el resto lo hice sin consultarlo ya que los idiomas difieren después de eso. Probablemente hay oportunidades para jugar al golf, posiblemente por mucho.Explicación
El programa funciona de la siguiente manera:
Tome todos los productos de longitud cuatro de la lista de caracteres
'0125'
con“0152:”©ṢṖp`⁺
.©
copia la cadena'0152:'
en el registro para su uso posterior.ṢṖ
ordena y luego muestra el último elemento de la cadena →'0125'
.⁺
duplica el enlace del producto.ḣ176
elimina cualquier momento con formato25xx
o5xxx
(horas no válidas).j€“:”
une cada par de dígitos con a':'
. por ejemplo['05'],['21']]
→'05:12'
.Ç€
aplica el primer enlace a cada uno de estos tiempos. Encuentra el índice de cada carácter en la cadena y'0125:'
luego, para cada uno de esos índices, obtiene el carácter en la cadena'0152:'
y lo invierte. Esta es la operación de espejo (de marcha atrás y el intercambio de2
s y5
s).µ;"
concatena el tiempo original con el tiempo reflejado →'05:2115:20'
⁾25ẇ$ÐṂ
filtra los tiempos con la subcadena'25'
. Esto captura cualquier momento en pares con la mitad25:xx
o espejo5x:xx
. Nota : No sé por qué$
es necesario. Quizás alguien podría jugarlo con la sintaxis adecuada, pero no estoy seguro.Divida cada uno de estos tiempos en dos mitades (
œs€2
) y luego únalas con la cuerda' - '
(j€“ - ”
).'05:2115:20'
→'05:21 - 15:20'
.Finalmente,
Y
une todas las cadenas con una nueva línea y todo se imprime implícitamente.versiones antiguas
62 bytes
Pruébalo en línea!
66 bytes
Pruébalo en línea!
72 bytes
Pruébalo en línea!
fuente
C (gcc) ,
175174 bytesÚnico gracias a @Steadybox.
Pruébalo en línea!
fuente
Befunge, 178 bytes
Pruébalo en línea!
fuente
Kotlin ,
205207 bytesEmbellecido
Prueba
TIO
TryItOnline
Ediciones
fuente
-
. Solo cuesta dos bytes agregar: ¡ Pruébelo en línea!C, 225 bytes
Como no hay una respuesta C, publico la mía. Algún otro enfoque podría ser más corto.
Pruébalo en línea!
fuente