Les crédits pour l'idée de défi vont à @AndrewPiliser. Sa proposition originale dans le bac à sable a été abandonnée et comme il n'a pas été actif ici depuis plusieurs mois, j'ai relevé le défi.
Le ternaire équilibré est un système numérique non standard. C'est comme le ternaire dans la mesure où les chiffres augmentent en valeur d'un facteur 3 lorsque vous allez plus loin vers la gauche - il en100
est de même9
pour1001
28.
Cependant, au lieu d'avoir des valeurs de 0, 1 et 2, les chiffres ont des valeurs de -1, 0 et 1 . (Vous pouvez toujours l'utiliser pour exprimer n'importe quel entier.)
Pour ce défi, la signification des chiffres +1
sera écrite comme +
, -1
sera écrite comme -
, et 0
est juste 0
. Le ternaire équilibré n'utilise pas le -
symbole devant les nombres pour les nier comme le font d'autres systèmes numériques - voir les exemples.
Votre tâche consiste à écrire un programme complet qui prend en entrée un entier signé décimal 32 bits et le convertit en ternaire équilibré. Aucune fonction de conversion de base intégrée d'aucune sorte n'est autorisée (Mathematica en a probablement une ...). L'entrée peut être sur une entrée standard, des arguments de ligne de commande, etc.
Des zéros non significatifs peuvent être présents en entrée mais pas en sortie, sauf si l'entrée l'est 0
, auquel cas la sortie doit également l'être 0
.
Exemples
Ce sont des conversions du ternaire équilibré en décimal; vous devrez convertir dans l'autre sens.
+0- = 1*3^2 + 0*3^1 + -1*3^0 = 9 + 0 + -1 = 8
+-0+ = 1*3^3 + -1*3^2 + 0*3^1 + 1*3^0 = 27 + -9 + 0 + 1 = 19
-+++ = -1*3^3 + 1*3^2 + 1*3^1 + 1*3^0 = -27 + 9 + 3 + 1 = -14