Credits für die Challenge-Idee gehen an @AndrewPiliser. Sein ursprünglicher Vorschlag im Sandkasten wurde aufgegeben und da er hier seit mehreren Monaten nicht mehr aktiv ist, habe ich die Herausforderung übernommen.
Ausgeglichener Ternär System ist ein nicht standardmäßiges Zahlensystem. Es ist insofern ternär, als der Wert der Ziffern um den Faktor 3 zunimmt, wenn Sie weiter nach links gehen - also 100
ist 9
und 1001
ist 28.
Anstelle der Werte 0, 1 und 2 haben die Ziffern jedoch die Werte -1, 0 und 1 . (Sie können dies weiterhin verwenden, um eine beliebige Ganzzahl auszudrücken.)
Für diese Herausforderung wird die Ziffernbedeutung +1
geschrieben als +
, -1
geschrieben als -
und 0
ist gerecht0
. Balanced Ternary verwendet das -
Symbol vor Zahlen nicht, um sie zu negieren, wie dies bei anderen Zahlensystemen der Fall ist - siehe Beispiele.
Ihre Aufgabe ist es, ein komplettes Programm zu schreiben, das eine 32-Bit-Ganzzahl mit Dezimalzeichen als Eingabe verwendet und in ein ausgeglichenes ternäres Programm konvertiert. Eingebaute Basisumwandlungsfunktionen jeglicher Art sind nicht erlaubt (Mathematica hat wahrscheinlich eine ...). Die Eingabe kann über Standardeingabe, Befehlszeilenargumente usw. erfolgen.
Führende Nullen dürfen in der Eingabe vorhanden sein, aber nicht in der Ausgabe, es sei denn, die Eingabe ist 0
. In diesem Fall sollte die Ausgabe auch vorhanden sein0
.
Beispiele
Dies sind Umrechnungen von Ternär nach Dezimal; Sie müssen in die andere Richtung konvertieren.
+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