Os créditos para a ideia do desafio vão para @AndrewPiliser. Sua proposta original na caixa de areia foi abandonada e, como ele não está ativo aqui há vários meses, assumi o desafio.
O ternário equilibrado é um sistema numérico não padrão. É como ternário, pois os dígitos aumentam em valor por um fator de 3 à medida que você vai para a esquerda - assim100
é9
e1001
é 28.
No entanto, em vez de ter valores de 0, 1 e 2, os dígitos têm valores de -1, 0 e 1 . (Você ainda pode usar isso para expressar qualquer número inteiro.)
Para esse desafio, o significado do dígito +1
será escrito como +
, -1
será escrito como -
e 0
é justo 0
. O ternário balanceado não usa o -
símbolo na frente dos números para negá-los como outros sistemas numéricos - veja exemplos.
Sua tarefa é escrever um programa completo que use um número inteiro decimal de 32 bits como entrada e o converta em um ternário balanceado. Nenhuma função de conversão básica embutida de qualquer tipo é permitida (o Mathematica provavelmente possui uma ...). A entrada pode estar na entrada padrão, argumentos de linha de comando etc.
Os zeros à esquerda podem estar presentes na entrada, mas não na saída, a menos que a entrada esteja 0
, nesse caso a saída também deve estar 0
.
Exemplos
São conversões de ternário balanceado para decimal; você terá que converter para o outro lado.
+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