Challenges

When The Ternary Is Balance

+3
−0

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"

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.

Why does this post require moderator attention?
Why should this post be closed?

+3
−0

JavaScript (Node.js), 474050 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

Try it online!

A basic recursive solution.

Why does this post require moderator attention?

(Possible) 40 bytes (1 comment)
+3
−0

(g!)
g a=mapM(\_->[-1..1])a++g(0:a)
(a:b)!c|foldl1((+).(*3))a==c=a|0<1=b!c

Try it online!

Why does this post require moderator attention?

+2
−0

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

Try it online!

Why does this post require moderator attention?

Featured
Hot Posts
Challenges — "Hello, World!"
Challenges — Coat of Many Colours
Challenges — Cumulative Counts This community is part of the Codidact network. We have other communities too — take a look!