Escreva um programa ou função que utilize uma grade de texto 4 × 4 composta exatamente por 4 A
, 4 B
, 4 C
e 4 D
, como:
ACDC
BBCA
BADD
ABCD
Os ABCD
podem estar em qualquer arranjo, mas sempre haverá 4 de cada. Você pode assumir que a entrada é válida. Se desejado, você também pode assumir que ela possui uma nova linha à direita e / ou que vem como uma linha na ordem de leitura, por exemplo ACDCBBCABADDABCD
. Você também pode substituir os caracteres ABCD
com 0123
ou 1234
respectivamente, se desejar (mas isso é tudo).
Emita um valor verdadeiro se a grade de texto tiver qualquer forma de simetria refletiva ou rotacional. Especificamente:
Se houver uma linha horizontal central de simetria. por exemplo
BACD BACD BACD \___ bottom mirrors top BACD /
Se houver uma linha vertical central de simetria. por exemplo
BCCB DAAD CAAC BDDB \/___ right mirrors left
Se houver uma linha diagonal de simetria (em qualquer direção). por exemplo
___ diagonally mirrored / ABDC BACD DCAB CDBA \___ diagonally mirrored
Se houver simetria rotacional de 90 °. por exemplo
BDAB ACCD same if rotated 90 degrees (or 180 or 270) DCCA BADB
Se houver simetria rotacional de 180 °. por exemplo
DBCA BDCA same if rotated 180 degrees ACDB ACBD
(Observe que a simetria da tradução não entra em jogo aqui.)
Emita um valor falso se a grade não tiver uma das simetrias mencionadas acima. por exemplo, o primeiro exemplo de grade.
O código mais curto em bytes vence.