Oto wszystkie macierze binarne 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
Dwie binarne macierze kwadratowe są równoważne pod tą relacją, ~
jeśli jedną można odwzorować na drugiej za pomocą dowolnej liczby odbić w osiach poziomych lub pionowych .
#1 ~ #2
odbijane w osi pionowej, więc musimy zachować tylko jeden z nich (nie ma znaczenia, który). Podobnie #3 ~ #12
, #6 ~ #9
i tak dalej.
CELEM jest stworzenie programu, który pobiera jedno wejście N
i wypisuje tyle N x N
istniejących macierzy binarnych, że wszystkie macierze na wyjściu są różne w powyższej relacji.
W pseudokodzie pofalowanym ręką byłoby dopuszczalne rozwiązanie
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])
Dla danych wejściowych N=2
jednym prawidłowym wyjściem byłoby
00 00 00 01 10 01 11
00 01 11 01 01 11 11
Ale wybierając różne macierze z tej samej klasy równoważności, uzyskałoby inne prawidłowe dane wyjściowe
00 10 11 11 11 10 01
00 00 00 10 11 10 10
Kolejność macierzy nie ma znaczenia, szczególny wybór z ekwiwalentnych macierzy nie ma znaczenia, a białe znaki nie mają znaczenia, wysyłaj macierze tak, jak chcesz, o ile jest to czytelne dla człowieka.
Dane wyjściowe muszą być wyczerpujące.
Najkrótszy kod wygrywa.
EDYCJA: to jest mój pierwszy post golfowy i zmieniłem zdanie na temat kryteriów wygranej.
Najkrótszy kod w języku nieprzeznaczonym specjalnie dla zwięzłości / gry w golfa wygrywa.
Mam nadzieję, że zmiana tego kryterium post hoc nie jest złą etykietą, ale myślę, że zrobienie tego w „normalnym” języku jest znacznie ciekawszą propozycją.