Negative base numbers: Difference between revisions
Content added Content deleted
(→{{header|Ring}}: changed Output: to {{out}}) |
(Added Wren) |
||
Line 2,008: | Line 2,008: | ||
118492 encoded in base -62 = VBA |
118492 encoded in base -62 = VBA |
||
VBA decoded in base -62 = 118492 </pre> |
VBA decoded in base -62 = 118492 </pre> |
||
=={{header|Wren}}== |
|||
{{trans|Kotlin}} |
|||
{{libheader|Wren-fmt}} |
|||
<lang ecmascript>import "/fmt" for Fmt |
|||
var digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" |
|||
var encodeNegBase = Fn.new { |n, b| |
|||
if (b < -62 || b > -1) Fiber.abort("Base must be between -1 and -62") |
|||
if (n == 0) return "0" |
|||
var out = "" |
|||
while (n != 0) { |
|||
var rem = n % b |
|||
n = (n/b).truncate |
|||
if (rem < 0) { |
|||
n = n + 1 |
|||
rem = rem -b |
|||
} |
|||
out = out + digits[rem] |
|||
} |
|||
return out[-1..0] |
|||
} |
|||
var decodeNegBase = Fn.new { |ns, b| |
|||
if (b < -62 || b > -1) Fiber.abort("Base must be between -1 and -62") |
|||
if (ns == "0") return 0 |
|||
var total = 0 |
|||
var bb = 1 |
|||
for (c in ns[-1..0]) { |
|||
total = total + digits.indexOf(c)*bb |
|||
bb = bb * b |
|||
} |
|||
return total |
|||
} |
|||
var nbl = [ [10, -2], [146, -3], [15, -10], [-7425195, -62] ] |
|||
for (p in nbl) { |
|||
var ns = encodeNegBase.call(p[0], p[1]) |
|||
Fmt.print("$8d encoded in base $-3d = $s", p[0], p[1], ns) |
|||
var n = decodeNegBase.call(ns, p[1]) |
|||
Fmt.print("$8s decoded in base $-3d = $d\n", ns, p[1], n) |
|||
}</lang> |
|||
{{out}} |
|||
<pre> |
|||
10 encoded in base -2 = 11110 |
|||
11110 decoded in base -2 = 10 |
|||
146 encoded in base -3 = 21102 |
|||
21102 decoded in base -3 = 146 |
|||
15 encoded in base -10 = 195 |
|||
195 decoded in base -10 = 15 |
|||
-7425195 encoded in base -62 = Wren |
|||
Wren decoded in base -62 = -7425195 |
|||
</pre> |
|||
=={{header|zkl}}== |
=={{header|zkl}}== |