Como amanhã é dia 4 de maio, aqui está uma pequena postagem com tema de Guerra nas Estrelas para prepará-lo mentalmente para todas as piadas ruins que virão amanhã.
BACKSTORY
Durante uma sessão do senado galáctico, todos os senadores estão sentados em uma n*n
grade. Um surto repentino de gripe JarJar (que dura para sempre e faz com que os infectados falem como JarJar Binks) faz com que alguns senadores sejam infectados.
Aqui está um exemplo com uma 6*6
grade onde X
estão os senadores infectados, a lista correspondente é [[0,5],[1,4],[2,3],[2,1],[3,3],[3,0],[4,5],[0,5]]
:
Depois disso, a infecção começa a se espalhar passo a passo. Dois senadores são adjacentes se eles compartilham uma borda inteira na grade (ou seja, superior, inferior, direita, esquerda), o que significa que excluímos diagonais.
Podemos concluir que um senador pode estar adjacente a 2,3 ou 4 outros senadores e reivindicar as seguintes regras para a infecção:
- Um senador que foi infectado permanece infectado para sempre
- Um senador é infectado em uma etapa se estiver adjacente a 2 ou mais senadores infectados na etapa anterior
Aqui está um exemplo com a grade anterior, que mostra os 2 primeiros passos da infecção:
Após os próximos passos, todo o Senado será infectado
SUA TAREFA
Seu código não precisa manipular entradas inválidas, como uma lista maior n*n
ou coordenadas que não são distintas.
Seu código terá como entrada uma lista de pares de números inteiros (ou uma grade binária ou qualquer outro formato adequado ao seu idioma) e um número inteiro n
(que pode ser desnecessário se você usar outro formato que não uma lista), por exemplo:
8 [[1,2],[1,1],[7,4],[2,7],[4,3]]
n sendo o lado da grade, o que significa que a grade será uma grade * n, e a lista de pares de números inteiros sendo as coordenadas das células dos senadores infectados inicialmente.
O canto inferior esquerdo da grade é [0,0] e o canto superior direito é [n-1, n-1]. O canto superior esquerdo é [0, n-1].
Seu código deve gerar um número inteiro:
-1
ou um valor falso ou um erro se a grade inteira nunca for totalmente infectada ou o número mínimo de etapas necessárias para infectar a grade inteira
Casos de teste
6 [[0,5],[1,4],[2,3],[2,1],[3,3],[3,0],[4,5],[5,0]] => 7
4 [[1,1][0,3][1,0][3,0][3,3]] => 9
Lembre-se de que isso é código-golfe ; portanto, a resposta mais curta em bytes vence!
n
? Existe um valor máximo?
CellularAutomaton
...