Muitos relógios digitais exibem o tempo usando dígitos simplificados, compostos por apenas sete luzes diferentes que estão ligadas ou desligadas:
Quando espelhados horizontalmente, os dígitos 018
não mudam porque são simétricos. Além disso, os dígitos 2
e 5
são trocados, 2
tornando 5
- se e vice-versa. Todos os outros dígitos se tornam inválidos quando espelhados.
Assim, dado um relógio digital de 24 horas, existem muitas leituras de relógio, de modo que a imagem espelhada do visor digital também é uma leitura válida do relógio. Sua tarefa é produzir todas essas leituras de relógio juntamente com as leituras espelhadas.
Por exemplo, 22:21
torna 15:55
- 00:15
se e torna - se 21:00
. Por outro lado, 12:34
ou 16:27
não são mais válidos quando espelhados (os dígitos 34679
se tornam inválidos) e nem são 22:22
ou 18:21
, porque, como existem apenas 24 horas em um dia e 60 minutos em uma hora, nenhum relógio são exibido 55:55
ou 12:81
.
Tarefa
Escreva um programa ou uma função que não aceite nenhuma entrada e envie todos os pares válidos em ordem crescente, como mostrado abaixo:
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
Uma nova linha à direita ou à esquerda é permitida. Ter alguns espaços diretamente antes de um avanço de linha também é permitido. Os horários devem estar no formato hh:mm
, preenchidos com zeros quando necessário.
Isso é código-golfe , então a resposta mais curta em bytes vence. Como de costume, as brechas padrão não são permitidas.
fonte
String
é uma matriz deChar
. É aceitável se minha resposta fornecer uma lista deChar
? Os tipos parecem idênticos quando impressos.1
não é exatamente idêntico à sua imagem espelhada, porque você pode dizer se os segmentos mais à direita ou mais à esquerda são usados para formar a "linha" vertical que compõe o dígito. Eu entendo que nós os consideramos idênticos aqui.1
central pudesse ser centralizada.Respostas:
05AB1E , 34 bytes
Experimente online!
Explicação
fonte
Python 2 ,
187180178177 bytesExperimente online!
Obrigado por +1 Kevin Cruijssen.
fonte
APL (Dyalog Unicode) , SBCS de 84 bytes
Saída do programa completo para STDOUT. Requer
⎕IO
( I ndex O rigin)0
que seja o padrão em muitos sistemas.Experimente online!
⍳1440
que muitas Ɩ ntegers0 60⊤
converter para base mista ∞, 60100+
adicione 100 (isso adiciona os 0s necessários)⍕¨
formato (stringify) cada1↓¨
solte o primeiro caractere de cada um (isso remove os 1s iniciais){
…}⌿
Aplique a seguinte função anônima em colunas (⍺
é hora principal,⍵
é minuto)0::
se ocorrer algum erro, não retorne nada⋄
experimentar:'015xx2xx8x:'[
…]
Indexe esta sequência com:∊⍺':'⍵
o ε nlisted (achatada) lista de horas, cólon, minutoi←
armazenado emi
(para i Nput)⎕D⍳
Ɩ ndices de cada personagem na lista de D igits⌽
inverta issot←
armazenar comot
(para t ime)(
… O)⊆
grupo é executado onde:':'≠t
cólon difere det
⍎¨
executar (avaliar) cada23 59≥
Booleano para cada um, seja menor ou igual a 23 e 59, respectivamente∧/
ambos são verdadeiros?:
Se sim, então:⍕i'-'t
a lista formatada (separada por espaço) de entrada, traço, hora1↓
largar o primeiro (espaço)⎕←
saída para STDOUTfonte
Retina , 57 bytes
Experimente online! Explicação:
Insira o separador.
Gere todos os conjuntos possíveis de quatro dígitos espelhados.
Exclua aqueles com horário ilegal.
Insira os dois pontos.
Classificar em ordem.
fonte
Python 2 ,
279277255 bytesExperimente online!
Créditos
279 bytes reduzidos para 256 por dylnan .
256 bytes reduzidos para 255 pelo FlipTrack .
fonte
Limpo ,
269...172170 bytesExperimente online!
Ungolfed:
fonte
Pitão , 48 bytes
Experimente online!
Gera todas as combinações possíveis
0125
e as manipula nos horários. Eles estão na ordem correta porque são gerados em ordem lexicográfica. Por fim, isso filtra os tempos extras inválidos removendo as linhas que correspondem à regex5.:
ou25:
. Infelizmente, não parece que a compactação funcione bem em nenhuma das strings que este programa usa, a menos que eu tenha cometido um erro ou supervisão.fonte
Perl 5 , 147 bytes
Experimente online!
fonte
Japonês v2 (+
-R
), 51 bytesTeste online!
Explicação
fonte
JavaScript (ES6), 142 bytes
Experimente online!
fonte
Carvão , 59 bytes
Experimente online! Link é a versão detalhada do código. Explicação:
Crie quatro loops aninhados para os dígitos não espelhados.
Verifique se nem as horas nem os minutos são 25. (O espelhamento dos 25 minutos resultará em 25 horas, portanto, isso é impossível).
Imprima o tempo não espelhado.
Imprima a hora espelhada convertendo os dígitos invertidos (ou
3
para os dois pontos) de string em número inteiro e procurando-os em uma tabela de conversão.Como alternativa, também para 59 bytes:
Experimente online!Link é a versão detalhada do código. Explicação:
Crie loops para as horas e minutos.
Excluir
25
e também quaisquer minutos que terminem em2
.Converta as horas e minutos para a base 4.
Imprima os dígitos pesquisados em uma tabela de conversão.
Imprima o separador.
Imprima os dígitos invertidos procurados em uma tabela de conversão espelhada.
fonte
Geléia ,
72666255 bytesExperimente online!
Programa niládico. Eu recebi o duplo produto da
'0125'
idéia da resposta 05AB1E de Emigna mas o resto fiz sem consultar isso, já que os idiomas divergem depois disso. Provavelmente existem oportunidades para jogar golfe, possivelmente muito.Explicação
O programa funciona da seguinte maneira:
Tome todos os produtos de comprimento quatro da lista de caracteres
'0125'
com“0152:”©ṢṖp`⁺
.©
copia a sequência'0152:'
no registro para uso posterior.ṢṖ
ordena então aparece o último elemento da string →'0125'
.⁺
duplica o link do produto.ḣ176
remove qualquer horário com formato25xx
ou5xxx
(horas não válidas).j€“:”
une cada par de dígitos com a':'
. por exemplo['05'],['21']]
→'05:12'
.Ç€
aplica o primeiro link a cada um desses horários. Ele encontra o índice de cada caractere na sequência'0125:'
e, para cada um desses índices, obtém o caractere na sequência'0152:'
e o inverte. Esta é a operação de espelhamento (reversão e troca de2
s e5
s).µ;"
concatena a hora original com a hora espelhada →'05:2115:20'
⁾25ẇ$ÐṂ
filtra os tempos com a substring'25'
. Isso captura todos os pares de tempo com metade espelhada25:xx
ou5x:xx
. Nota : Não sei por que$
é necessário. Talvez alguém possa jogar com a sintaxe adequada, mas não tenho certeza.Divida cada um desses tempos em duas metades (
œs€2
) e junte-as à sequência' - '
(j€“ - ”
).'05:2115:20'
→'05:21 - 15:20'
.Finalmente,
Y
junta todas as cadeias de caracteres com uma nova linha e tudo é impresso implicitamente.Versões antigas
62 bytes
Experimente online!
66 bytes
Experimente online!
72 bytes
Experimente online!
fonte
C (gcc) ,
175174 bytesGraças a @Steadybox.
Experimente online!
fonte
Anterior, 178 bytes
Experimente online!
fonte
Kotlin ,
205207 bytesEmbelezado
Teste
TIO
TryItOnline
Editar% s
fonte
-
. Custa apenas dois bytes para adicionar: Experimente online!C, 225 bytes
Como não há resposta C, eu posto a minha. Outra abordagem pode ser mais curta.
Experimente online!
fonte