Index finite lists of positive integers: Difference between revisions
Content added Content deleted
(→{{header|Perl 6}}: not using Test on second thought) |
|||
Line 270: | Line 270: | ||
sub rank(@n) { compress (compress(@n), @n - 1)} |
sub rank(@n) { compress (compress(@n), @n - 1)} |
||
sub unrank(Int $n) { my ($a, $b) = expand $n, 2; expand $a, $b + 1 } |
sub unrank(Int $n) { my ($a, $b) = expand $n, 2; expand $a, $b + 1 } |
||
use Test; |
|||
plan 11; |
|||
my @list = (^10).roll((2..20).pick); |
my @list = (^10).roll((2..20).pick); |
||
my $rank = rank @list; |
my $rank = rank @list; |
||
say "[$@list] -> $rank -> [{unrank $rank}]"; |
|||
for ^10 { |
for ^10 { |
||
my @unrank = unrank $_; |
my @unrank = unrank $_; |
||
say "$_ -> [$@unrank] -> {rank @unrank}"; |
|||
}</lang> |
}</lang> |
||
{{out}} |
{{out}} |
||
<pre>[7 1 4 7 7 0 2 7 7 0 7 7] -> 20570633300796394530947471 -> [7 1 4 7 7 0 2 7 7 0 7 7] |
|||
<pre>1..11 |
|||
0 -> [0] -> 0 |
|||
ok 1 - [0 0 0 9 1 4 3 3 5 1 7] -> 20162368965225804465357 |
|||
1 -> [1] -> 1 |
|||
2 -> [0 0] -> 2 |
|||
3 -> [1 0] -> 3 |
|||
4 -> [2] -> 4 |
|||
5 -> [3] -> 5 |
|||
6 -> [0 1] -> 6 |
|||
7 -> [1 1] -> 7 |
|||
8 -> [0 0 0] -> 8 |
|||
9 -> [1 0 0] -> 9</pre> |
|||
ok 11 - 9 -> [1 0 0] |
|||
</pre> |
|||
=={{header|Python}}== |
=={{header|Python}}== |