Cenário
Estou usando a tela de bloqueio de correspondência de padrões e, infelizmente, esqueci meu padrão. Gostaria de saber quanto tempo precisarei para desbloqueá-lo. Aqui estão as especificações da tela de bloqueio do Google, que usaremos para esse desafio.
- A cada 5 códigos incorretos, o usuário precisa aguardar
30 seconds
antes de qualquer entrada adicional. Um padrão deve, pelo menos, consistir em
4 points
(veja abaixo)Um ponto pode ser usado apenas uma vez, mas você pode examiná-lo várias vezes (veja a imagem abaixo):
Aqui, o ponto central é usado apenas uma vez, mesmo se formos examiná-lo novamente para esse padrão específico.
Hipótese e Fatos
Vamos assumir que somos super-heróis e que podemos desenhar qualquer padrão 1 second
, nunca precisamos comer ou dormir. Sim, somos sobre-humanos.
Eu sou uma pessoa muito azarada. "O pior cenário possível" é minha vida diária, portanto o padrão que tentarei por último será o correto.
O que temos que lançar?
Para quem não conhece, o Android (e outros telefones agora) oferece a capacidade de desbloquear o telefone desenhando um padrão em uma matriz de 9 pontos. Essa matriz pode ser descrita da seguinte maneira:
C(A) M(B) C(C)
M(D) X(E) M(F)
C(G) M(H) C(I)
- C em pé para "ponto de canto"
- M para "ponto médio"
- X para "ponto central"
- Eu dei identificadores aos pontos para facilitar
As conexões diretas permitidas são as seguintes:
Ponto de canto:
Ponto do meio:
Ponto central :
No entanto, como apontado por steveverrill, "uma vez que o centro foi usado (e, portanto, fica indisponível), uma conexão direta entre o canto inferior esquerdo e o canto superior direito torna-se inequívoca e, portanto, possível". O mesmo vale para cada "ponto do meio", se, por exemplo, o ponto B já tiver sido contado, é possível uma conexão direta entre A e C. Se, por exemplo, F já foi contado, é possível uma conexão direta entre C e I. Etc ...
Regras
- O objetivo desse desafio é retornar quanto tempo (em forma legível por humanos, também conhecido como ano / dia / mês / hora / qualquer que seja o tempo que você encontrar), precisarei desbloquear esse maldito telefone.
- Você não pode codificar o número possível de padrões válidos (nem mesmo o Google, seu tolo), calculá-lo (essa é realmente a parte divertida, não é?)
- Menor pedaço de código vence
- Boa sorte !
fonte
Respostas:
Rebmu :
197 175 168167 caracteresGera combinações como uma série de números (por exemplo, 12369 é do canto superior esquerdo para o canto superior direito para o canto inferior direito), verifica se a combinação é válida e, se for, incrementa um contador. Isso pode demorar um pouco * para ser executado. Retorna o número de segundos necessários para desbloquear o telefone.
Não silencioso e comentou:
O programa faz um loop de 1 a (987654321-1233), verificando 1233 + contador de loop (verificando 1234 a 987654321).
Se o número
987653088
for substituído por,9876-1233
ou8643
, o programa encontrará o tempo necessário para todas as combinações de 4 pontos.Saída para
9876-1233=8643
(combinações de 4 pontos):Saída para
98765-1233=97532
(combinações de 4 e 5 pontos):Saída para
987654-1233=986421
(combinações de 4,5,6 pontos):* 4/5 pontos levei cerca de 8 segundos para ser executado; 4-6 levou cerca de 77 segundos. Pode demorar cerca de 24 horas ou mais, dependendo de quem executa isso para calcular o número de combinações para combinações de 4-9 pontos.
fonte