Burrows–Wheeler transform: Difference between revisions

Added 11l
(Added 11l)
Line 14:
Source: [[wp:Burrows–Wheeler_transform|Burrows–Wheeler transform]]
<br><br>
 
=={{header|11l}}==
{{trans|Python}}
 
<lang 11l>F bwt(String =s)
‘Apply Burrows-Wheeler transform to input string.’
assert("\002" !C s & "\003" !C s, ‘Input string cannot contain STX and ETX characters’)
s = "\002"s"\003"
V table = sorted((0 .< s.len).map(i -> @s[i..]‘’@s[0 .< i]))
V last_column = table.map(row -> row[(len)-1..])
R last_column.join(‘’)
 
F ibwt(String r)
‘Apply inverse Burrows-Wheeler transform.’
V table = [‘’] * r.len
L(i) 0 .< r.len
table = sorted((0 .< r.len).map(i -> @r[i]‘’@table[i]))
V s = table.filter(row -> row.ends_with("\003"))[0]
R s.rtrim("\003").trim("\002")
 
L(text) [‘banana’,
‘appellee’,
‘dogwood’,
‘TO BE OR NOT TO BE OR WANT TO BE OR NOT?’,
‘SIX.MIXED.PIXIES.SIFT.SIXTY.PIXIE.DUST.BOXES’]
V transformed = bwt(text)
V invTransformed = ibwt(transformed)
 
print(‘Original text: ’text)
print(‘After transformation: ’transformed.replace("\2", ‘^’).replace("\3", ‘|’))
print(‘After inverse transformation: ’invTransformed)
print()</lang>
 
{{out}}
<pre>
Original text: banana
After transformation: |annb^aa
After inverse transformation: banana
 
Original text: appellee
After transformation: |e^elplepa
After inverse transformation: appellee
 
Original text: dogwood
After transformation: |do^oodwg
After inverse transformation: dogwood
 
Original text: TO BE OR NOT TO BE OR WANT TO BE OR NOT?
After transformation: |?OOORREEETTRTW BBB ATTT NNOOONOO^
After inverse transformation: TO BE OR NOT TO BE OR WANT TO BE OR NOT?
 
Original text: SIX.MIXED.PIXIES.SIFT.SIXTY.PIXIE.DUST.BOXES
After transformation: |STEXYDST.E.IXXIIXXSSMPPS.B..EE.^.USFXDIIOIIIT
After inverse transformation: SIX.MIXED.PIXIES.SIFT.SIXTY.PIXIE.DUST.BOXES
 
</pre>
 
=={{header|BQN}}==
1,480

edits