Las cuadrículas hexagonales se han convertido recientemente en un giro bastante popular para los desafíos sobre los datos bidimensionales. Sin embargo, parece que las redes triangulares igualmente interesantes se han descuidado en gran medida hasta ahora. Me gustaría rectificar eso con un desafío bastante simple.
Primero, ¿cómo representamos una cuadrícula triangular? Considere el siguiente ejemplo (ignore el diagrama correcto por ahora):
Las celdas caen perfectamente en una cuadrícula regular (la diferencia con una cuadrícula regular es solo qué celdas se consideran adyacentes):
1234567
89abcde
fghijkl
mnopqrs
Ahora, como muestra el diagrama de la derecha, una cuadrícula triangular tiene tres ejes principales: uno horizontal y dos diagonales.
Destacando estos en la cuadrícula ASCII:
AVAVAVA
VAabcAV
fVAiAVl
mnVAVrs
El reto
Se le da una cadena rectangular que representa una cuadrícula triangular (donde la esquina superior izquierda es un triángulo que apunta hacia arriba). La mayoría de las celdas con be .
, pero exactamente dos celdas serán #
, por ejemplo:
....#
.#...
.....
Determine si los dos #
están alineados a lo largo de cualquiera de los tres ejes de la cuadrícula (es decir, si se encuentran en una sola fila en cualquiera de las tres direcciones resaltadas anteriormente). Para este ejemplo, la respuesta es "no".
Puede escribir un programa o función, tomando la entrada a través de STDIN (o la alternativa más cercana), argumento de línea de comando o argumento de función y generando el resultado a través de STDOUT (o la alternativa más cercana), el valor de retorno de la función o el parámetro de función (out).
La entrada puede ser una sola cadena delimitada por saltos de línea o algún otro carácter conveniente, o una lista de cadenas. Puede usar dos caracteres ASCII imprimibles (consistentes) en lugar de .
y #
.
La salida debe ser un valor verdadero si las celdas resaltadas están alineadas y un valor falso de lo contrario.
Aplican reglas estándar de código de golf .
Casos de prueba
Rejillas de verdad:
.#..#.
#
#
...........
...#.......
...........
...........
...........
.......#...
...........
...........
.......#...
...........
...........
...........
...#.......
...........
.#.........
...........
...........
...........
...........
.......#...
...........
...........
...#.......
...........
...........
...........
...........
.......#...
.........#.
...........
...........
...........
...........
...#.......
...........
...........
.......#...
...........
...........
...........
...........
...#.......
...........
.#.....#...
...........
...........
...........
Rejillas de falsa:
#.....
.....#
.....#
#.....
...#.......
...........
...........
...........
...........
.......#...
...........
...........
...#.......
...........
...........
...........
...........
.........#.
.......#...
...........
...........
...........
...........
...#.......
...........
...........
.......#...
...........
...........
...........
...........
.#.........