bwt 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
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