Przedstawmy standardową cegłę murarską jako [__](i zignorujemy fakt, że góra jest otwarta). Po ułożeniu tych cegieł w stos co druga warstwa jest przesunięta o pół cegły, jak to zwykle ma miejsce w przypadku konstrukcji z cegły:
[__][__][__][__]
[__][__][__][__]
[__][__][__][__]
[__][__][__][__]
W ten sposób każda cegła ma co najwyżej sześciu sąsiadów i dwie cegły nie mogą ustawić się bezpośrednio w linii.
Kluczową kwestią jest to, że układy tych cegieł nie są zaprawione , lecz jedynie utrzymywane razem przez grawitację. Dlatego ważne jest, aby każda cegła w konstrukcji była stabilna, w przeciwnym razie cała struktura będzie niestabilna.
Istnieją trzy sposoby, w których pojedyncza cegła może być stabilna:
- Każda cegła na ziemi (najniższa linia cegieł) jest stabilna.
Każda cegła, która ma dwie cegły bezpośrednio pod nią, jest stabilna:
[__] <- this brick is stable [__][__] <- because these bricks hold it upKażda cegła, która ma cegłę zarówno nad, jak i pod nią po tej samej stronie, jest stabilna:
[__] [__] [__] [__] <- these middle bricks are stable [__] [__] because the upper and lower bricks clamp them in [__] [__] [__] [__] <- these middle bricks are NOT stable [__] [__]
Z tych zasad możemy zobaczyć, na przykład, aranżację
[__][__][__][__]
[__][__][__][__]
[__][__][__][__]
[__][__][__][__]
jest niestabilny, ponieważ prawy górny klocek jest niestabilny, co wystarczy.
Struktura cegły jest stabilna tylko wtedy, gdy wszystkie jej cegły są stabilne.
Wyzwanie
Twoim zadaniem jest napisanie funkcji, która pobiera ciąg struktury z cegły i zwraca prawdziwą wartość, jeśli struktura jest stabilna, a wartość fałsz, jeśli jest niestabilna. ( definicja prawdy / fałszu )
Łańcuch wejściowy może być dowolnie duży, ale zawsze będzie prostokątną siatką znaków, ze spacjami wypełniającymi obszary pozbawione cegieł. Szerokość siatki znaków będzie podzielna przez 4, ale wysokość może być nieparzysta lub parzysta.
Kratka z cegły zawsze rozciąga się powyżej i na prawo od dolnej lewej pozycji cegły:
.
.
.
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?
W zależności od struktury każda BRK?reprezentuje cegłę ( [__]) lub pustą przestrzeń (4 spacje).
Zauważ, że wnęki z połowy cegły są wypełnione spacjami, aby siatka znaków była prostokątna.
Punktacja
Najkrótszy kod w bajtach wygrywa.
Notatki
- W razie potrzeby możesz użyć
.zamiast spacji jako znaku pustej spacji. - Pusty ciąg jest uważany za stabilny.
- Jeśli twój język nie ma funkcji, możesz użyć nazwanej zmiennej łańcuchowej jako danych wejściowych i przypisać wynik do innej zmiennej.
- Jeśli twój język nie ma łańcuchów, możesz zrobić wszystko, co wydaje się odpowiednie do wprowadzania danych.
Przypadki testowe
Różne przypadki testowe, oddzielone pustymi liniami. Dla jasności .zastosowano zamiast spacji puste miejsca.
Stabilny:
[__]
..[__]..
[__][__]
........[__]........
......[__][__]......
........[__]........
..[__][__]..
[__][__][__]
..[__][__]..
[__]....[__]
............[__]..
..[__][__][__][__]
[__][__][__][__]..
..[__][__][__][__]
[__][__][__][__]..
..[__]........[__]..
[__][__][__][__][__]
..[__][__][__][__]..
....[__][__][__]....
......[__][__]......
........[__]........
Nietrwały:
..[__]..
........
..[__]..
[__]....
..[__]..
....[__]
..[__][__]..
[__]....[__]
..[__][__]..
[__]....[__]
..[__][__][__][__]
[__][__][__][__]..
..[__][__][__][__]
[__][__][__][__]..
[__][__][__][__][__]
..[__][__][__][__]..
....[__][__][__]....
......[__][__]......
........[__]........
........[__].... ......[__][__].. ....[__][__].... ..[__][__]...... [__][__]........ ..[__]..........(będziesz musiał mentalnie ułożyć te linie jedna na drugiej. Chodzi o to, że twoje reguły dopuszczają konstrukcje, których środek ciężkości jest daleko odsunięty od ich punktu styku z podłożem. Powinno być możliwe ich zaostrzenie, aby tego uniknąć , bez potrzeby korzystania z silnika fizyki, jeśli masz na to ochotę.)