Сбалансированная троичная логика
Троичный обычно другое название для основания 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в своем ответе, и есть некоторая путаница по этому поводу.