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 .
Respostas:
J,
665653 bytesPesquisa por força bruta.
Uso
Explicação
fonte
Geléia , 19 bytes
Experimente online!
Como funciona
fonte
Pyth -
242321 bytesQuero procurar uma maneira melhor de obter todas as reflexões.Graças a @ Pietu1998 por me jogar 2 bytes!
Experimente online aqui .
Esperar pelo golfe antes de fazer uma explicação completa, mas essencialmente cria todas as matrizes binárias possíveis, depois as
.g
rouba pela lista ordenada de todas as reflexões possíveis e, em seguida, leva apenas uma de cada grupo.fonte
3
a saída começará,[['000', '000', '00'],
observe o zero ausente no final.^2Q
vez deQ^2
. A correção também me salva um byte: D_MM
vez demC_Cd
.Haskell, 100 bytes
Exemplo de uso:
f 2
->[["00","00"],["00","01"],["00","11"],["01","01"],["01","10"],["01","11"],["11","11"]]
.Como funciona:
fonte
JavaScript (ES6), 195 bytes
Retorna strings representando todas as entradas da matriz concatenadas, por exemplo,
111101111
representa uma matriz 3 × 3 de1
s com a0
no meio. Explicação:fonte
.map(f=(x=p++)=>x>1?f(x>>1)+x%2:"")
Mathematica, 94 bytes
fonte
JavaScript (ES6), 184
Isso acabou sendo bem parecido com o de Neil, mas no conjunto de truques em javascript não é tão diverso.
Menos golfe
Teste Cuidado, mesmo para a entrada 4, o tempo de execução é excessivamente longo
fonte