Aqui estão todas as matrizes binárias 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
Duas matrizes quadradas binárias são equivalentes sob a relação ~
se uma puder ser mapeada na outra por qualquer número de reflexões nos eixos horizontal ou vertical .
#1 ~ #2
sob reflexão no eixo vertical, portanto, precisamos manter apenas um deles (não importa qual). Da mesma forma #3 ~ #12
, #6 ~ #9
e assim por diante.
O objetivo é produzir um programa que use uma única entrada N
e imprima quantas N x N
matrizes binárias existirem, de modo que todas as matrizes na saída sejam distintas na relação acima.
No pseudocódigo de onda manual, uma solução admissível seria
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])
Para a entrada, N=2
uma saída válida seria
00 00 00 01 10 01 11
00 01 11 01 01 11 11
Mas, selecionando matrizes diferentes da mesma classe de equivalência, outra saída válida seria
00 10 11 11 11 10 01
00 00 00 10 11 10 10
A ordem das matrizes não importa, a escolha específica de matrizes equivalentes não importa e o espaço em branco não importa, produz as matrizes da maneira que você quiser, desde que seja legível por humanos.
A saída deve ser exaustiva.
O menor código vence.
EDIT: este é o meu primeiro post de golfe e mudei de idéia sobre os critérios de vitória.
Código mais curto em um idioma não projetado especificamente para ganhos de concisão / golfe .
Espero que não seja má etiqueta mudar esse critério post-hoc, mas acho que fazê-lo em uma linguagem "normal" é uma proposta muito mais interessante .