Многие важные темы в абстрактной алгебре включают бинарную функцию, действующую на множестве. Ряд свойств таких функций был определен при исследовании таких тем.
Ваша задача будет состоять в том, чтобы определить, обладает ли данная двоичная функция в данном домене пятью из этих свойств.
свойства
Бинарная функция закрывается, если все возможные выходные данные находятся в домене.
Бинарная функция является ассоциативной, если порядок ее применения к серии входов не влияет на результат. То есть $
ассоциативен, если (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>)
?[i%i|i<-b]==b
.CJam, 95 байт
Печатает подпоследовательность
*AC1I
.*
является символом для замыкания ,A
для ассоциативного ,C
для коммутативного ,1
для тождественного иI
для идемпотентного .Входной массив читается
q~
и сохраняется в A (:A
).закрытие
Если все (
:*
) элементы в matrix (Ae_
) меньше,f<
чем B = size (A) (A,:B
), выведите a*
('**
).Ассоциативность
Создайте все тройки в домене (
B3m*
). Мы печатаем,A
если все они удовлетворяют условию ({...}%:*'A*
).Условие состоит в том, что для некоторой тройки
[i j k]
, сворачивание влево этого списка с помощью A (_{A==}*
) и сворачивание влево его reverse[k j i]
(\W%
) с помощью A op ({Az==}*
), перевернутая версияA
, равны (=
).Перестановочность
Должна быть равна его транспонирование:
A_z=
. Если это так, мы печатаемC
('C=
).тождественность
Идентификационные данные обязательно уникальны, поэтому мы можем напечатать только один
1
.идемпотент
Проверьте, равна ли диагональ
B,
. Если это так, распечатайтеI
.источник
Матлаб, 226
Важно отметить, что незакрытый подразумевает неассоциативность. Многие из этих свойств можно легко проверить с помощью некоторых свойств матрицы:
Ввод через стандартную запись Matlab:
[a,b;c,d]
или[[a,b];[c,d]]
или и[a b;c d]
т. Д.Выходными данными является вектор из нулей, 1 = истина, 0 = ложь, для каждого из свойств в данном порядке.
Полный код:
источник
JavaScript (ES6) 165
Анонимная функция, возвращающая массив с пятью значениями 0/1 в порядке закрытия, ассоциативности, коммутативности, идентичности и идемпотентности.
Меньше гольфа
Тестовое задание
источник