Écrivez un programme ou une fonction qui prend dans une grille de texte 4 × 4 composée exactement de 4 A
, 4 B
, 4 C
et 4 D
, tels que:
ACDC
BBCA
BADD
ABCD
Les ABCD
peuvent être dans n'importe quel arrangement mais il y en aura toujours 4 de chaque. Vous pouvez supposer que l'entrée est valide. Si vous le souhaitez , vous pouvez également supposer qu'il a un saut de ligne et / ou qu'il se présente comme une ligne dans l' ordre de lecture, par exemple ACDCBBCABADDABCD
. Vous pouvez également remplacer les caractères ABCD
par 0123
ou 1234
respectivement, si vous le souhaitez (mais c'est tout).
Générez une valeur véridique si la grille de texte présente une forme de symétrie réfléchissante ou rotationnelle. Plus précisément:
S'il y a une ligne de symétrie horizontale centrale. par exemple
BACD BACD BACD \___ bottom mirrors top BACD /
S'il y a une ligne de symétrie verticale centrale. par exemple
BCCB DAAD CAAC BDDB \/___ right mirrors left
S'il y a une diagonale de symétrie (dans les deux sens). par exemple
___ diagonally mirrored / ABDC BACD DCAB CDBA \___ diagonally mirrored
S'il y a une symétrie de rotation de 90 °. par exemple
BDAB ACCD same if rotated 90 degrees (or 180 or 270) DCCA BADB
S'il y a une symétrie de rotation de 180 °. par exemple
DBCA BDCA same if rotated 180 degrees ACDB ACBD
(Notez que la symétrie translationnelle n'entre pas en jeu ici.)
Générez une valeur fausse si la grille n'a pas l'une des symétries mentionnées ci-dessus. par exemple le tout premier exemple de grille.
Le code le plus court en octets gagne.