Gray code: Difference between revisions
Content added Content deleted
(→{{header|TypeScript}}: Added.) |
|||
Line 4,489: | Line 4,489: | ||
=={{header|Raku}}== |
=={{header|Raku}}== |
||
(formerly Perl 6) |
(formerly Perl 6) |
||
<lang perl6> |
<lang perl6> |
||
sub gray_encode ( Int $n --> Int ) { |
|||
return $n +^ ( $n +> 1 ); |
return $n +^ ( $n +> 1 ); |
||
} |
} |
||
sub gray_decode ( Int $n is copy --> Int ) { |
sub gray_decode ( Int $n is copy --> Int ) { |
||
my $mask = 1 +< (32-2); |
my $mask = 1 +< (32-2); |
||
$n +^= $mask +> 1 if $n +& $mask while $mask +>= 1; |
$n +^= $mask +> 1 if $n +& $mask while $mask +>= 1; |
||
return $n; |
return $n; |
||
} |
} |
||
for ^32 -> $n { |
for ^32 -> $n { |
||
my $g = gray_encode($n); |
my $g = gray_encode($n); |
||
my $d = gray_decode($g); |
my $d = gray_decode($g); |
||
printf "%2d: %5b => %5b => %5b: %2d\n", $n, $n, $g, $d, $d; |
printf "%2d: %5b => %5b => %5b: %2d\n", $n, $n, $g, $d, $d; |
||
die if $d != $n; |
die if $d != $n; |
||
} |
|||
</lang> |
|||
{{out}} |
{{out}} |