Napisz program, który określi, czy dana macierz reprezentuje quandle. Quandle to zespół wyposażony w pojedynczy (nie przemiennego, nie-asocjacyjnej) działania ◃ która spełnia następujące axioms:
- Operacja jest zamknięta, co oznacza, że
a◃b = c
zawsze jest elementem zestawu, jeślia
ib
są elementami zestawu. - Operacja jest tuż-self-rozdzielcze:
(a◃b)◃c = (a◃c)◃(b◃c)
. - Operacja jest podzielna na prawo: dla dowolnej wybranej pary
a
ib
istnieje jedna unikalnac
takac◃a = b
- Operacja jest idempotentna:
a◃a = a
Skończony quandle może być reprezentowany jako macierz kwadratowa. Poniżej znajduje się przykład quandle rzędu 5 ( źródło ).
0 0 1 1 1
1 1 0 0 0
3 4 2 4 3
4 2 4 3 2
2 3 3 2 4
Wartość znajdująca się w n-tym rzędzie i m-tej kolumnie (indeksowana 0) jest wartością n◃m. Na przykład w tym quandle 4◃1 = 3
. Niektóre właściwości quandle są łatwo widoczne z tej matrycy:
- Jest zamknięty, ponieważ w tej matrycy 5x5 pojawiają się tylko wartości 0-4.
- Jest idempotentny, ponieważ przekątna matrycy wynosi 0 1 2 3 4
- Jest podzielny na prawo, ponieważ żadna kolumna nie zawiera żadnych zduplikowanych wartości. (Wiersze mogą i zwykle będą.)
Trudniej jest przetestować właściwość samo-dystrybucji. Może istnieć skrót, ale najprostszą metodą jest iteracja każdej możliwej kombinacji trzech indeksów, aby to sprawdzić m[m[a][b]][c] = m[m[a][c]][m[b][c]]
.
Wejście
Dane wejściowe będą listą wierszy macierzy kwadratowej, przy użyciu indeksowania 0 lub indeksu 1 (do wyboru). Każdy wpis będzie jednocyfrową liczbą od 0
do 8
(lub 1
poprzez 9
). Będę elastyczny w zakresie formatu wejściowego. Niektóre dopuszczalne formaty obejmują:
- Najbardziej naturalne formatowanie języka dla macierzy lub list, takich jak
[[0 0 0][2 1 1][1 2 2]]
lub(0,0,0,2,1,1,1,2,2)
. - Lista wartości rozdzielonych spacjami, znakami nowej linii, przecinkami itp.
- Pojedynczy ciąg składający się ze wszystkich połączonych ze sobą wartości, takich jak
000211122
.
Możesz również przyjąć transpozycję macierzy jako dane wejściowe (zamieniając wiersze z kolumnami). Pamiętaj tylko, aby podać to w swojej odpowiedzi.
Wynik
Pojedyncza wartość true / falsey wskazująca status matrycy jako quandle.
Przykłady quandles
0
0 0
1 1
0 0 0
2 1 1
1 2 2
0 0 1 1
1 1 0 0
3 3 2 2
2 2 3 3
0 3 4 1 2
2 1 0 4 3
3 4 2 0 1
4 2 1 3 0
1 0 3 2 4
Przykłady non-quandles
nie zamknięte
1
0 0 0
2 1 1
1 9 2
nie jest samodystrybucyjny
0 0 1 0
1 1 0 1
2 3 2 2
3 2 3 3
(3◃1)◃2 = 2◃2 = 2
(3◃2)◃(1◃2) = 3◃0 = 3
nie podzielny na prawo
0 2 3 4 1
0 1 2 3 4
3 4 2 2 2
3 3 3 3 3
4 1 1 1 4
0 1 2 3
3 1 2 0
3 1 2 3
0 1 2 3
nie idempotentny
1 1 1 1
3 3 3 3
2 2 2 2
0 0 0 0
2 1 0 4 3
3 4 2 0 1
4 2 1 3 0
1 0 3 2 4
0 3 4 1 2