20 lines
501 B
Raku
20 lines
501 B
Raku
multi bin_to_gray ( [] ) { [] }
|
|
multi bin_to_gray ( [$head, *@tail] ) {
|
|
return [ $head, ( @tail Z+^ ($head, @tail) ) ];
|
|
}
|
|
|
|
multi gray_to_bin ( [] ) { [] }
|
|
multi gray_to_bin ( [$head, *@tail] ) {
|
|
my @bin := $head, (@tail Z+^ @bin);
|
|
return @bin.flat;
|
|
}
|
|
|
|
for ^32 -> $n {
|
|
my @b = $n.fmt('%b').comb;
|
|
my $g = bin_to_gray(@b);
|
|
my $d = gray_to_bin($g);
|
|
printf "%2d: %5s => %5s => %5s: %2d\n",
|
|
$n, @b.join, $g.join, $d.join, :2($d.join);
|
|
die if :2($d.join) != $n;
|
|
}
|