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 .
Réponses:
J,
665653 octetsRecherche par force brute.
Usage
Explication
la source
Gelée , 19 octets
Essayez-le en ligne!
Comment ça fonctionne
la source
Pyth -
242321 octetsJe veux chercher un meilleur moyen d'obtenir toutes les réflexions.Merci à @ Pietu1998 pour m'avoir joué au golf 2 octets!
Essayez-le en ligne ici .
Aller attendre le golf avant de faire une explication complète, mais cela fait essentiellement toutes les matrices binaires possibles, puis les
.g
regroupe par la liste triée de toutes les réflexions possibles, puis n'en prend qu'une dans chaque groupe.la source
3
la sortie commence à[['000', '000', '00'],
noter le zéro manquant à la fin.^2Q
place deQ^2
. correctif me fait gagner un octet aussi: D_MM
place demC_Cd
.Haskell, 100 octets
Exemple d'utilisation:
f 2
->[["00","00"],["00","01"],["00","11"],["01","01"],["01","10"],["01","11"],["11","11"]]
.Comment ça fonctionne:
la source
JavaScript (ES6), 195 octets
Renvoie des chaînes représentant toutes les entrées de matrice concaténées, par exemple,
111101111
représente une matrice 3 × 3 de1
s avec un0
au milieu. Explication:la source
.map(f=(x=p++)=>x>1?f(x>>1)+x%2:"")
Mathematica, 94 octets
la source
JavaScript (ES6), 184
Cela s'est avéré être assez similaire à celui de Neil, mais dans l'ensemble, le sac d'astuces en javascript n'est pas si diversifié.
Moins golfé
Test Attention, même pour l' entrée 4 le temps d' exécution est trop long
la source