Logique ternaire équilibrée
Ternaires est normalement un autre nom pour la base 3, c'est - à - dire, chaque chiffre est 0
, 1
ou 2
, et chaque endroit vaut 3 fois plus que l'endroit suivant.
Ternaire équilibrée est une modification de ternaire qui utilise les chiffres de -1
, 0
et 1
. Cela a l'avantage de ne pas avoir besoin d'un signe. Chaque place vaut encore 3 fois plus que la place suivante. Les premiers entiers positifs sont donc [1]
, [1, -1]
, [1, 0]
, [1, 1]
, [1, -1, -1]
alors que les premiers entiers négatifs sont [-1]
, [-1, 1]
, [-1, 0]
, [-1, -1]
, [-1, 1, 1]
.
Vous avez trois entrées x, y, z
. z
est soit -1
, 0
ou 1
, tout x
et y
peut être de -3812798742493
la 3812798742493
inclus.
La première étape consiste à convertir x
et y
de décimal en ternaire équilibré. Cela devrait vous donner 27 trits (chiffres TeRnary). Vous devez ensuite combiner les trits de x
et y
par paires à l'aide d'une opération ternaire, puis reconvertir le résultat en décimal.
Vous pouvez choisir les valeurs de z
mappage pour chacune de ces trois opérations ternaires:
A
: Étant donné deux trits, si l'un est nul, le résultat est nul, sinon le résultat est -1 s'ils sont différents ou 1 s'ils sont identiques.B
: Étant donné deux trits, si l'un est zéro, alors le résultat est l'autre trit, sinon le résultat est zéro s'ils sont différents ou la négation s'ils sont les mêmes.C
: Étant donné deux trits, le résultat est nul s'ils sont différents ou leur valeur s'ils sont identiques.
Exemple. Supposons x
est 29
et y
est 15
. En ternaire équilibré, ceux-ci deviennent [1, 0, 1, -1]
et [1, -1, -1, 0]
. (Les 23 zéros restants ont été omis par souci de concision.) Après chacune des opérations respectives, ils deviennent A
: [1, 0, -1, 0]
, B
: [-1, -1, 0, -1]
, C
: [1, 0, 0, 0]
. Convertis en décimal, les résultats sont 24
, -37
et 27
respectivement. Essayez l'implémentation de référence suivante pour plus d'exemples:
L'implémentation de référence suit les étapes ci-dessus, mais vous êtes bien sûr libre d'utiliser n'importe quel algorithme qui produit les mêmes résultats.
C'est le golf de code , donc le programme ou la fonction la plus courte qui ne viole aucune échappatoire standard gagne!
z
que ce soit une -1,0,1
ou pouvons-nous choisir trois valeurs cohérentes et distinctes? J'ai sélectionné 1,2,3
dans ma réponse, et il y a une certaine confusion à ce sujet.