Burrows–Wheeler transform: Difference between revisions

→‎{{header|Perl 6}}: Remove some unnecessary variables
(Added C)
(→‎{{header|Perl 6}}: Remove some unnecessary variables)
Line 334:
{{works with|Rakudo|2018.06}}
 
<lang perl6># STX and ETX can be any characterscharacter that dondoesn't appear in the text.
# Using a visible character here for ease of viewing.
# in the text as long as STX sorts before ETX.
 
constant \STX = '👍';
constant \ETX = '👎';
 
# Burrows-Wheeler transform
sub transform (Str $s is copy) {
dienote "String can't contain STX or ETX characterscharacter." and exit if $s.contains: STX|ETX;
$s = STX ~ $s ~ ETX;
(^$ls.chars).map({ $s.comb.list.rotate: $_ }).sort[*;*-1].join
my $l = $s.chars;
(^$l).map({ $s.comb.list.rotate: $_ }).sort[*;*-1].join
}
 
# Burrows-Wheeler inverse transform
sub ɯɹoɟsuɐɹʇ (Str $s) {
my @t = '' xx my $l = $s.charscomb.sort;
@t = ($s.comb Z~ @t).sort for ^1..$ls.chars;
@t.first( *.starts-with: STX ).substr(1, $l - 2)
}
 
# TESTING
for |<BANANA dogwood SIX.MIXED.PIXIES.SIFT.SIXTY.PIXIE.DUST.BOXES>,
Line 366 ⟶ 364:
{{out}}
<pre>Original: BANANA
Transformed: BNN👍AA👎ABNN👍AAA
Inverse transformed: BANANABANANA👍
 
Original: dogwood
Transformed: 👍ooodwg👎d👍ooodwgd
Inverse transformed: dogwooddogwood👍
 
Original: SIX.MIXED.PIXIES.SIFT.SIXTY.PIXIE.DUST.BOXES
Transformed: TEXYDST.E.IXIXIXXSSMPPS.B..E.👍.UESFXDIIOIIIT👎SUESFXDIIOIIITS
Inverse transformed: SIX.MIXED.PIXIES.SIFT.SIXTY.PIXIE.DUST.BOXESBOXES👍
 
Original: TO BE OR NOT TO BE OR WANT TO BE OR NOT?
Transformed: OOORREEETTRTW BBB ATTT NNOOONOO👍 👎?
Inverse transformed: TO BE OR NOT TO BE OR WANT TO BE OR NOT?👍
 
Original: Oops👍
String can't contain STX or ETX characterscharacter.</pre>
in sub transform at bwt.p6 line 9
in block <unit> at bwt.p6 line 27
</pre>
 
=={{header|Python}}==
10,333

edits