Representemos un ladrillo de mampostería estándar como [__]
(e ignoremos el hecho de que la parte superior está abierta). Cuando se apilan estos ladrillos, cada otra capa se compensa con medio ladrillo, como es habitual en la construcción de ladrillos:
[__][__][__][__]
[__][__][__][__]
[__][__][__][__]
[__][__][__][__]
Por lo tanto, cada ladrillo tiene como máximo seis vecinos y es imposible que dos ladrillos se alineen directamente verticalmente.
El punto clave es que los arreglos de estos ladrillos no se mueven , sino que simplemente se mantienen unidos por gravedad. Por lo tanto, es importante que cada ladrillo en la estructura sea estable, de lo contrario, toda la estructura es inestable.
Hay tres formas en que un ladrillo individual puede ser estable:
- Cualquier ladrillo en el suelo (la línea más baja de ladrillos) es estable.
Cualquier ladrillo que tenga dos ladrillos directamente debajo es estable:
[__] <- this brick is stable [__][__] <- because these bricks hold it up
Cualquier ladrillo que tenga un ladrillo encima y debajo del mismo lado es estable:
[__] [__] [__] [__] <- these middle bricks are stable [__] [__] because the upper and lower bricks clamp them in [__] [__] [__] [__] <- these middle bricks are NOT stable [__] [__]
De estas reglas podemos ver, por ejemplo, la disposición
[__][__][__][__]
[__][__][__][__]
[__][__][__][__]
[__][__][__][__]
es inestable porque el ladrillo superior derecho es inestable, que es todo lo que se necesita.
Una estructura de ladrillos solo es estable si todos sus ladrillos son estables.
Reto
Su tarea es escribir una función que tome una cadena de estructura de ladrillo y devuelva un valor verdadero si la estructura es estable, y un valor falso si es inestable. ( verdad / falsa definición )
La cadena de entrada puede ser arbitrariamente grande, pero siempre será una cuadrícula rectangular de caracteres, con espacios que llenan áreas sin ladrillos. El ancho de la cuadrícula de caracteres será divisible por 4, pero la altura puede ser impar o par.
La cuadrícula de ladrillo siempre se extiende por encima y a la derecha de la posición inferior izquierda del ladrillo:
.
.
.
BRK?BRK?BRK?BRK?
BRK?BRK?BRK?BRK?BRK?
BRK?BRK?BRK?BRK?
BRK?BRK?BRK?BRK?BRK? . . .
BRK?BRK?BRK?BRK?
BRK?BRK?BRK?BRK?BRK?
Dependiendo de la estructura, cada BRK?
uno representa un ladrillo ( [__]
) o un espacio vacío (4 espacios).
Observe que las cavidades de medio ladrillo se rellenan con espacios para garantizar que la cuadrícula de caracteres sea rectangular.
Tanteo
El código más corto en bytes gana.
Notas
- Si lo desea, puede usar
.
lugar de espacio como el carácter de espacio vacío. - La cadena vacía se considera estable.
- Si su idioma no tiene funciones, puede usar una variable de cadena con nombre como entrada y asignar el resultado a otra variable.
- Si su idioma no tiene cadenas, puede hacer lo que parezca apropiado para la entrada.
Casos de prueba
Varios casos de prueba, separados por líneas vacías. Para mayor claridad .
se utiliza en lugar de espacio para espacios vacíos.
Estable:
[__]
..[__]..
[__][__]
........[__]........
......[__][__]......
........[__]........
..[__][__]..
[__][__][__]
..[__][__]..
[__]....[__]
............[__]..
..[__][__][__][__]
[__][__][__][__]..
..[__][__][__][__]
[__][__][__][__]..
..[__]........[__]..
[__][__][__][__][__]
..[__][__][__][__]..
....[__][__][__]....
......[__][__]......
........[__]........
Inestable:
..[__]..
........
..[__]..
[__]....
..[__]..
....[__]
..[__][__]..
[__]....[__]
..[__][__]..
[__]....[__]
..[__][__][__][__]
[__][__][__][__]..
..[__][__][__][__]
[__][__][__][__]..
[__][__][__][__][__]
..[__][__][__][__]..
....[__][__][__]....
......[__][__]......
........[__]........
........[__]....
......[__][__]..
....[__][__]....
..[__][__]......
[__][__]........
..[__]..........
(tendrá que apilar mentalmente esas líneas una encima de la otra. El punto es que sus reglas permiten estructuras cuyo centro de gravedad está muy alejado de su punto de contacto con el suelo. Debería ser posible apretarlas para evitar esto , sin necesidad de un motor de física, si te apetece.)