As grades hexagonais tornaram-se uma reviravolta bastante popular nos desafios sobre dados bidimensionais recentemente. No entanto, parece que as grades triangulares igualmente interessantes foram amplamente negligenciadas até agora. Eu gostaria de corrigir isso com um desafio bastante simples.
Primeiro, como representamos uma grade triangular? Considere o seguinte exemplo (ignore o diagrama correto por enquanto):
As células caem ordenadamente em uma grade regular (a diferença de uma grade regular é apenas quais células são consideradas adjacentes):
1234567
89abcde
fghijkl
mnopqrs
Agora, como o diagrama à direita mostra, uma grade triangular tem três eixos principais: um horizontal e dois diagonais.
Destacando-os na grade ASCII:
AVAVAVA
VAabcAV
fVAiAVl
mnVAVrs
O desafio
Você recebe uma string retangular representando uma grade triangular (onde o canto superior esquerdo é um triângulo apontando para cima). A maioria das células com be .
, mas exatamente duas células estarão #
, por exemplo:
....#
.#...
.....
Determine se os dois #
estão alinhados ao longo de qualquer um dos três eixos da grade (ou seja, se estão em uma única linha em qualquer uma das três direções destacadas acima). Neste exemplo, a resposta é "não".
Você pode escrever um programa ou função, recebendo entrada via STDIN (ou alternativa mais próxima), argumento da linha de comando ou argumento da função e emitindo o resultado via STDOUT (ou alternativa mais próxima), valor de retorno da função ou parâmetro da função (saída).
A entrada pode ser uma única sequência delimitada por linhas de alimentação ou algum outro caractere conveniente ou uma lista de sequências. Você pode usar dois caracteres ASCII imprimíveis (consistentes) no lugar de .
e #
.
A saída deve ser um valor verdadeiro se as células destacadas estiverem alinhadas e, caso contrário, um valor falso .
Aplicam-se as regras de código-golfe padrão .
Casos de teste
Grades de verdade:
.#..#.
#
#
...........
...#.......
...........
...........
...........
.......#...
...........
...........
.......#...
...........
...........
...........
...#.......
...........
.#.........
...........
...........
...........
...........
.......#...
...........
...........
...#.......
...........
...........
...........
...........
.......#...
.........#.
...........
...........
...........
...........
...#.......
...........
...........
.......#...
...........
...........
...........
...........
...#.......
...........
.#.....#...
...........
...........
...........
Grelhas de falsidade:
#.....
.....#
.....#
#.....
...#.......
...........
...........
...........
...........
.......#...
...........
...........
...#.......
...........
...........
...........
...........
.........#.
.......#...
...........
...........
...........
...........
...#.......
...........
...........
.......#...
...........
...........
...........
...........
.#.........