Sechseckige Gitter wurden in letzter Zeit zu einer ziemlich beliebten Variante für Herausforderungen im Zusammenhang mit zweidimensionalen Daten. Die ebenso interessanten Dreiecksgitter scheinen jedoch bisher weitgehend vernachlässigt worden zu sein. Ich würde das gerne mit einer ziemlich einfachen Herausforderung korrigieren.
Erstens, wie stellen wir ein Dreiecksgitter dar? Betrachten Sie das folgende Beispiel (ignorieren Sie vorerst das richtige Diagramm):
Die Zellen fallen ordentlich auf ein reguläres Gitter (der Unterschied zu einem regulären Gitter besteht nur darin, welche Zellen als benachbart betrachtet werden):
1234567
89abcde
fghijkl
mnopqrs
Wie das rechte Diagramm zeigt, hat ein Dreiecksgitter drei Hauptachsen: eine horizontale und zwei diagonale.
Markieren Sie diese im ASCII-Raster:
AVAVAVA
VAabcAV
fVAiAVl
mnVAVrs
Die Herausforderung
Sie erhalten eine rechteckige Zeichenfolge, die ein Dreiecksgitter darstellt (wobei die linke obere Ecke ein nach oben zeigendes Dreieck ist). Die meisten Zellen sind .
, aber genau zwei Zellen #
, zB:
....#
.#...
.....
Bestimmen Sie, ob die beiden #
entlang einer der drei Achsen des Rasters ausgerichtet sind (dh ob sie in einer der drei oben hervorgehobenen Richtungen in einer einzelnen Zeile liegen). In diesem Beispiel lautet die Antwort "nein".
Sie können ein Programm oder eine Funktion schreiben, indem Sie eine Eingabe über STDIN (oder die nächstgelegene Alternative), ein Befehlszeilenargument oder ein Funktionsargument vornehmen und das Ergebnis über STDOUT (oder die nächstgelegene Alternative), einen Funktionsrückgabewert oder einen Funktionsparameter (out) ausgeben.
Die Eingabe kann eine einzelne Zeichenfolge sein, die durch Zeilenvorschübe oder ein anderes geeignetes Zeichen begrenzt wird, oder eine Liste von Zeichenfolgen. Sie können anstelle von .
und zwei beliebige (konsistente) druckbare ASCII-Zeichen verwenden #
.
Die Ausgabe sollte ein wahrer Wert sein, wenn die markierten Zellen ausgerichtet sind, andernfalls ein falscher Wert.
Es gelten die Standardregeln für Code-Golf .
Testfälle
Wahrheitsgitter:
.#..#.
#
#
...........
...#.......
...........
...........
...........
.......#...
...........
...........
.......#...
...........
...........
...........
...#.......
...........
.#.........
...........
...........
...........
...........
.......#...
...........
...........
...#.......
...........
...........
...........
...........
.......#...
.........#.
...........
...........
...........
...........
...#.......
...........
...........
.......#...
...........
...........
...........
...........
...#.......
...........
.#.....#...
...........
...........
...........
Falsche Gitter:
#.....
.....#
.....#
#.....
...#.......
...........
...........
...........
...........
.......#...
...........
...........
...#.......
...........
...........
...........
...........
.........#.
.......#...
...........
...........
...........
...........
...#.......
...........
...........
.......#...
...........
...........
...........
...........
.#.........