Burrows–Wheeler transform: Difference between revisions

Content added Content deleted
Line 809: Line 809:


NB. demonstrate the transform
NB. demonstrate the transform
> A=: <@bwt ;._2 ] 0 :0
A=: <@bwt ;._2 ] 0 :0
tests[0] = "banana";
tests[0] = "banana";
tests[1] = "appellee";
tests[1] = "appellee";
Line 854: Line 854:
tail=. {:
tail=. {:
mark=. STX , ,&ETX
mark=. STX , ,&ETX
forward=. tail Rank 1 @: sort @: rotations @: mark @: verify
transform=. tail Rank 1 @: sort @: rotations @: mark @: verify
EXPECT=. ETX , 'ANNB' , STX , 'AA'
EXPECT=. ETX , 'ANNB' , STX , 'AA'
assert. EXPECT -: forward 'BANANA'
assert. EXPECT -: transform 'BANANA'


unscramble=. (,Rank 0 1 sort)^:(#@[)&(i.0)
unscramble=. (,Rank 0 1 sort)^:(#@[)&(i.0)
Line 864: Line 864:
curtail=. }:
curtail=. }:
erase_mark =. behead @: curtail
erase_mark =. behead @: curtail
reverse=. erase_mark @: (from~ find) @: unscramble
restore=. erase_mark @: (from~ find) @: unscramble
assert. 'BANANA' -: reverse EXPECT
assert. 'BANANA' -: restore EXPECT


obverse=. :.
obverse=. :.
fixed=. f.
fixed=. f.
bwt=: forward obverse reverse fixed
bwt=: transform obverse restore fixed


assert (-: ]&.:bwt)'same under transformation'
assert (-: ]&.:bwt)'same under transformation'