Anonymous user
Index finite lists of positive integers: Difference between revisions
Index finite lists of positive integers (view source)
Revision as of 17:01, 24 January 2021
, 3 years ago→{{header|Kotlin}}
m (→{{header|FreeBASIC}}: -typo) |
|||
Line 569:
10 -> [1, 1] -> 10
</pre>
=={{header|Nim}}==
{{trans|Go}}
{{libheader|bignum}}
<lang Nim>import strformat, strutils
import bignum
func rank(list: openArray[uint]): Int =
result = newInt(0)
for n in list:
result = result shl (n + 1)
result = result.setBit(n)
func unrank(n: Int): seq[uint] =
var m = n.clone
var a = if m.isZero: 0u else: m.bitLen.uint
while a > 0:
m = m.clearBit(a - 1)
let b = if m.isZero: 0u else: m.bitLen.uint
result.add(a - b - 1)
a = b
when isMainModule:
var b: Int
for i in 0..10:
b = newInt(i)
let u = b.unrank()
let r = u.rank()
echo &"{i:2d} {u:>9s} {r:>2s}"
b = newInt("12345678901234567890")
let u = b.unrank()
let r = u.rank()
echo &"\n{b}\n{u}\n{r}"</lang>
{{out}}
<pre> 0 @[] 0
1 @[0] 1
2 @[1] 2
3 @[0, 0] 3
4 @[2] 4
5 @[1, 0] 5
6 @[0, 1] 6
7 @[0, 0, 0] 7
8 @[3] 8
9 @[2, 0] 9
10 @[1, 1] 10
12345678901234567890
@[1, 1, 1, 0, 1, 1, 1, 2, 1, 1, 2, 0, 3, 0, 2, 0, 0, 1, 1, 0, 3, 0, 0, 0, 0, 4, 1, 1, 0, 1, 2, 1]
12345678901234567890</pre>
=={{header|Perl}}==
|