Los créditos para la idea del desafío van a @AndrewPiliser. Su propuesta original en la caja de arena fue abandonada y, dado que no ha estado activo aquí durante varios meses, he asumido el desafío.
El ternario equilibrado es un sistema de numeración no estándar. Es como ternario en que los dígitos aumentan en valor en un factor de 3 a medida que avanza hacia la izquierda, así100
es9
y1001
es 28.
Sin embargo, en lugar de tener valores de 0, 1 y 2, los dígitos tienen valores de -1, 0 y 1 . (Todavía puede usar esto para expresar cualquier número entero).
Para este desafío, el significado del dígito +1
se escribirá como +
, -1
se escribirá como -
y 0
es justo 0
. El ternario equilibrado no usa el -
símbolo delante de los números para negarlos como lo hacen otros sistemas de numeración; vea ejemplos.
Su tarea es escribir un programa completo que tome un entero con signo decimal de 32 bits como entrada y lo convierta en ternario equilibrado. No se permiten funciones de conversión de base incorporadas de ningún tipo (Mathematica probablemente tiene una ...). La entrada puede estar en entrada estándar, argumentos de línea de comandos, etc.
Los ceros a la izquierda pueden estar presentes en la entrada pero no en la salida, a menos que la entrada lo esté 0
, en cuyo caso la salida también debería estarlo 0
.
Ejemplos
Estas son conversiones de ternario balanceado a decimal; Tendrás que convertir a la inversa.
+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