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;
is @list, unrank($rank), "[$@list] -> $rank";
say "[$@list] -> $rank -> [{unrank $rank}]";


for ^10 {
for ^10 {
my @unrank = unrank $_;
my @unrank = unrank $_;
is $_, rank(@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
ok 2 - 0 -> [0]
1 -> [1] -> 1
ok 3 - 1 -> [1]
2 -> [0 0] -> 2
ok 4 - 2 -> [0 0]
3 -> [1 0] -> 3
ok 5 - 3 -> [1 0]
4 -> [2] -> 4
ok 6 - 4 -> [2]
5 -> [3] -> 5
ok 7 - 5 -> [3]
6 -> [0 1] -> 6
ok 8 - 6 -> [0 1]
7 -> [1 1] -> 7
ok 9 - 7 -> [1 1]
8 -> [0 0 0] -> 8
ok 10 - 8 -> [0 0 0]
9 -> [1 0 0] -> 9</pre>
ok 11 - 9 -> [1 0 0]
</pre>


=={{header|Python}}==
=={{header|Python}}==