Aquí están todas las matrices binarias 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
Dos matrices cuadradas binarias son equivalentes bajo la relación ~
si una puede mapearse sobre la otra por cualquier número de reflexiones en los ejes horizontal o vertical .
#1 ~ #2
bajo reflexión en el eje vertical, por lo que solo necesitamos mantener uno de estos (no importa cuál). Del mismo modo #3 ~ #12
, #6 ~ #9
y así sucesivamente.
EL OBJETIVO es producir un programa que tome una sola entrada N
e imprima tantas N x N
matrices binarias como existan, de modo que todas las matrices en la salida sean distintas bajo la relación anterior.
En el pseudocódigo wavey manual, una solución admisible sería
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 la entrada, N=2
una salida válida sería
00 00 00 01 10 01 11
00 01 11 01 01 11 11
Pero al seleccionar diferentes matrices de la misma clase de equivalencia, otra salida válida sería
00 10 11 11 11 10 01
00 00 00 10 11 10 10
El orden de las matrices no importa, la elección particular de las matrices equivalentes no importa, y el espacio en blanco no importa, genera las matrices como quieras, siempre y cuando sea legible para los humanos.
La salida debe ser exhaustiva.
El código más corto gana.
EDITAR: esta es mi primera publicación de golf y he cambiado de opinión sobre los criterios ganadores.
El código más corto en un idioma no diseñado específicamente para la concisión / el golf gana.
Espero que no sea una mala etiqueta cambiar este criterio post-hoc, pero creo que hacerlo en un lenguaje "normal" es una propuesta mucho más interesante .