Многие важные темы в абстрактной алгебре включают бинарную функцию, действующую на множестве. Ряд свойств таких функций был определен при исследовании таких тем.
Ваша задача будет состоять в том, чтобы определить, обладает ли данная двоичная функция в данном домене пятью из этих свойств.
свойства
Бинарная функция закрывается, если все возможные выходные данные находятся в домене.
Бинарная функция является ассоциативной, если порядок ее применения к серии входов не влияет на результат. То есть $
ассоциативен, если (a $ b) $ c
всегда равен a $ (b $ c)
. Обратите внимание, что поскольку значение (a $ b)
используется в качестве входных данных, ассоциативные функции должны быть закрыты.
Бинарная функция является коммутативной, если изменение порядка входов не меняет результат. Другими словами, если a $ b
всегда равны b $ a
.
Бинарная функция имеет элемент тождественности, если e
в домене существует какой-либо элемент, такой что a $ e = a = e $ a
для всех a
в домене.
Бинарная функция является идемпотентной, если ее применение к двум одинаковым входам дает это число в качестве выхода. Другими словами, если a $ a = a
для всех a
в домене.
вход
Вам будет дана функция в виде матрицы, а доменом функции будут числа 0 ... n-1
, где n
- длина стороны матрицы.
Значение (a $ b)
кодируется в матрице как элемент th- a
й строки b
. Если входная матрица есть Q
, то a $ b
=Q[a][b]
Например, функция возведения в степень ( **
в Python) в домене [0, 1, 2]
кодируется как:
[[1, 0, 0]
[1, 1, 1]
[1, 2, 4]]
Левый и правый домены одинаковы, поэтому матрица всегда будет квадратной.
Вы можете использовать любой удобный матричный формат в качестве входных данных, например, список списков, один список в основном порядке строк или столбцов, объект родной матрицы вашего языка и т. Д. Однако вы не можете принимать функцию непосредственно в качестве ввода.
Для простоты все элементы матрицы будут целыми числами. Вы можете предположить, что они соответствуют целочисленному типу вашего языка.
Выход
Вы можете указать, какие из перечисленных выше свойств хранятся в любом выбранном вами формате, включая список логических значений, строку с различным символом для каждого свойства и т. Д. Однако для каждого из 24 возможных подмножеств должен быть отдельный уникальный вывод. свойств. Этот вывод должен быть легко читаемым человеком.
Примеры
Максимальная функция на домене n = 4:
[[0, 1, 2, 3]
[1, 1, 2, 3]
[2, 2, 2, 3]
[3, 3, 3, 3]]
Эта функция обладает свойствами замыкания, ассоциативности, коммутативности, тождественности и идемпотентности.
Функция возведения в степень в области n = 3:
[[1, 0, 0]
[1, 1, 1]
[1, 2, 4]]
Эта функция не имеет ни одного из перечисленных выше свойств.
Функция сложения на домене n = 3:
[[0, 1, 2]
[1, 2, 3]
[2, 3, 4]]
Эта функция обладает свойствами коммутативности и тождественности.
K комбинатор в области n = 3:
[[0, 0, 0]
[1, 1, 1]
[2, 2, 2]]
Эта функция обладает свойствами замыкания, ассоциативности и идемпотентности.
Функция абсолютной разности в области n = 3:
[[0, 1, 2]
[1, 0, 1]
[2, 1, 0]]
Эта функция обладает свойствами замыкания, коммутативности и идентичности.
Функция среднего, округленная до четного, в области n = 3:
[[0, 0, 1]
[0, 1, 2]
[1, 2, 2]]
Эта функция обладает свойствами замыкания, коммутативности, тождественности и идемпотентности.
Функция равенства в области n = 3:
[[1, 0, 0]
[0, 1, 0]
[0, 0, 1]]
Эта функция обладает свойствами замыкания и коммутативности.
Вызов
Это код гольф. Применяются стандартные лазейки . Меньше байтов побеждает.
c=all(l>)
?