Сбалансированная троичная логика
Троичный обычно другое название для основания 3, то есть сказать, каждая цифра 0
, 1
или 2
, и каждое место стоит в 3 раза больше, чем на следующем месте.
Сбалансированный троичный является модификацией троичного, который использует цифры -1
, 0
и 1
. Это имеет то преимущество, что не нуждается в знаке. Каждое место по-прежнему стоит в 3 раза больше, чем следующее место. Первые несколько положительных целых чисел, следовательно [1]
, [1, -1]
, [1, 0]
, [1, 1]
, в [1, -1, -1]
то время как первые отрицательные целые числа [-1]
, [-1, 1]
, [-1, 0]
, [-1, -1]
, [-1, 1, 1]
.
У вас есть три входа x, y, z
. z
или -1
, 0
или 1
, в то время как x
и y
может быть от -3812798742493
до 3812798742493
включительно.
Первым делом нужно перевести x
и y
из десятичной в сбалансированную троичную форму. Это должно дать вам 27 тритов (терарных цифр). Затем вам нужно объединить триты из x
и y
в парах, используя троичную операцию, а затем преобразовать результат обратно в десятичную.
Вы можете выбрать, какие значения z
отображаются на одну из этих трех троичных операций каждая:
A
: Если дано два трита, если любой равен нулю, то результат равен нулю, в противном случае результат равен -1, если они разные, или 1, если они одинаковы.B
: Если дано два трита, если один из них равен нулю, то результатом является другой трит, в противном случае результат равен нулю, если они разные, или отрицание, если они одинаковы.C
: С учетом двух значений trit результат равен нулю, если они различны, или их значение, если они одинаковы.
Пример. Предположим, x
есть 29
и y
есть 15
. В сбалансированном троичном, они становятся [1, 0, 1, -1]
и [1, -1, -1, 0]
. (Остальные 23 нулевых тритов были опущены для краткости.) После каждой из соответствующих операций они становятся A
: [1, 0, -1, 0]
, B
: [-1, -1, 0, -1]
, C
: [1, 0, 0, 0]
. Преобразованы обратно в десятичные результаты 24
, -37
и, 27
соответственно. Попробуйте следующую справочную реализацию для большего количества примеров:
Эталонная реализация следует приведенным выше шагам, но вы, конечно, можете использовать любой алгоритм, который дает те же результаты.
Это код-гольф , поэтому выигрывает самая короткая программа или функция, которая не нарушает стандартные лазейки!
z
должен быть один из , -1,0,1
или мы можем выбрать любые три последовательных и различных значений? Я выбрал 1,2,3
в своем ответе, и есть некоторая путаница по этому поводу.