Huffman coding: Difference between revisions
m
→{{header|Perl 6}}: Combine into a single file for ease of testing
Walterpachl (talk | contribs) m (→{{header|REXX}}: adjust output) |
Thundergnat (talk | contribs) m (→{{header|Perl 6}}: Combine into a single file for ease of testing) |
||
Line 3,973:
}
@queue[0].value;
}
say "'{.key}' : {.value}";
}
# To demonstrate that the table can do a round trip:▼
say '';
my %encode-key = huffman $original.comb.Bag;▼
my %decode-key = %encode-key.invert;▼
my @codes = %decode-key.keys;▼
my $encoded = $original.subst: /./, { %encode-key{$_} }, :g;▼
my $decoded = $encoded .subst: /@codes/, { %decode-key{$_} }, :g;▼
.say for $original, $encoded, $decoded;</lang>▼
{{out}}
<pre>'x' : 11000
Line 3,999 ⟶ 4,014:
'i' : 1111
'r' : 01101
'l' : 00001
▲To demonstrate that the table can do a round trip:
▲<lang perl6>my $original = 'this is an example for huffman encoding';
▲my %encode-key = huffman $original.comb.Bag;
▲my %decode-key = %encode-key.invert;
▲my @codes = %decode-key.keys;
▲my $encoded = $original.subst: /./, { %encode-key{$_} }, :g;
▲my $decoded = $encoded .subst: /@codes/, { %decode-key{$_} }, :g;
▲.say for $original, $encoded, $decoded;</lang>
▲<pre>this is an example for huffman encoding
1000000011111011110111110111101100101010111011100010010010011000000111011011110001101101101000110001111011100010100101010111010101100100011110011111101000000
this is an example for huffman encoding</pre>
|