When The Ternary Is Balance
Inspired by this Rosetta Code article.
Introduction
Balanced Ternary is a method of representing integers using -1, 0 and 1 in base 3.
Decimal 11 = (1 * 32) + (1 * 31) + (−1 * 30) = [1,1,-1] or "++-"
Decimal 6 = (1 * 32) + (−1 * 31) + (0 * 30) = [1,-1,0] or "+-0"
Task
Given any integer, you must give its balanced ternary representation in any permitted format (array, string, etc.)
Your program must support all integers present within its maximum integer limit.
Test Cases
Reference implementation with first 200 values
5 +--
6 +-0
11 ++-
65 +-++-
-44 -++0+
-540 -+-+000
Scoring
This is code-golf. Shortest answer in each language wins.
[Haskell], 78 77 bytes …
3y ago
[JavaScript (Node.js)], 47 40 …
3y ago
[Python 3], 78 bytes …
3y ago
3 answers
Python 3, 78 bytes
def t(n,*l):d="0+-"[n%3];return d*(not l or n*n) if n*n<2 else t((n+1)//3,1)+d
0 comment threads
JavaScript (Node.js), 47 40 50 49 bytes
-1 (possibly -3) bytes thanks to Shaggy!
f=(n,s='0')=>n?f(n/3+n%3/2|0,'')+"+-0+-"[n%3+2]:s
A basic recursive solution.
Haskell, 78 77 bytes
(g[0]!)
g a=mapM(\_->[-1..1])a++g(0:a)
(a:b)!c|foldl1((+).(*3))a==c=a|0<1=b!c
2 comment threads