Ось всі двійкові матриці 2x2
#0 #1 #2 #3 #4 #5 #6 #7 #8 #9 #10 #11 #12 #13 #14 #15
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
00 00 00 00 01 01 01 01 10 10 10 10 11 11 11 11
00 01 10 11 00 01 10 11 00 01 10 11 00 01 10 11
Дві двійкові квадратні матриці еквівалентні за відношенням, ~
якщо одну можна відобразити на іншій за будь-якою кількістю відбитків у горизонтальній чи вертикальній осях .
#1 ~ #2
під відображенням у вертикальній осі, тому нам потрібно зберегти лише одне з них (не важливо, яке). Точно так же #3 ~ #12
, #6 ~ #9
і так далі.
МЕТА полягає в тому, щоб створити програму, яка займає один вхід N
і друкує стільки N x N
бінарних матриць, скільки існує, щоб усі матриці у виводі були чіткими у вказаному вище співвідношенні.
У псевдокоді, що розмахує рукою, прийнятне рішення було б
define M[i] = N by N matrix with bit pattern equal to i
for i = 0 to (2^(N^2)) - 1
valid = true
for j = i+1 to (2^(N^2)) - 1
if (equivalent(M[i], M[j]))
valid = false
break
if (valid)
print (M[i])
Для введення був би N=2
один дійсний вихід
00 00 00 01 10 01 11
00 01 11 01 01 11 11
Але вибравши різні матриці з одного класу еквівалентності, був би другий дійсний вихід
00 10 11 11 11 10 01
00 00 00 10 11 10 10
Порядок матриць не має значення, конкретний вибір з еквівалентних матриць не має значення, а пробіл не має значення, виведіть матриці, як вам подобається, поки вони читаються людиною.
Вихід повинен бути вичерпним.
Найкоротший код виграє.
EDIT: це мій перший пост у гольфі, і я передумав щодо критеріїв виграшу.
Найкоротший код мовою, спеціально не розробленою для лаконічності / перемоги в гольфі .
Я сподіваюся, що непогано змінити цей критерій після критеріїв, але я вважаю, що це зробити "нормальною" мовою - набагато цікавіше пропозиція.