Desafio
Dada uma matriz de números inteiros positivos, determine se existem "anéis" de montanhas. A definição formal para esse desafio é: dada uma matriz de números inteiros positivos, existe algum número inteiro positivo n
para o qual exista um anel fechado de células na matriz que seja estritamente maior do que n
tal que todas as células fechadas no anel sejam menores ou iguais para n
.
Vamos dar um exemplo verdadeiro:
3 4 5 3
3 1 2 3
4 2 1 3
4 3 6 5
Se definirmos n
para 2
:
1 1 1 1
1 0 0 1
1 0 0 1
1 1 1 1
Como podemos ver claramente, os 1
s ao longo da borda formam um anel.
Definimos um anel como uma coleção ordenada de células onde as células adjacentes na coleção também são adjacentes (aresta ou canto) na grade. Além disso, o anel deve conter pelo menos 1 célula dentro dele; isto é, a tentativa de preencher somente a borda do BFS em toda a matriz, excluindo as células da coleção e nunca atravessando uma célula na coleção, deve perder pelo menos uma célula.
Casos de teste de verdade
4 7 6 5 8 -> 1 1 1 1 1
6 2 3 1 5 -> 1 0 0 0 1 (n = 3)
6 3 2 1 5 -> 1 0 0 0 1
7 5 7 8 6 -> 1 1 1 1 1
1 3 2 3 2
1 6 5 7 2
1 7 3 7 4
1 6 8 4 6
1 3 1
3 1 3
1 3 1
7 5 8 7 5 7 8 -> if you have n = 4, you get an interesting ridge shape around the top and right of the grid
8 4 4 2 4 2 7
6 1 8 8 7 2 7
5 4 7 2 5 3 5
5 6 5 1 6 4 5
3 2 3 2 7 4 8
4 4 6 7 7 2 5
3 2 8 2 2 2 8
2 4 8 8 6 8 8
5 7 6 8 6 8 7 -> there is an island in the outer ring (n = 4), but the island is a ring
5 3 2 4 2 4 7
6 3 7 8 5 1 5
8 2 5 2 8 2 7
8 3 8 8 8 4 7
6 1 4 1 1 2 8
5 5 5 5 7 8 7
150 170 150
170 160 170
150 170 150
Casos de teste de falsidade
1 2 3 2 1 -> this is just a single mountain if you picture it graphcially
2 3 4 3 2
3 4 5 4 3
2 3 4 3 2
1 2 3 2 1
4 5 4 3 2 -> this is an off-centered mountain
5 6 5 4 3
4 5 4 3 2
3 4 3 2 1
1 1 1 1 1 -> this is four mountains, but they don't join together to form a ring
1 2 1 2 1
1 1 1 1 1
1 2 1 2 1
1 1 1 1 1
3 3 3 3 3 -> there is a ring formed by the `3`s, but the `4` in the middle is taller so it doesn't qualify as a mountain ring
3 1 1 1 3
3 1 4 1 3
3 1 1 1 3
3 3 3 3 3
3 4 4 4 3
4 4 3 4 4
3 3 3 3 4
4 4 3 4 4
3 4 4 4 3
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
22 23 24 25 26
Regras
- As brechas padrão se aplicam
- Isso é código-golfe , então a resposta mais curta em bytes em cada idioma é declarada a vencedora do seu idioma. Nenhuma resposta será aceita.
- A entrada pode ser tomada como qualquer forma razoável para uma matriz de números inteiros positivos
- A saída pode ser dada como dois valores razoáveis, consistentes e distintos, indicando [verdadeiro] ou [falso].
fonte
n
é realmente o terceiro caso de teste "verdade"? [1,2] ?Respostas:
Gelatina , 38 bytes
Experimente online!
Produz 1 se a matriz contiver cadeias de montanhas, 0 caso contrário.
Como funciona (um pouco desatualizado)
Talvez eu consiga reduzir um pouco o código, portanto esta seção provavelmente passará por uma edição pesada.
O link auxiliar
Por exemplo, dada uma matriz no formulário:
Isso retorna as matrizes (o pedido não importa):
Para encurtar a história, isso gera as linhas e colunas mais externas, com os cantos removidos.
O link principal
fonte
Limpo ,
224... 161 bytesExperimente online!
Define a função
? :: [[Int]] -> Int
, retornando0
se houver um toque e1
caso contrário.Trabalha transformando a matriz em
2
s para montanhas e0
s para vales e depois inunda com1
s até que o resultado pare de mudar. Se0
ainda existirem s para qualquer altura de montanha, o produto será0
.fonte
JavaScript (Node.js) , 302 bytes
Experimente online!
Verifica se o fluxo de um ponto não pode alcançar a borda, enquanto a borda pode caminhar para cada ponto
fonte