Huffman coding: Difference between revisions

m
→‎{{header|Perl 6}}: Combine into a single file for ease of testing
m (→‎{{header|REXX}}: adjust output)
m (→‎{{header|Perl 6}}: Combine into a single file for ease of testing)
Line 3,973:
}
@queue[0].value;
}
}</lang>
 
===# Testing===
 
<lang perl6>for huffman 'this is an example for huffman encoding'.comb.Bag {
say "'{.key}' : {.value}";
}
}</lang>
 
# To demonstrate that the table can do a round trip:
 
say '';
<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>
 
{{out}}
<pre>'x' : 11000
Line 3,999 ⟶ 4,014:
'i' : 1111
'r' : 01101
'l' : 00001</pre>
 
<pre>this is an example for huffman encoding
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>
{{out}}
<pre>this is an example for huffman encoding
1000000011111011110111110111101100101010111011100010010010011000000111011011110001101101101000110001111011100010100101010111010101100100011110011111101000000
this is an example for huffman encoding</pre>
10,327

edits