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>)
?[i%i|i<-b]==b
.CJam, 95 bajtów
Wyświetla podsekwencję
*AC1I
.*
jest symbolem zamknięcia ,A
jest dla stowarzyszeniowej ,C
jest przemienne ,1
to dla tożsamości iI
jest dla idempotent .Tablica wejściowa jest odczytywana
q~
i zapisywana w A (:A
).Zamknięcie
Jeśli wszystkie
:*
elementy ( ) w macierzy (Ae_
) są mniejszef<
niż B = rozmiar (A) (A,:B
), wydrukuj a*
('**
).Stowarzyszenie
Wygeneruj wszystkie trzykrotnie w domenie (
B3m*
). Drukujemy,A
jeśli wszystkie spełniają warunek ({...}%:*'A*
).Warunkiem jest, że dla niektórych potrójnych
[i j k]
, składanie w lewo tej listy za pomocą A (_{A==}*
) i składanie w lewo jej odwrotnej[k j i]
(\W%
) za pomocą A op ({Az==}*
), odwróconej wersjiA
, są równe (=
).Przemienność
Musi być równa jej transpozycję:
A_z=
. Jeśli tak, drukujemyC
('C=
).Tożsamość
Tożsamość jest z konieczności unikalna, więc możemy wydrukować tylko jedną
1
.Idempotent
Sprawdź, czy przekątna jest równa
B,
. Jeśli tak, wydrukujI
.źródło
Matlab, 226
Ważną rzeczą, na którą należy zwrócić uwagę, jest to, że brak zamknięcia oznacza brak powiązania. Wiele z tych właściwości można łatwo sprawdzić za pomocą niektórych właściwości macierzy:
Wprowadzanie za pomocą standardowej notacji Matlab:
[a,b;c,d]
lub[[a,b];[c,d]]
lub[a b;c d]
itpDane wyjściowe to wektor zer zerowych, 1 = prawda, 0 = fałsz dla każdej właściwości w podanej kolejności.
Pełny kod:
źródło
JavaScript (ES6) 165
Anonimowa funkcja zwracająca tablicę z pięcioma wartościami 0/1, które są w kolejności Zamknięcie, Asocjatywność, Komutatywność, Tożsamość i Idempotencja.
Mniej golfa
Test
źródło