Récemment, les grilles hexagonales sont devenues une variante assez populaire des défis concernant les données bidimensionnelles. Cependant, il semble que les grilles triangulaires tout aussi intéressantes aient été largement négligées jusqu'à présent. Je voudrais rectifier cela avec un défi assez simple.
Tout d'abord, comment représenter une grille triangulaire? Prenons l'exemple suivant (ignorez le bon diagramme pour l'instant):
Les cellules tombent proprement sur une grille régulière (la différence avec une grille régulière étant uniquement les cellules considérées comme adjacentes):
1234567
89abcde
fghijkl
mnopqrs
Maintenant, comme le montre le diagramme de droite, une grille triangulaire a trois axes principaux: un horizontal et deux diagonaux.
Soulignant ces derniers dans la grille ASCII:
AVAVAVA
VAabcAV
fVAiAVl
mnVAVrs
Le défi
Vous obtenez une chaîne rectangulaire représentant une grille triangulaire (où le coin supérieur gauche est un triangle pointant vers le haut). La plupart des cellules avec be .
, mais exactement deux cellules seront #
, par exemple:
....#
.#...
.....
Déterminez si les deux #
sont alignés le long de l'un des trois axes de la grille (c'est-à-dire s'ils se trouvent sur une seule ligne dans l'une des trois directions mises en évidence ci-dessus). Pour cet exemple, la réponse est "non".
Vous pouvez écrire un programme ou une fonction, en prenant une entrée via STDIN (ou l'alternative la plus proche), un argument de ligne de commande ou un argument de fonction et en sortant le résultat via STDOUT (ou l'alternative la plus proche), la valeur de retour de la fonction ou le paramètre de la fonction (out).
L'entrée peut être une chaîne unique délimitée par des sauts de ligne ou un autre caractère pratique, ou une liste de chaînes. Vous pouvez utiliser deux caractères ASCII imprimables (cohérents) à la place de .
et #
.
La sortie doit être une valeur véridique si les cellules en surbrillance sont alignées et une valeur fausse dans le cas contraire.
Les règles de code-golf standard s'appliquent.
Cas de test
Véritables grilles:
.#..#.
#
#
...........
...#.......
...........
...........
...........
.......#...
...........
...........
.......#...
...........
...........
...........
...#.......
...........
.#.........
...........
...........
...........
...........
.......#...
...........
...........
...#.......
...........
...........
...........
...........
.......#...
.........#.
...........
...........
...........
...........
...#.......
...........
...........
.......#...
...........
...........
...........
...........
...#.......
...........
.#.....#...
...........
...........
...........
Grilles de falsification:
#.....
.....#
.....#
#.....
...#.......
...........
...........
...........
...........
.......#...
...........
...........
...#.......
...........
...........
...........
...........
.........#.
.......#...
...........
...........
...........
...........
...#.......
...........
...........
.......#...
...........
...........
...........
...........
.#.........