Wiele ważnych tematów w algebrze abstrakcyjnej obejmuje funkcję binarną działającą na zbiorze. W badaniu takich tematów określono szereg właściwości takich funkcji.
Twoim wyzwaniem będzie ustalenie, czy dana funkcja binarna w danej domenie ma pięć z tych właściwości.
Nieruchomości
Funkcja binarna jest zamykana, jeśli każde możliwe wyjście znajduje się w domenie.
Funkcja binarna jest asocjacyjna, jeśli kolejność, w jakiej funkcja jest zastosowana do szeregu danych wejściowych, nie wpływa na wynik. Oznacza to, że $
jest asocjacyjny, jeśli (a $ b) $ c
zawsze jest równy a $ (b $ c)
. Zauważ, że ponieważ wartość (a $ b)
jest używana jako dane wejściowe, funkcje asocjacyjne muszą być zamknięte.
Funkcja binarna jest przemienna, jeśli zamiana kolejności danych wejściowych nie zmienia wyniku. Innymi słowy, jeśli a $ b
zawsze jest równy b $ a
.
Funkcja binarna ma element tożsamości, jeśli istnieje jakiś element e
w domenie, taki jak a $ e = a = e $ a
dla wszystkich a
w domenie.
Funkcja binarna jest idempotentna, jeśli zastosowanie jej do dwóch identycznych danych wejściowych daje tę liczbę jako wynik. Innymi słowy, jeśli a $ a = a
dla wszystkich a
w domenie.
Wejście
Otrzymasz funkcję w postaci macierzy, a domeną funkcji będą liczby 0 ... n-1
, gdzie n
jest długość boku matrycy.
Wartość (a $ b)
jest zakodowana w macierzy jako a
th- b
ty element wiersza . Jeśli macierzą wejściową jest Q
, to a $ b
=Q[a][b]
Na przykład funkcja wykładnicza ( **
w języku Python) w domenie [0, 1, 2]
jest kodowana jako:
[[1, 0, 0]
[1, 1, 1]
[1, 2, 4]]
Domeny lewa i prawa są takie same, więc macierz zawsze będzie kwadratowa.
Możesz użyć dowolnego wygodnego formatu macierzy jako danych wejściowych, takiego jak lista list, pojedyncza lista w kolejności rzędów lub kolumn, rodzimy obiekt macierzy języka itp. Jednak nie możesz przyjąć funkcji bezpośrednio jako danych wejściowych.
Dla uproszczenia wszystkie wpisy w macierzy będą liczbami całkowitymi. Możesz założyć, że pasują one do rodzimej liczby całkowitej twojego języka.
Wynik
Możesz wskazać, które z powyższych właściwości przechowują w dowolnym wybranym formacie, w tym listę wartości logicznych, ciąg znaków z innym znakiem dla każdej właściwości itp. Jednak musi istnieć odrębny, unikalny wynik dla każdego z 24 możliwych podzbiorów właściwości. To wyjście musi być łatwe do odczytania przez człowieka.
Przykłady
Maksymalna funkcja w domenie n = 4:
[[0, 1, 2, 3]
[1, 1, 2, 3]
[2, 2, 2, 3]
[3, 3, 3, 3]]
Ta funkcja ma właściwości zamknięcia, asocjatywności, przemienności, tożsamości i idempotencji.
Funkcja potęgowania w domenie n = 3:
[[1, 0, 0]
[1, 1, 1]
[1, 2, 4]]
Ta funkcja nie ma żadnej z powyższych właściwości.
Funkcja dodawania w domenie n = 3:
[[0, 1, 2]
[1, 2, 3]
[2, 3, 4]]
Ta funkcja ma właściwości przemienności i tożsamości.
Kombinator K w domenie n = 3:
[[0, 0, 0]
[1, 1, 1]
[2, 2, 2]]
Ta funkcja ma właściwości zamknięcia, asocjatywności i idempotencji.
Funkcja różnicy absolutnej w domenie n = 3:
[[0, 1, 2]
[1, 0, 1]
[2, 1, 0]]
Ta funkcja ma właściwości zamknięcia, przemienności i tożsamości.
Średnia funkcja, w zaokrągleniu do parzystej, w dziedzinie n = 3:
[[0, 0, 1]
[0, 1, 2]
[1, 2, 2]]
Ta funkcja ma właściwości zamknięcia, komutatywności, tożsamości i idempotencji.
Funkcja równości w domenie n = 3:
[[1, 0, 0]
[0, 1, 0]
[0, 0, 1]]
Ta funkcja ma właściwości zamknięcia i przemienności.
Wyzwanie
To jest kod golfowy. Obowiązują standardowe luki . Najmniej bajtów wygrywa.
c=all(l>)
?