I crediti per l'idea della sfida vanno a @AndrewPiliser. La sua proposta originale nella sandbox è stata abbandonata e poiché non è attivo qui da diversi mesi, ho accettato la sfida.
Il ternario bilanciato è un sistema numerico non standard. È come ternario in quanto le cifre aumentano di valore di un fattore 3 man mano che si procede più a sinistra - così100
è9
ed1001
è 28.
Tuttavia, anziché avere valori di 0, 1 e 2, le cifre hanno valori di -1, 0 e 1 . (Puoi ancora usarlo per esprimere qualsiasi numero intero.)
Per questa sfida, il significato della cifra +1
sarà scritto come +
, -1
sarà scritto come -
ed 0
è giusto 0
. Il ternario bilanciato non usa il -
simbolo davanti ai numeri per negarli come fanno altri sistemi numerici - vedi esempi.
Il tuo compito è scrivere un programma completo che accetta come input un intero con segno decimale a 32 bit e lo converte in ternario bilanciato. Non sono consentite funzioni di conversione di base integrate di alcun tipo (probabilmente Mathematica ne ha una ...). L'input può essere su input standard, argomenti della riga di comando, ecc.
Gli zeri iniziali possono essere presenti nell'input ma non nell'output, a meno che non sia l'input 0
, nel qual caso dovrebbe essere anche l'output 0
.
Esempi
Queste sono conversioni da ternario bilanciato a decimale; dovrai convertire in altro modo.
+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