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ą.
Odpowiedzi:
J,
665653 bajtówPoszukiwanie siły brutalnej.
Stosowanie
Wyjaśnienie
źródło
Galaretka , 19 bajtów
Wypróbuj online!
Jak to działa
źródło
Pyth -
242321 bajtówChcę poszukać lepszego sposobu na uzyskanie wszystkich odbić.Dzięki @ Pietu1998 za grę w golfa 2 bajty!
Wypróbuj online tutaj .
.g
Czekasz na grę w golfa, zanim zrobisz pełne wyjaśnienie, ale zasadniczo tworzy wszystkie możliwe macierze binarne, a następnie routuje je według posortowanej listy wszystkich możliwych odbić, a następnie bierze tylko jedną z każdej grupy.źródło
3
wyjście zaczyna[['000', '000', '00'],
zanotować brakujące zero na końcu.^2Q
zamiastQ^2
. fix oszczędza mi też bajt: D_MM
zamiastmC_Cd
.Haskell, 100 bajtów
Przykład użycia:
f 2
->[["00","00"],["00","01"],["00","11"],["01","01"],["01","10"],["01","11"],["11","11"]]
.Jak to działa:
źródło
JavaScript (ES6), 195 bajtów
Zwraca łańcuchy reprezentujące wszystkie pozycje macierzy skonkatenowane, np.
111101111
Reprezentuje macierz 3 × 31
s0
zw środku. Wyjaśnienie:źródło
.map(f=(x=p++)=>x>1?f(x>>1)+x%2:"")
Mathematica, 94 bajty
źródło
JavaScript (ES6), 184
Okazało się, że jest dość podobny do Neila, ale cała masa sztuczek w javascript nie jest tak różnorodna.
Mniej golfa
Test Uwaga, nawet dla wejścia 4 czas działania jest zbyt długi
źródło