Напишите программу или функцию, которая принимает текстовую сетку 4 × 4, состоящую из ровно 4 A
, 4 B
, 4 C
и 4 D
, например:
ACDC
BBCA
BADD
ABCD
Они ABCD
могут быть в любом порядке, но всегда будет 4 каждого. Вы можете предположить, что ввод действителен. При желании вы также можете предположить, что у него есть завершающий символ новой строки и / или что он идет одной строкой в порядке чтения, например ACDCBBCABADDABCD
. Вы также можете заменить символы ABCD
на 0123
или 1234
соответственно, если хотите (но это все).
Выведите истинное значение, если текстовая сетка имеет отражательную или вращательную симметрию. В частности:
Если есть центральная горизонтальная линия симметрии. например
BACD BACD BACD \___ bottom mirrors top BACD /
Если есть центральная вертикальная линия симметрии. например
BCCB DAAD CAAC BDDB \/___ right mirrors left
Если есть диагональная линия симметрии (в любом направлении). например
___ diagonally mirrored / ABDC BACD DCAB CDBA \___ diagonally mirrored
Если есть вращательная симметрия 90 °. например
BDAB ACCD same if rotated 90 degrees (or 180 or 270) DCCA BADB
Если есть вращательная симметрия 180 °. например
DBCA BDCA same if rotated 180 degrees ACDB ACBD
(Обратите внимание, что трансляционная симметрия здесь не играет роли.)
Выведите ложное значение, если сетка не имеет одну из симметрий, упомянутых выше. например, самый первый пример сетки.
Самый короткий код в байтах побеждает.