Fondo
Tengo un montón de viejas y granuladas imágenes en blanco y negro. Algunos de ellos representan enredaderas trepando por una pared, otros no; su tarea es clasificarlos por mí.
Entrada y salida
Su entrada es una matriz rectangular 2D de bits A , dada en cualquier formato conveniente. No estará vacío, pero no se garantiza que contenga 0s y 1s. La matriz representa una vid si se cumplen las siguientes condiciones:
- La fila inferior de A contiene al menos uno 1. Estas son las raíces de la vid.
- Cada 1 en A está conectado a la fila inferior por una ruta de 1s que solo va a la izquierda, derecha y abajo (no arriba y no diagonalmente). Estos caminos son las ramas de la vid.
Su salida es un valor de verdad consistente si la entrada representa una viña, y un valor de falsedad consistente de lo contrario.
Ejemplos
Esta matriz representa una vid:
0 0 1 0 0 1
0 1 1 0 0 1
0 1 0 1 1 1
1 1 0 1 0 1
0 1 1 1 0 1
0 0 1 0 1 1
Esta entrada no representa una viña, ya que hay un 1 en el medio del borde derecho que no está conectado a las raíces por una rama:
0 0 0 1 1 0
0 1 0 1 1 1
0 1 0 1 0 1
0 1 1 1 1 0
0 0 1 1 0 1
La matriz all-0 nunca representa un vine, pero la matriz all-1 siempre lo hace.
Reglas y puntaje
Puede escribir un programa completo o una función. El conteo de bytes más bajo gana, y las lagunas estándar no se permiten.
Casos de prueba
Entradas de verdad:
1
0
1
1
01
11
0000
0111
1100
1001
1111
1111
1111
1111
001001
011001
010111
110101
011101
001011
1011011
1001001
1111111
0100000
0111111
1111001
1001111
1111101
0000000
0011100
0010100
0011100
0001000
1111111
0001000
0011100
0010100
0010100
Entradas de falsa:
0
1
0
10
01
000
000
000
011
110
000
111111
000000
101011
111001
010010
001000
000010
110001
001100
111111
110101
010011
111011
000110
010111
010101
011110
001101
11000000
10110001
10011111
11110001
01100011
00110110
01101100
01100001
01111111