Rice coding: Difference between revisions
Content added Content deleted
(→{{header|ALGOL 68}}: notes) |
(Added Sidef) |
||
Line 430: | Line 430: | ||
is $_, Rice::decode Rice::encode $_ for -N..N; |
is $_, Rice::decode Rice::encode $_ for -N..N; |
||
}</syntaxhighlight> |
}</syntaxhighlight> |
||
=={{header|Sidef}}== |
|||
{{trans|Perl}} |
|||
<syntaxhighlight lang="ruby">func rice(k, arr) { |
|||
var t = 2**k |
|||
arr.map {|v| |
|||
['1' * (v >> k), '0', '%0*s' % (k, as_bin(v % t))].join |
|||
}.join |
|||
} |
|||
func derice(k, str) { |
|||
gather { |
|||
var re = Regex('\G(1*)0(.{' + Str(k) + '})', 'g') |
|||
while (str =~ re) {|m| |
|||
take((m[0].len << k) + Num(m[1], 2)) |
|||
} |
|||
} |
|||
} |
|||
for k in (2 .. 6) { |
|||
say "\nk = #{k}\n" |
|||
var input = @(0..17).shuffle |
|||
var enc = rice(k, input) |
|||
var dec = derice(k, enc) |
|||
say " input: #{input}" |
|||
say " rice: #{enc}" |
|||
say "decoded: #{dec}" |
|||
assert_eq(dec, input) |
|||
}</syntaxhighlight> |
|||
{{out}} |
|||
<pre> |
|||
k = 2 |
|||
input: [5, 6, 15, 17, 3, 9, 4, 10, 12, 2, 11, 0, 1, 13, 7, 16, 8, 14] |
|||
rice: 10011010111011111100101111001100011010111000010110110000011110011011111100011000111010 |
|||
decoded: [5, 6, 15, 17, 3, 9, 4, 10, 12, 2, 11, 0, 1, 13, 7, 16, 8, 14] |
|||
k = 3 |
|||
input: [11, 14, 16, 4, 0, 5, 12, 13, 17, 3, 6, 10, 15, 2, 9, 7, 8, 1] |
|||
rice: 100111011011000001000000010110100101011100010011011010010101110010100010111100000001 |
|||
decoded: [11, 14, 16, 4, 0, 5, 12, 13, 17, 3, 6, 10, 15, 2, 9, 7, 8, 1] |
|||
k = 4 |
|||
input: [6, 4, 2, 9, 0, 5, 1, 3, 17, 15, 10, 11, 16, 13, 8, 14, 7, 12] |
|||
rice: 00110001000001001001000000010100001000111000010111101010010111000000110101000011100011101100 |
|||
decoded: [6, 4, 2, 9, 0, 5, 1, 3, 17, 15, 10, 11, 16, 13, 8, 14, 7, 12] |
|||
k = 5 |
|||
input: [17, 11, 14, 15, 4, 10, 12, 8, 16, 5, 6, 13, 3, 7, 1, 9, 2, 0] |
|||
rice: 010001001011001110001111000100001010001100001000010000000101000110001101000011000111000001001001000010000000 |
|||
decoded: [17, 11, 14, 15, 4, 10, 12, 8, 16, 5, 6, 13, 3, 7, 1, 9, 2, 0] |
|||
k = 6 |
|||
input: [2, 3, 14, 1, 7, 11, 17, 9, 16, 8, 13, 15, 6, 10, 12, 5, 4, 0] |
|||
rice: 000001000000110001110000000100001110001011001000100010010010000000100000011010001111000011000010100001100000010100001000000000 |
|||
decoded: [2, 3, 14, 1, 7, 11, 17, 9, 16, 8, 13, 15, 6, 10, 12, 5, 4, 0] |
|||
</pre> |
|||
=={{header|Wren}}== |
=={{header|Wren}}== |
||
Line 436: | Line 497: | ||
{{libheader|Wren-check}} |
{{libheader|Wren-check}} |
||
{{libheader|Wren-fmt}} |
{{libheader|Wren-fmt}} |
||
<syntaxhighlight lang=" |
<syntaxhighlight lang="wren">import "./math" for Int, Math |
||
import "./check" for Check |
import "./check" for Check |
||
import "./fmt" for Fmt |
import "./fmt" for Fmt |