Rice coding: Difference between revisions
Content added Content deleted
(→{{header|Wren}}: Oops!) |
(→{{header|raku}}: no need to create a module here) |
||
Line 109: | Line 109: | ||
=={{header|raku}}== |
=={{header|raku}}== |
||
<syntaxhighlight lang="raku"> |
<syntaxhighlight lang="raku">package Rice { |
||
our sub encode(Int $n, UInt :$k = 2) { |
our sub encode(Int $n, UInt :$k = 2) { |
||
my $d = 2**$k; |
my $d = 2**$k; |
||
my $q = $n div $d; |
my $q = $n div $d; |
||
my $b = sign(1 + sign($q)); |
my $b = sign(1 + sign($q)); |
||
my $m = abs($q) + $b; |
my $m = abs($q) + $b; |
||
flat |
flat |
||
$b xx $m, 1 - $b, |
$b xx $m, 1 - $b, |
||
($n mod $d).polymod(2 xx $k - 1).reverse |
($n mod $d).polymod(2 xx $k - 1).reverse |
||
} |
} |
||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
} |
|||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
} |
} |
||
⚫ | |||
CHECK { |
|||
constant N = 100; |
|||
⚫ | |||
plan 2*N + 1; |
|||
⚫ | |||
plan 2*N + 1; |
|||
⚫ | |||
}</syntaxhighlight> |
|||
=={{header|Wren}}== |
=={{header|Wren}}== |