Багато важливих тем абстрактної алгебри включають бінарну функцію, що діє на множину. У дослідженні таких тем було визначено ряд властивостей таких функцій.
Вашим завданням буде визначити, чи володіє дана бінарна функція для даного домену п’ятьма з цих властивостей.
Властивості
Бінарна функція закрита, якщо кожен можливий вихід знаходиться в домені.
Бінарна функція є асоціативною, якщо порядок, в якому функція застосовується до серії входів, не впливає на результат. Тобто є $
асоціативним, якщо (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)
кодується в матриці як a
th- 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>)
?