Burrows–Wheeler transform: Difference between revisions
Content added Content deleted
(Add Rust implementation) |
No edit summary |
||
Line 1,232: | Line 1,232: | ||
--> ERROR: bwt.lua:6: String cannot contain STX |
--> ERROR: bwt.lua:6: String cannot contain STX |
||
--></pre> |
--></pre> |
||
=={{header|Mathematica}} / {{header|Wolfram Language}}== |
|||
<lang Mathematica>ClearAll[BurrowWheeler, InverseBurrowWheeler] |
|||
BurrowWheeler[sin_String, {bdelim_, edelim_}] := Module[{s}, |
|||
s = Characters[bdelim <> sin <> edelim]; |
|||
s = RotateLeft[s, #] & /@ Range[Length[s]]; |
|||
StringJoin[LexicographicSort[s][[All, -1]]] |
|||
] |
|||
InverseBurrowWheeler[sin_String, {bdelim_, edelim_}] := Module[{s, chars}, |
|||
chars = Characters[sin]; |
|||
s = ConstantArray[{}, Length[chars]]; |
|||
Do[ |
|||
s = LexicographicSort[MapThread[Prepend, {s, chars}]]; |
|||
, |
|||
{Length[chars]} |
|||
]; |
|||
StringTake[StringJoin[SelectFirst[s, Last /* EqualTo[edelim]]], {2, -2}] |
|||
] |
|||
BurrowWheeler["BANANA", {"^", "|"}] |
|||
InverseBurrowWheeler[%, {"^", "|"}] |
|||
BurrowWheeler["appellee", {"^", "|"}] |
|||
InverseBurrowWheeler[%, {"^", "|"}] |
|||
BurrowWheeler["dogwood", {"^", "|"}] |
|||
InverseBurrowWheeler[%, {"^", "|"}]</lang> |
|||
{{out}} |
|||
<pre>|ANNB^AA |
|||
BANANA |
|||
|e^elplepa |
|||
appellee |
|||
|do^oodwg |
|||
dogwood</pre> |
|||
=={{header|Nim}}== |
=={{header|Nim}}== |