Como encontrar e calcular momentos com números iguais no relógio
Essa é uma daquelas coisas que todo mundo já notou de passagem — 11:11, 22:22, 00:00 — e quase ninguém para pra pensar no que realmente acontece quando você tenta mapear isso de forma sistemática. A maioria das pessoas que me perguntam sobre isso quer saber quantos momentos assim existem numa ciclo de 12 ou 24 horas, e qual a lógica por trás. Vou explicar como eu ligo isso na prática, porque o caminho mais óbvio geralmente leva a contagem errada se você não prestar atenção aos detalhes.
O conceito básico de numeros iguais no relogio
Num relógio digital, temos dígitos organizados como HH:MM. Quando falamos de números iguais, entramos em dois tipos principais de padrões: os onde todos os quatro dígitos são idênticos, e os onde há repetições dentro do conjunto (como dois pares ou três iguais mais um diferente). O primeiro grupo é muito restrito. No formato 12 horas, só temos 11:11 e 00:00 como candidatos plausíveis — mas 00:00 nem existe no ciclo de 12h padrão, então na verdade fica só 11:11 mesmo. No formato 24 horas, temos 00:00, 11:11, 22:22. É isso. Três momentos. O segundo grupo é onde a coisa fica interessante. Vou dar um exemplo prático que eu encontrei num projeto meu há uns anos. Eu precisava contar todos os momentos num ciclo de 24h onde pelo menos dois dígitos eram iguais. A tentação é criar um loop for iterando todas as combinações possíveis de hora e minuto e aplicar uma função de comparação char por char. Isso funciona, mas é lento e propenso a erro de indexação se você não tratar bem a conversão de inteiros pra string.
O workaround que eu uso agora é bem mais enxuto: gerar as strings diretamente com padding de zero à esquerda usando uma função simples de formatação, e depois contar ocorrências com um mapa de frequência. Em Python, seria algo como formatar cada valor com zfill(2) e usar collections.Counter. Para um ciclo de 24h, isso leva menos de meio segundo pra rodar.
A abordagem técnica
Vamos ao que importa. Se você quer implementar isso, o fluxo é o seguinte: Primeiro, defina o espaço de busca. Formato 12h: horas de 1 a 12, minutos de 00 a 59. Formato 24h: horas de 00 a 23, minutos de 00 a 59. A diferença entre os dois formatos é o que mais causa confusão, porque 13:00 até 23:59 simplesmente não existem no relógio de 12h.
Depois, decida o critério exato de "números iguais". As variações mais comuns são: Todos os dígitos idênticos: AAAA. Só funciona quando H é 0, 1 ou 2 (em 24h), e A se repete nos minutos também.
Dois pares: AABB onde AA == BB. Exemplo: 11:11, 22:22. No formato 12h, 01:10 não conta porque os pares são diferentes. Pelo menos dois iguais: qualquer combinação onde haja pelo menos um dígito repetido. Esse é o critério mais amplo e o que mais gera discussão.
Implementando o critério mais amplo em pseudocódigo: Para cada hora h de 0 a 23:
👉 Clique no botão abaixo para saber mais sobre o assunto!
Para cada minuto m de 0 a 59: Formate h como string de 2 dígitos, m como string de 2 dígitos.
Conte a frequência de cada dígito no resultado concatenado. Se algum dígito aparecer mais de uma vez, registre como válida.
Esse algoritmo cruza 1440 combinações no máximo (formato 24h). Em qualquer linguagem razoável, roda em tempo instantâneo. Não precisa de otimização avançada.
Dados práticos e resultados
No formato 24h, usando o critério "pelo menos dois dígitos iguais", o resultado é 660 momentos em 1440 total. Ou seja, praticamente metade dos minutos do dia tem alguma repetição. Se eu restringir para "todos os dígitos iguais", sobram 3. Se eu restringir para "exatamente dois dígitos iguais", o número cai pra 540. No formato 12h (com 720 minutos totais), "pelo menos dois iguais" dá 336 momentos. A simetria entre os dois formatos é aproximada porque o formato 12h simplesmente espelha o 24h pela metade, mas com a exceção de que 12:xx e 00:xx representam horas visualmente distintas.
Um detalhe que quase todo mundo erra na primeira implementação: o dígito das dezenas da hora só pode ser 0, 1 ou 2 no formato 24h. Muita gente coloca um loop que vai de 0 a 99 pra hora, o que gera resultados completamente inválidos. Eu já vi gente usar regex ^(\d)\1{3}$ pra validar "todos iguais" e esquecer que 99:99 não é hora válida. A regex filtra os dígitos mas não o domínio horário. Esse é o erro mais comum que eu vejo em fóruns técnicos.
Quando isso não funciona bem
A abordagem de força bruta (iterar tudo) é perfeitamente adequada para relógios digitais convencionais porque o espaço de busca é pequeno. Porém, se você estender o problema pra relógios analógicos — onde a pergunta vira "quantas vezes as pontas se sobrepõem" — o método muda completamente. Nesse caso, a resposta é 22 sobreposição por ciclo de 12h, não 12 como muita gente acha intuitivamente. A diferença existe porque o ponteiro das horas também se move enquanto o dos minutos gira. Outro cenário onde a contagem direta falha é quando o relógio não é decimal. Relógios baseados em BCD, ou relógios que usam display de sete segmentos onde alguns dígitos se parecem visualmente (6 e 9 virados), ou relógios com notação hexadecimal — aí a definição de "número igual" depende de como você interpreta o display físico, não só os valores numéricos.
Se o seu objetivo é apenas visualizar ou gerar uma lista desses momentos pra uso pessoal, a solução mais prática é escrever um script simples. Se quiser algo pronto, procure por bibliotecas de análise temporal nas linguagens que você já domina. Não existe uma ferramenta única e definitiva nisso, e a maioria dos scripts que aparecem em repositórios genéricos têm o erro de não restringir o domínio horário corretamente. O que fica é a regra simples: defina o formato (12h ou 24h), defina o critério exato de igualdade, e rode a iteração completa. O resto é interpretação.