Введение
Давайте определим троичную функцию как функцию из трехэлементного набора, S = {0,1,2}
который она себе представляет: она ассоциируется с каждым элементом S
другого элемента S
. Одним из примеров троичной функции f
является
f(0) = 0; f(1) = 2; f(2) = 0
Существует ровно 27 различных троичных функций, и мы представляем их целыми числами от 0 до 26: функция f
кодируется как f(0) + 3*f(1) + 9*f(2)
. Пример функции выше закодирован как номер 6.
Мы можем применять две троичные функции f
и g
последовательно, и если f(g(k)) == g(f(k))
выполняется для всех k
в S
, то функции коммутируют . Ваша задача - проверить, так ли это.
вход
Ваши входные данные - это два целых числа в диапазоне от 0 до 26. Они представляют две троичные функции f
и g
. Входные данные должны быть приняты в десятичном, двоичном или унарном (строка 1
с) формате.
Выход
Ваш вывод является истинным значением, если f
и g
коммутируют, и ошибочным значением, если они этого не делают. Вы не можете предполагать, что входы упорядочены.
Примеры
Рассмотрим входы 5 и 16. Они кодируют троичные функции
f(0) = 2; f(1) = 1; f(2) = 0
g(0) = 1; g(1) = 2; g(2) = 1
У нас есть f(g(1)) == f(2) == 0
и g(f(1)) == g(1) == 2
, поэтому, f
и g
не коммутируют, и правильный вывод ложный.
С другой стороны, входы 3 и 10 кодируют троичные функции
f(0) = 0; f(1) = 1; f(2) = 0
g(0) = 1; g(1) = 0; g(2) = 1
и это может быть проверено, что f(g(k)) == g(f(k))
верно для всех k
в S
. Тогда правильный вывод правдив.
Вот таблица всех возможных входных данных 27 × 27 с +
пометкой истинного и -
ложного вывода:
+ - - + - - + - - + - - + - - + - - + - - + - - + - -
- + - - - - - - - - - - + - - - - - - - - + - - - - -
- - + - - - - - - - - - - - - - - - - - - + - - + - -
+ - - + - - - - - - + - - + - - - - + - - + - - - - -
- - - - + - - - - - - - - + - - - - - - - + - - - - -
- - - - - + - - - - - - - + - - - - - - - + - - - - -
+ - - - - - + - - - - - - - - - - - - - - + - - - - -
- - - - - - - + - - - + - - - - - - - - - + - - - - -
- - - - - - - - + - - - - - - - - - + - - + - - - - -
+ - - - - - - - - + - - - - - - - - - - - + - - - - -
- - - + - - - - - - + - - - - - - - - - - + - - - - -
- - - - - - - + - - - + - - - - - - - - - + - - - - -
+ + - - - - - - - - - - + + - - - - - - - + + - - - -
- - - + + + - - - - - - + + + - - - - - - + + + - - -
- - - - - - - - - - - - - + + - - - - - - + - - - - -
+ - - - - - - - - - - - - - - + - - - - - + - - - - -
- - - - - - - - - - - - - - - - + - - - - + - + - - -
- - - - - - - - - - - - - - - - - + - - - + + - - - -
+ - - + - - - - + - - - - - - - - - + - - + - - - - +
- - - - - - - - - - - - - - - - - - - + - + - - - - +
- - - - - - - - - - - - - - - - - - - - + + - - - - +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
- - - - - - - - - - - - + + - - - + - - - + + - - - +
- - - - - - - - - - - - - + - - + - - - - + - + + - +
+ - + - - - - - - - - - - - - - - - - - - + - + + - +
- - - - - - - - - - - - - - - - - - - - - + - - - + +
- - - - - - - - - - - - - - - - - - + + + + + + + + +
Правила и оценки
Вы можете написать полную программу или функцию. Побеждает меньшее количество байтов, и стандартные лазейки запрещены.
Ответы:
Желе,
171413 байтПопробуйте онлайн! или проверьте все 27 × 27 случаев .
Как это работает
источник
MATL ,
1918 байтПравда это массив со всеми. Ложь - это массив, содержащий хотя бы один ноль.
Попробуйте онлайн! или проверить все случаи (занимает несколько секунд).
источник
Python 2, 61 байт
Имея входные данные
i
, мы можем реализовать функцию, представленнуюn
, выполнивn/3**i%3
извлечениеi
троичной цифрыn
. Функция проверяет, что один и тот же результат получен для каждого из них0,1,2
при применении функций в любом порядке. На самом деле, поскольку выполняется первый шаг3**
,[1,3,9]
вместо этого выполняется тестирование .Повторное использование кода выглядит расточительно, но лучшего способа я не нашел. Для сравнения:
источник
JavaScript (ES7), 68 байт
К сожалению, конверсия базы 3 была слишком дорогой:
источник
Mathematica, 77 байт
Одноразовая индексация Mathematica снова наносит удар!
источник
{1,1,1}
переменной и использовать это.