bwt 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. data/lib/bwt.rb +64 -0
  2. data/test/test_bwt.rb +13 -0
  3. metadata +47 -0
data/lib/bwt.rb ADDED
@@ -0,0 +1,64 @@
1
+ #!/usr/bin/ruby
2
+ #
3
+ #Initial implementation of BWT algorithm
4
+ #
5
+ #Burrows–Wheeler transform - block-sorting compression
6
+ class Bwt
7
+
8
+ def initialize;end
9
+ #Transformation
10
+ #@param String [String] Any given string
11
+ #@return [String] String transformed.
12
+ def self.bwt(string)
13
+ string2="|#{string}~"
14
+ p string2
15
+ len=string2.length
16
+ m=[]
17
+ (0...string2.length).collect { |i| (string2 * 2)[i, string2.length] }.each do |entry|
18
+ arr=[]
19
+ entry.split('').each do |letter|
20
+ arr.push(letter)
21
+ end
22
+ m.push(arr)
23
+ end
24
+ a=m.sort
25
+ b=[]
26
+ a.each do |lt|
27
+ b.push(lt[len-1])
28
+ end
29
+ return b.join('')
30
+ end #bwt
31
+
32
+ #Inverse Transformation
33
+ #@param String [String] Inverse String
34
+ #@return [Array] Array of letters - Original String
35
+ def self.bwt_rev(string)
36
+ len=string.length
37
+ s1=""
38
+ m=Array.new
39
+ count = 0
40
+ while count < len do
41
+ if not m.any?
42
+ string.split('').each do |s|
43
+ s1=[s]
44
+ m.push(s1)
45
+ m.sort!
46
+ end
47
+ count += 1
48
+ else
49
+ val = 0
50
+ string.split('').each do |s|
51
+ m[val].insert(0,s)
52
+ val += 1
53
+ end
54
+ m.sort!
55
+ count +=1
56
+ end
57
+ end
58
+ m.each do |arr|
59
+ if arr.last == "~"
60
+ return arr
61
+ end
62
+ end
63
+ end #bwt_rev
64
+ end # Bwt
data/test/test_bwt.rb ADDED
@@ -0,0 +1,13 @@
1
+ #!/usr/bin/ruby
2
+ #
3
+ require 'bwt'
4
+
5
+ string="Foobar"
6
+ puts "string - #{string}"
7
+
8
+ foo=Bwt.bwt(string)
9
+ puts "bwt - string - #{foo}"
10
+
11
+ bar=Bwt.bwt_rev(foo)
12
+ puts "bwt-reverse - #{bar}"
13
+
metadata ADDED
@@ -0,0 +1,47 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: bwt
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Andrei Rozanski
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2014-01-22 00:00:00.000000000 Z
13
+ dependencies: []
14
+ description: A simple, under development Burrows–Wheeler transform implementation
15
+ email: andrei@ruivo.org
16
+ executables: []
17
+ extensions: []
18
+ extra_rdoc_files: []
19
+ files:
20
+ - lib/bwt.rb
21
+ - test/test_bwt.rb
22
+ homepage: http://rubygems.org/gems/bwt
23
+ licenses: []
24
+ post_install_message:
25
+ rdoc_options: []
26
+ require_paths:
27
+ - lib
28
+ required_ruby_version: !ruby/object:Gem::Requirement
29
+ none: false
30
+ requirements:
31
+ - - ! '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ required_rubygems_version: !ruby/object:Gem::Requirement
35
+ none: false
36
+ requirements:
37
+ - - ! '>='
38
+ - !ruby/object:Gem::Version
39
+ version: '0'
40
+ requirements: []
41
+ rubyforge_project:
42
+ rubygems_version: 1.8.23
43
+ signing_key:
44
+ specification_version: 3
45
+ summary: bwt
46
+ test_files:
47
+ - test/test_bwt.rb