Représentons une brique de maçonnerie standard comme [__]
(et ignorons le fait que le haut est ouvert). Lorsque ces briques sont empilées, toutes les autres couches sont compensées par une demi-brique, comme c'est généralement le cas dans la construction en briques:
[__][__][__][__]
[__][__][__][__]
[__][__][__][__]
[__][__][__][__]
Ainsi, chaque brique a au plus six voisins et il est impossible pour deux briques de s'aligner directement verticalement.
Le point clé est que les dispositions de ces briques ne sont pas mortier , mais simplement maintenues ensemble par gravité. Il est donc important que chaque brique de la structure soit stable, sinon la structure entière est instable.
Il existe trois façons dont une brique individuelle peut être stable:
- Toute brique au sol (la ligne de briques la plus basse) est stable.
Toute brique qui a deux briques directement en dessous est stable:
[__] <- this brick is stable [__][__] <- because these bricks hold it up
Toute brique qui a une brique au-dessus et en dessous du même côté est stable:
[__] [__] [__] [__] <- these middle bricks are stable [__] [__] because the upper and lower bricks clamp them in [__] [__] [__] [__] <- these middle bricks are NOT stable [__] [__]
De ces règles, nous pouvons voir, par exemple, l'arrangement
[__][__][__][__]
[__][__][__][__]
[__][__][__][__]
[__][__][__][__]
est instable parce que la brique en haut à droite est instable, c'est tout ce qu'il faut.
Une structure en brique n'est stable que si toutes ses briques sont stables.
Défi
Votre tâche consiste à écrire une fonction qui prend une chaîne de structure en brique et retourne une valeur véridique si la structure est stable et une valeur fausse si elle est instable. ( définition véridique / fausse )
La chaîne d'entrée peut être arbitrairement grande mais ce sera toujours une grille rectangulaire de caractères, avec des espaces remplissant des zones vides de briques. La largeur de la grille de caractères sera divisible par 4 mais la hauteur peut être paire ou impaire.
La grille de briques s'étend toujours au-dessus et à droite de la position de brique inférieure gauche:
.
.
.
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?
Selon la structure, chacun BRK?
représente soit une brique ( [__]
) soit un espace vide (4 espaces).
Notez que les cavités en demi-brique sont remplies d'espaces pour garantir que la grille de caractères est rectangulaire.
Notation
Le code le plus court en octets gagne.
Remarques
- Si vous le souhaitez, vous pouvez utiliser à la
.
place de l'espace comme caractère d'espace vide. - La chaîne vide est considérée comme stable.
- Si votre langue n'a pas de fonctions, vous pouvez utiliser une variable de chaîne nommée en entrée et affecter le résultat à une autre variable.
- Si votre langue n'a pas de chaînes, vous pouvez faire tout ce qui semble approprié pour la saisie.
Cas de test
Différents cas de test, séparés par des lignes vides. Pour plus de clarté .
est utilisé à la place de l'espace pour les espaces vides.
Stable:
[__]
..[__]..
[__][__]
........[__]........
......[__][__]......
........[__]........
..[__][__]..
[__][__][__]
..[__][__]..
[__]....[__]
............[__]..
..[__][__][__][__]
[__][__][__][__]..
..[__][__][__][__]
[__][__][__][__]..
..[__]........[__]..
[__][__][__][__][__]
..[__][__][__][__]..
....[__][__][__]....
......[__][__]......
........[__]........
Instable:
..[__]..
........
..[__]..
[__]....
..[__]..
....[__]
..[__][__]..
[__]....[__]
..[__][__]..
[__]....[__]
..[__][__][__][__]
[__][__][__][__]..
..[__][__][__][__]
[__][__][__][__]..
[__][__][__][__][__]
..[__][__][__][__]..
....[__][__][__]....
......[__][__]......
........[__]........
........[__]....
......[__][__]..
....[__][__]....
..[__][__]......
[__][__]........
..[__]..........
(vous devrez empiler mentalement ces lignes les unes sur les autres. Le fait étant que vos règles autorisent les structures dont le centre de gravité est loin de leur point de contact avec le sol. Il devrait être possible de les resserrer pour éviter cela , sans avoir besoin d'un moteur physique, si vous en aviez envie.)