Siatki heksagonalne stały się ostatnio dość popularną odmianą wyzwań związanych z danymi dwuwymiarowymi. Wydaje się jednak, że równie interesujące trójkątne siatki były dotychczas w dużej mierze zaniedbywane. Chciałbym to naprawić za pomocą dość prostego wyzwania.
Po pierwsze, jak reprezentujemy trójkątną siatkę? Rozważ następujący przykład (na razie zignoruj odpowiedni schemat):
Komórki starannie opadają na regularną siatkę (różnica w stosunku do zwykłej siatki polega tylko na tym, które komórki są uważane za sąsiadujące):
1234567
89abcde
fghijkl
mnopqrs
Teraz, jak pokazuje prawy schemat, siatka trójkątna ma trzy główne osie: poziomą i dwie ukośne.
Zaznaczając je w siatce ASCII:
AVAVAVA
VAabcAV
fVAiAVl
mnVAVrs
Wyzwanie
Otrzymujesz prostokątny ciąg reprezentujący trójkątną siatkę (gdzie lewy górny róg jest trójkątem skierowanym do góry). Większość komórek z być .
, ale dokładnie dwie komórki będą #
, np .:
....#
.#...
.....
Ustal, czy oba #
są wyrównane wzdłuż którejkolwiek z trzech osi siatki (tj. Czy leżą w jednym rzędzie w dowolnym z trzech wyróżnionych powyżej kierunków). W tym przykładzie odpowiedź brzmi „nie”.
Możesz napisać program lub funkcję, pobierając dane wejściowe przez STDIN (lub najbliższą alternatywę), argument wiersza poleceń lub argument funkcji i wypisując wynik przez STDOUT (lub najbliższą alternatywę), wartość zwracaną funkcji lub parametr funkcji (wyjściowej).
Dane wejściowe mogą być pojedynczym ciągiem rozdzielanym znakami linii lub innym dogodnym znakiem lub listą ciągów. Możesz użyć dowolnych dwóch (spójnych) drukowalnych znaków ASCII zamiast .
i #
.
Dane wyjściowe powinny być zgodne z prawdą, jeśli podświetlone komórki są wyrównane, a w przeciwnym razie wartością fałsz .
Obowiązują standardowe zasady gry w golfa .
Przypadki testowe
Prawdziwe siatki:
.#..#.
#
#
...........
...#.......
...........
...........
...........
.......#...
...........
...........
.......#...
...........
...........
...........
...#.......
...........
.#.........
...........
...........
...........
...........
.......#...
...........
...........
...#.......
...........
...........
...........
...........
.......#...
.........#.
...........
...........
...........
...........
...#.......
...........
...........
.......#...
...........
...........
...........
...........
...#.......
...........
.#.....#...
...........
...........
...........
Kratki Falsy:
#.....
.....#
.....#
#.....
...#.......
...........
...........
...........
...........
.......#...
...........
...........
...#.......
...........
...........
...........
...........
.........#.
.......#...
...........
...........
...........
...........
...#.......
...........
...........
.......#...
...........
...........
...........
...........
.#.........