Voici toutes les matrices binaires 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
Deux matrices carrées binaires sont équivalentes sous la relation ~
si l'une peut être mappée sur l'autre par un nombre quelconque de réflexions dans les axes horizontal ou vertical .
#1 ~ #2
en réflexion dans l'axe vertical, il suffit donc d'en garder un (peu importe lequel). De même #3 ~ #12
, #6 ~ #9
et ainsi de suite.
L'OBJECTIF est de produire un programme qui prend une seule entrée N
et imprime autant de N x N
matrices binaires qu'il en existe de sorte que toutes les matrices en sortie soient distinctes sous la relation ci-dessus.
Dans un pseudocode ondulé à la main, une solution admissible serait
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])
Pour l'entrée, N=2
une sortie valide serait
00 00 00 01 10 01 11
00 01 11 01 01 11 11
Mais en sélectionnant différentes matrices de la même classe d'équivalence, une autre sortie valide serait
00 10 11 11 11 10 01
00 00 00 10 11 10 10
L'ordre des matrices n'a pas d'importance, le choix particulier parmi les matrices équivalentes n'a pas d'importance et les espaces n'ont pas d'importance, affichez les matrices comme vous le souhaitez tant qu'elles sont lisibles par l'homme.
La sortie doit être exhaustive.
Le code le plus court gagne.
EDIT: ceci est mon premier article de golf et j'ai changé d'avis sur les critères gagnants.
Code le plus court dans une langue non spécifiquement conçue pour la concision / le golf gains de .
J'espère que ce n'est pas une mauvaise étiquette de changer ce critère post-hoc, mais je pense que le faire dans un langage "normal" est une proposition beaucoup plus intéressante .