Ecco tutte le matrici binarie 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
Due matrici quadrate binarie sono equivalenti sotto la relazione ~
se una può essere mappata sull'altra da un numero qualsiasi di riflessi negli assi orizzontale o verticale .
#1 ~ #2
riflesso nell'asse verticale, quindi dobbiamo solo mantenere uno di questi (non importa quale). Allo stesso modo #3 ~ #12
, #6 ~ #9
e così via.
L'obiettivo è produrre un programma che accetta un singolo input N
e stampa tutte N x N
le matrici binarie esistenti in modo tale che tutte le matrici nell'output siano distinte in base alla relazione precedente.
Nello pseudocodice ondulato a mano, sarebbe una soluzione ammissibile
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])
Per l'ingresso N=2
sarebbe valido un output
00 00 00 01 10 01 11
00 01 11 01 01 11 11
Ma selezionando matrici diverse dalla stessa classe di equivalenza sarebbe un altro output valido
00 10 11 11 11 10 01
00 00 00 10 11 10 10
L'ordine delle matrici non ha importanza, la scelta particolare tra matrici equivalenti non ha importanza e gli spazi bianchi non contano, producono le matrici come preferisci purché sia leggibile dall'uomo.
L'output deve essere esaustivo.
Il codice più corto vince.
EDIT: questo è il mio primo post di golf e ho cambiato idea sui criteri vincenti.
Codice più corto in una lingua non specificatamente progettata per le vittorie di conciseness / golf .
Spero che non sia una cattiva etichetta cambiare questo criterio post-hoc, ma penso che farlo in un linguaggio "normale" sia una proposta molto più interessante .