Il #codice riportato di seguito mostra una possibile implementazione Ruby della trasformata di Burrows-Wheeler. Il listato è piuttosto compatto e segue quanto spiegato su Wikipedia a proposito di questo algoritmo.
Come usarlo:
~$ ruby bwt_coder "COCCOMERO" Input: |COCCOMERO| Encode: |OOCMORCCE| Decode: |COCCOMERO|
Per approfondire:
1 #!/usr/bin/ruby
2
3 # bwt_coder (v.0.1) a Ruby Burrows-Wheeler transform implementation
4 # (c)2009 Andrea Ganduglia - www.frequenze.it
5 # GPL SOFTWARE - Released under GPL3 licenze
6 #
7 # usage: ruby bwt_coder.rb "Nel mezzo del cammin di nostra vita"
8
9 def bwt_encode(str)
10 a = []; o = [];
11 str = "#{str}\000".split(//)
12 for i in 0..(str.size-1)
13 a << "#{str.last}#{str[0..(str.size-2)]}".to_s
14 str = a.last.split(//)
15 end
16 a.sort.each do |x|
17 o << x.split(//).last
18 end
19 return o.to_s
20 end
21
22 def bwt_decode(str)
23 a = []
24 cols = str.split(//)
25 for n in 0..(str.size-1)
26 for i in 0..(str.size-1)
27 a[i] = "#{cols[i]}#{a[i]}"
28 end
29 a = a.sort
30 end
31 a.each do |s|
32 if s.split(//).last == "\000"
33 return s
34 end
35 end
36 end
37
38 f = ARGV[0]
39 e = bwt_encode(f)
40 d = bwt_decode(e)
41
42 puts "Input:\t|#{f}|"
43 puts "Encode:\t|#{e}|"
44 puts "Decode:\t|#{d}|"