Stellen wir uns einen normalen Mauerziegel als vor [__]
(und ignorieren Sie die Tatsache, dass die Oberseite offen ist). Wenn diese Steine gestapelt werden, wird jede zweite Schicht um einen halben Stein versetzt, wie es im Ziegelbau üblich ist:
[__][__][__][__]
[__][__][__][__]
[__][__][__][__]
[__][__][__][__]
Somit hat jeder Ziegel höchstens sechs Nachbarn und es ist unmöglich, dass zwei Ziegel direkt vertikal ausgerichtet werden.
Der entscheidende Punkt ist, dass die Anordnungen dieser Steine nicht gemörtelt werden , sondern lediglich durch die Schwerkraft zusammengehalten werden. Daher ist es wichtig, dass jeder Stein in der Struktur stabil ist, da sonst die gesamte Struktur instabil ist.
Es gibt drei Möglichkeiten, wie ein einzelner Ziegelstein stabil sein kann:
- Jeder Ziegel auf dem Boden (die unterste Ziegelreihe) ist stabil.
Jeder Stein, der zwei Steine direkt darunter hat, ist stabil:
[__] <- this brick is stable [__][__] <- because these bricks hold it up
Jeder Stein, auf dessen Seite sich oben und unten ein Stein befindet, ist stabil:
[__] [__] [__] [__] <- these middle bricks are stable [__] [__] because the upper and lower bricks clamp them in [__] [__] [__] [__] <- these middle bricks are NOT stable [__] [__]
Aus diesen Regeln können wir zum Beispiel die Anordnung ersehen
[__][__][__][__]
[__][__][__][__]
[__][__][__][__]
[__][__][__][__]
ist instabil, weil der obere rechte Ziegel instabil ist, was alles ist, was es braucht.
Eine Ziegelkonstruktion ist nur dann stabil, wenn alle Ziegel stabil sind.
Herausforderung
Ihre Aufgabe ist es, eine Funktion zu schreiben, die eine Brick-Strukturzeichenfolge aufnimmt und einen Wahrheitswert zurückgibt, wenn die Struktur stabil ist, und einen falschen Wert, wenn sie instabil ist. ( wahrheitsgemäße / falsche Definition )
Die Eingabezeichenfolge kann beliebig groß sein, es handelt sich jedoch immer um ein rechteckiges Zeichenraster mit Leerzeichen, die Bereiche ohne Ziegel füllen. Die Zeichenrasterbreite ist durch 4 teilbar, die Höhe kann jedoch ungerade oder gerade sein.
Das Ziegelgitter erstreckt sich immer über und rechts von der unteren linken Ziegelposition:
.
.
.
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?
Je nach Struktur steht jeder BRK?
für einen Stein ( [__]
) oder einen leeren Raum (4 Räume).
Beachten Sie, dass die Hohlräume aus halben Ziegeln mit Leerzeichen gefüllt sind, um sicherzustellen, dass das Zeichenraster rechteckig ist.
Wertung
Der kürzeste Code in Bytes gewinnt.
Anmerkungen
- Falls gewünscht, können Sie
.
anstelle des Leerzeichens ein Leerzeichen verwenden. - Die leere Zeichenfolge wird als stabil betrachtet.
- Wenn Ihre Sprache keine Funktionen hat, können Sie eine benannte Zeichenfolgenvariable als Eingabe verwenden und das Ergebnis einer anderen Variablen zuweisen.
- Wenn Ihre Sprache keine Zeichenketten enthält, können Sie alles tun, was für die Eingabe angemessen erscheint.
Testfälle
Verschiedene Testfälle, durch Leerzeilen getrennt. Aus Gründen der Übersichtlichkeit .
wird anstelle von Leerzeichen Leerzeichen verwendet.
Stabil:
[__]
..[__]..
[__][__]
........[__]........
......[__][__]......
........[__]........
..[__][__]..
[__][__][__]
..[__][__]..
[__]....[__]
............[__]..
..[__][__][__][__]
[__][__][__][__]..
..[__][__][__][__]
[__][__][__][__]..
..[__]........[__]..
[__][__][__][__][__]
..[__][__][__][__]..
....[__][__][__]....
......[__][__]......
........[__]........
Instabil:
..[__]..
........
..[__]..
[__]....
..[__]..
....[__]
..[__][__]..
[__]....[__]
..[__][__]..
[__]....[__]
..[__][__][__][__]
[__][__][__][__]..
..[__][__][__][__]
[__][__][__][__]..
[__][__][__][__][__]
..[__][__][__][__]..
....[__][__][__]....
......[__][__]......
........[__]........
........[__]....
......[__][__]..
....[__][__]....
..[__][__]......
[__][__]........
..[__]..........
(Sie müssen diese Linien in Gedanken übereinander stapeln. Der Punkt ist, dass Ihre Regeln Strukturen zulassen, deren Schwerpunkt weit von ihrem Kontaktpunkt mit dem Boden entfernt ist. Es sollte möglich sein, sie festzuziehen, um dies zu vermeiden , ohne eine Physik-Engine, wenn Sie Lust dazu hatten.)