Lógica ternaria equilibrada
Ternario es normalmente otro nombre para la base 3, es decir, cada dígito es 0
, 1
o 2
, y cada lugar vale 3 veces más que el siguiente lugar.
El ternario equilibrado es una modificación del ternario que utiliza dígitos de -1
, 0
y 1
. Esto tiene la ventaja de no necesitar una señal. Cada lugar todavía vale 3 veces más que el siguiente. Los primeros números enteros positivos son, por lo tanto [1]
, [1, -1]
, [1, 0]
, [1, 1]
, [1, -1, -1]
mientras que los primeros son números enteros negativos [-1]
, [-1, 1]
, [-1, 0]
, [-1, -1]
, [-1, 1, 1]
.
Tienes tres entradas x, y, z
. z
es o bien -1
, 0
, o 1
, mientras que x
y y
puede ser desde -3812798742493
a 3812798742493
inclusive.
El primer paso es convertir x
y y
de decimal a ternario equilibrado. Esto debería darte 27 trits (dígitos digitales). Luego tiene que combinar los trits desde x
y y
en pares usando una operación ternaria y luego convertir el resultado a decimal.
Puede elegir qué valores de z
mapear a una de estas tres operaciones ternarias cada uno:
A
: Dado dos trits, si cualquiera es cero, entonces el resultado es cero; de lo contrario, el resultado es -1 si son diferentes o 1 si son iguales.B
: Dados dos trits, si uno es cero, entonces el resultado es el otro trit, de lo contrario el resultado es cero si son diferentes o la negación si son iguales.C
: Dados dos trits, el resultado es cero si son diferentes o su valor si son iguales.
Ejemplo. Supongamos que x
es 29
y y
es 15
. En ternario equilibrado, estos se convierten en [1, 0, 1, -1]
y [1, -1, -1, 0]
. (Los 23 trits cero restantes se han omitido por brevedad). Después de cada una de las operaciones respectivas se convierten en A
: [1, 0, -1, 0]
, B
: [-1, -1, 0, -1]
, C
: [1, 0, 0, 0]
. Convertidos a decimales los resultados son 24
, -37
y 27
respectivamente. Pruebe la siguiente implementación de referencia para obtener más ejemplos:
La implementación de referencia sigue los pasos anteriores, pero, por supuesto, puede utilizar cualquier algoritmo que produzca los mismos resultados.
Este es el código de golf , por lo que gana el programa o la función más corta que no viole ninguna laguna estándar.
z
tiene que ser uno de -1,0,1
los tres valores consistentes o distintos? He seleccionado 1,2,3
en mi respuesta, y hay algo de confusión al respecto.