Imagine um incendiário andando pela cidade e escolhendo suas vítimas de acordo com um padrão muito específico (ou, alternativamente, imagine uma abelha voando pelo jardim e escolhendo suas flores para polenizar de acordo com um padrão muito específico ). Digamos que a cidade seja uma matriz N × N , onde N é um número inteiro maior ou igual a 2 . O incendiário começa no canto superior esquerdo e coloca sucessivamente os pontos da casa M na frente deles (onde M é o número da casa em que estão atualmente), enquanto muda a direção em que está se movendo após cada incêndio, na ordem Leste ⟶ Sul ⟶ Oeste ⟶ Norte ⟶ Leste ⟶ Sul ... e assim por diante. A canção de ninardo incendiário é o valor de M que os leva a sair da cidade (ou seja, a última casa que visitam antes de parar a abominação). Isso é muito mais fácil de entender com um exemplo. Tome a seguinte matriz, por exemplo:
3 2 3 2 7 3 1 4 1 6 2 5 3 1 1 4 4 3 2 4 1 1 1 1 1
- Começamos no canto superior esquerdo, então M = 3 (
X
marca as posições atuais e anteriores do incendiário):X 2 3 2 7 3 1 4 1 6 2 5 3 1 1 4 4 3 2 4 1 1 1 1 1
- De acordo com a ordem conhecida, primeiro ele vai para o leste M (3) pontos e pousa em um 2, para que M mude de acordo:
X 2 3 X 7 3 1 4 1 6 2 5 3 1 1 4 4 3 2 4 1 1 1 1 1
- Então ele vai para o sul 2 pontos e M agora é 1 :
X 2 3 X 7 3 1 4 1 6 2 5 3 X 1 4 4 3 2 4 1 1 1 1 1
- Agora ele se move 1 ponto para o oeste e M se torna 3 :
X 2 3 X 7 3 1 4 1 6 2 5 XX 1 4 4 3 2 4 1 1 1 1 1
- Depois que ele se move 3 pontos ao norte, sai da cidade! Portanto, 3 é a canção de ninar desse incendiário:
X X 2 3 X 7 3 1 4 1 6 2 5 XX 1 4 4 3 2 4 1 1 1 1 1
Dada uma matriz N × N (você também pode usar N como entrada), encontre a canção de ninar do incendiário. Eu escrevi um programa com o qual você pode gerar mais casos de teste e visualizar o caminho do incendiário: Experimente online!
- Você pode assumir que o incendiário não têm uma canção de ninar (isto é, ele pode realmente sair da matriz).
- A matriz conterá apenas números inteiros positivos menores ou iguais a 9 (dígitos), para simplificar. Soluções que lidam com qualquer número inteiro positivo são completamente bem-vindas.
- Observe que o incendiário pode pousar em um local que já queimou, caso o sentido em que está se movendo seja diferente da primeira vez. Nesse cenário, basta pegar o valor desse elemento e mover novamente como de costume.
- Você pode competir em qualquer linguagem de programação e pode receber e fornecer saída por qualquer método padrão , observando que essas brechas são proibidas por padrão. Isso é código-golfe , então a submissão mais curta (em bytes) para todos os idiomas vence.
Casos de teste
------------- 9 2 3 1 7 2 8 7 6 Canção de ninar: 9 ------------- 2 1 2 1 3 1 1 2 1 2 2 1 1 1 1 3 Canção de ninar: 2 ------------- 3 2 3 2 7 3 1 4 1 6 2 5 3 1 1 4 4 3 2 4 1 1 1 1 1 Canção de ninar: 3 ------------- 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 Canção de ninar: 2 ------------- 3 2 1 2 1 1 1 2 3 2 3 2 1 1 2 1 1 1 3 1 2 3 1 1 1 1 1 1 4 5 2 3 1 1 1 1 2 1 2 1 2 2 1 2 2 3 2 1 2 Canção de ninar: 3 -------------
As matrizes em um formato diferente:
[[9, 2, 3], [1, 7, 2], [8, 7, 6]] [[2, 1, 2, 1], [3, 1, 1, 2], [1, 2, 2, 1], [1, 1, 1, 3]] [[3, 2, 3, 2, 7], [3, 1, 4, 1, 6], [2, 5, 3, 1, 1], [4, 4, 3, 2, 4], [ 1, 1, 1, 1, 1]] [[1, 2, 1, 2, 1, 2], [1, 2, 1, 2, 1, 2], [1, 2, 1, 2, 1, 2], [1, 2, 1, 2, 1, 2], [1, 2, 1, 2, 1, 2], [1, 2, 1, 2, 1, 2]] [[3, 2, 1, 2, 1, 1, 1], [2, 3, 2, 3, 2, 1, 1], [2, 1, 1, 1, 1, 3, 1, 2], [ 3, 1, 1, 1, 1, 1, 1], [4, 5, 2, 3, 1, 1, 1], [1, 2, 1, 2, 1, 2, 2], [1, 2, 2, 3, 2, 1, 2]]
O quinto caso de teste é muito interessante para visualizar .