Desafío
Dada una matriz de enteros positivos, determine si hay "anillos" de montañas. La definición formal de este desafío es: dada una matriz de enteros positivos, ¿hay algún entero positivo n
para el que haya un anillo cerrado de celdas en la matriz que sea estrictamente mayor n
que todas las celdas encerradas en el anillo son menores o iguales? a n
.
Tomemos un ejemplo verdadero:
3 4 5 3
3 1 2 3
4 2 1 3
4 3 6 5
Si establecemos n
a 2
:
1 1 1 1
1 0 0 1
1 0 0 1
1 1 1 1
Como podemos ver claramente, las 1
s a lo largo del borde forman un anillo.
Definimos un anillo como una colección ordenada de celdas donde las celdas adyacentes en la colección también son adyacentes (borde o esquina) en la cuadrícula. Además, el anillo debe contener al menos 1 celda dentro de él; es decir, intentar rellenar con BFS solo borde toda la matriz, excluyendo las celdas en la colección y nunca atravesando una celda en la colección, debe perder al menos una celda.
Casos de prueba de la verdad
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
Falsy Test Cases
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
Reglas
- Se aplican lagunas estándar
- Este es el código de golf , por lo que la respuesta más corta en bytes en cada idioma se declara ganadora de su idioma. No se aceptarán respuestas.
- La entrada puede tomarse como cualquier forma razonable para una matriz de enteros positivos
- La salida se puede dar como dos valores razonables, consistentes y distintos que indican [verdadero] o [falso].
fuente
n
Cuál es el tercer caso de prueba "verdadero" realmente verdadero? [1,2] ?Respuestas:
Jalea , 38 bytes
Pruébalo en línea!
Salidas 1 si la matriz contiene cadenas montañosas, 0 contrario.
Cómo funciona (un poco anticuado)
Es posible que pueda acortar un poco el código, por lo que esta sección probablemente sufrirá una gran edición.
El enlace de ayuda
Por ejemplo, dada una matriz en la forma:
Esto devuelve las matrices (el orden no importa):
En pocas palabras, esto genera las filas y columnas más externas, con las esquinas eliminadas.
El enlace principal
fuente
Limpio ,
224... 161 bytesPruébalo en línea!
Define la función
? :: [[Int]] -> Int
, devolviendo0
si hay un anillo, y de lo1
contrario.Funciona convirtiendo la matriz en
2
s para montañas0
ys para valles, luego se inunda con1
s hasta que el resultado deja de cambiar. Si0
todavía existe alguna s para cualquier altura de montaña, el producto será0
.fuente
JavaScript (Node.js) , 302 bytes
Pruébalo en línea!
Comprueba si el flujo desde un punto no puede alcanzar el borde, mientras que el borde puede caminar a cada punto
fuente