binary_matrix 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,42 @@
1
+ # BinaryMatrix
2
+ [![Build Status](https://travis-ci.org/jjs0sbw/BinaryMatrix.svg?branch=master)](https://travis-ci.org/jjs0sbw/BinaryMatrix)
3
+
4
+ An implementation of a binary matrix with Boolean operators. This program is used to perform
5
+ Warfield Augumented Boolean Logic (WABL) operations. WABL operations are a primary component
6
+ system structural modeling. More information is available at:
7
+
8
+ Systems Concepts web site: http://systemsconcept.org/
9
+
10
+ Github: https://github.com/jjs0sbw/bsmp
11
+
12
+ Github: https://github.com/jjs0sbw/smp
13
+
14
+ Wikipedia: http://en.wikipedia.org/wiki/Logical_matrix
15
+
16
+ ## Installation
17
+
18
+ Add this line to your application's Gemfile:
19
+
20
+ ```ruby
21
+ gem 'binary_matrix'
22
+ ```
23
+
24
+ And then execute:
25
+
26
+ $ bundle
27
+
28
+ Or install it yourself as:
29
+
30
+ $ gem install binary_matrix
31
+
32
+ ## Usage
33
+
34
+ Usage instructions are located at the above referenced web sites.
35
+
36
+ ## Contributing
37
+
38
+ 1. Fork it ( https://github.com/[my-github-username]/binary_matrix/fork )
39
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
40
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
41
+ 4. Push to the branch (`git push origin my-new-feature`)
42
+ 5. Create a new Pull Request
@@ -0,0 +1,8 @@
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ RSpec::Core::RakeTask.new
5
+
6
+ task :default => :spec
7
+ task :test => :spec
8
+
@@ -0,0 +1,24 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'binary_matrix/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "binary_matrix"
8
+ spec.version = BinaryMatrix::VERSION
9
+ spec.authors = ["Joseph Simpson"]
10
+ spec.email = ["jjs0sbw@gmail.com"]
11
+ spec.summary = %q{Binary matrix with Boolean operators.}
12
+ spec.description = %q{Binary matrix with Boolean operators that implements Warfield augumented Boolean logic.}
13
+ spec.homepage = ""
14
+ spec.license = "GPL3"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0")
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_development_dependency "bundler", "~> 1.6"
22
+ spec.add_development_dependency "rake", "~> 10.0"
23
+ spec.add_development_dependency "rspec"
24
+ end
@@ -0,0 +1,100 @@
1
+ require "#{File.dirname(__FILE__)}/binary_matrix/version"
2
+ require "#{File.dirname(__FILE__)}/matrix_index"
3
+ require "#{File.dirname(__FILE__)}/binary_matrix_utilities"
4
+ require "#{File.dirname(__FILE__)}/log_and_print"
5
+
6
+ # Binary matrix class for Warfield Augumented Boolean Logic
7
+ class BinaryMatrix
8
+ include Utilities
9
+ include LogAndPrint
10
+ attr_accessor :size, :number_of_rows, :number_of_columns, :bm, :bmi
11
+
12
+ def initialize(size)
13
+ @size = size
14
+ @number_of_rows = size
15
+ @number_of_columns = size
16
+ @bm = Array.new(size) { Array.new(size, 0) }
17
+ @bmi = MatrixIndex.new(size)
18
+ end
19
+
20
+ def add(matrix = bm)
21
+ sum = 0
22
+ matrix.each { |x| x.each { |y| sum += y } }
23
+ sum
24
+ end
25
+
26
+ def enter_cell_content(index_1, index_2, number = 1, matrix = bm, matrix_in = bmi.mi)
27
+ number = 0 if index_1 == index_2
28
+ r_1 = matrix_in.index(index_1)
29
+ r_2 = matrix_in.index(index_2)
30
+ matrix[r_1][r_2] = number
31
+ matrix
32
+ end
33
+
34
+ def boolean_add(matrix_one, matrix_two)
35
+ temp_matrix_one = matrix_one.dup
36
+ temp_matrix_two = matrix_two.dup
37
+ sz = (temp_matrix_two[0].length - 1)
38
+ temp_matrix_out = Array.new(sz + 1) { Array.new(sz + 1, 0) }
39
+ (0..sz).map do | x|
40
+ (0..sz).map do |y|
41
+ temp_matrix_out[x][y] = (temp_matrix_one[x][y] + temp_matrix_two[x][y])
42
+ end
43
+ end
44
+ boolean_map(temp_matrix_out)
45
+ temp_matrix_out
46
+ end
47
+
48
+ def boolean_subtract(matrix_one, matrix_two)
49
+ temp_matrix_one = matrix_one.dup
50
+ temp_matrix_two = matrix_two.dup
51
+ sz = (temp_matrix_two[0].length - 1)
52
+ temp_matrix_out = Array.new(size) { Array.new(size, 0) }
53
+ (0..sz).map do | x|
54
+ (0..sz).map do |y|
55
+ temp_matrix_out[x][y] = (temp_matrix_one[x][y] - temp_matrix_two[x][y])
56
+ end
57
+ end
58
+ boolean_map(temp_matrix_out)
59
+ temp_matrix_out
60
+ end
61
+
62
+ def boolean_multiply(matrix_one, matrix_two)
63
+ sz = (matrix_one[0].length - 1)
64
+ id_1 = id_matrix(size).dup
65
+ id_2 = id_matrix(size).dup
66
+ m_1 = boolean_add(id_1, matrix_one.dup)
67
+ m_2 = boolean_add(id_2, matrix_two.dup)
68
+ m_2_t = m_2.transpose
69
+ b_m_out = (0..sz).map do |j|
70
+ (0..sz).map { |i| m_1[j].zip(m_2_t[i]).map { |x, y| x * y }.inject(:+) }
71
+ end
72
+ boolean_map(b_m_out)
73
+ b_m_out
74
+ end
75
+
76
+ def expand(matrix, index_1)
77
+ new_matrix = expand_end(matrix)
78
+ last_index = new_matrix[0].length - 1
79
+ matrix_out = swap_row_column([index_1], [last_index], new_matrix)
80
+ matrix_out
81
+ end
82
+
83
+ def compress(index_1, index_2, matrix = bm, matrix_index = bmi.mi)
84
+ new_matrix = matrix.dup
85
+ i_1 = matrix_index.index(index_1)
86
+ i_2 = matrix_index.index(index_2)
87
+ a_1 = new_matrix[i_1]
88
+ a_2 = new_matrix[i_2]
89
+ a_c_1_2 = compress_array(a_1, a_2, i_1)
90
+ new_matrix[i_1] = a_c_1_2
91
+ new_matrix.delete_at(i_2)
92
+ new_matrix_t = new_matrix.transpose.dup
93
+ a_1_t = new_matrix_t[i_1]
94
+ a_2_t = new_matrix_t[i_2]
95
+ a_c_1_2_t = compress_array(a_1_t, a_2_t, i_1)
96
+ new_matrix_t[i_1] = a_c_1_2_t
97
+ new_matrix_t.delete_at(i_2)
98
+ new_matrix_t.transpose.dup
99
+ end
100
+ end
@@ -0,0 +1,3 @@
1
+ class BinaryMatrix
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,93 @@
1
+ # encoding : utf-8
2
+ #
3
+ # binary_matrix_utilities.rb
4
+ # Utilities that support different output forms for a BinaryMatrix instance
5
+ #
6
+ # Copyright GPL 3 -- Joseph J. Simpson -- 2014 11-23-2014
7
+ module Utilities
8
+ def boolean_map(matrix)
9
+ m_size = (matrix[0].length - 1)
10
+ (0..m_size).map do
11
+ |x| (0..m_size).map do
12
+ |y| matrix[x][y] > 1 ? matrix[x][y] = 1 : matrix[x][y]
13
+ end
14
+ end
15
+ end
16
+
17
+ def id_matrix(size)
18
+ id = Array.new(size) { Array.new(size, 0) }
19
+ id[0][0] = 1
20
+ (0..size - 1).map { |x| id[x][x] = 1 }
21
+ id
22
+ end
23
+
24
+ def compress_array(array_1, array_2, index_1)
25
+ sz = array_1.length - 1
26
+ a_1 = array_1.dup
27
+ a_2 = array_2.dup
28
+ a_out = []
29
+ (0..sz).each { |x| a_out[x] = a_1[x] + a_2[x] }
30
+ (0..sz).each { |x| a_out[x] > 1 ? a_out[x] = 1 : a_out[x] }
31
+ a_out[index_1] = 0 # change to index_1 may need to add index_2
32
+ a_out
33
+ end
34
+
35
+ def expand_end(matrix)
36
+ new_size = matrix[0].length
37
+ new_row = Array.new(new_size, 0)
38
+ new_matrix = matrix.dup
39
+ new_matrix << new_row
40
+ new_column = Array.new(new_size + 1, 0)
41
+ new_matrix_t = new_matrix.transpose.dup
42
+ new_matrix_t << new_column
43
+ matrix_out = new_matrix_t.transpose.dup
44
+ matrix_out
45
+ end
46
+
47
+ def swap_row_column(index_1, index_2, matrix = bm, matrix_index = bmi.mi)
48
+ tm = matrix.dup
49
+ i1 = matrix_index.index(index_1)
50
+ i2 = matrix_index.index(index_2)
51
+ ta1 = tm[i1]
52
+ ta2 = tm[i2]
53
+ tm[i1] = ta2
54
+ tm[i2] = ta1
55
+ tmt = tm.transpose
56
+ tat1 = tmt[i1]
57
+ tat2 = tmt[i2]
58
+ tmt[i1] = tat2
59
+ tmt[i2] = tat1
60
+ tout = tmt.transpose.dup
61
+ tout
62
+ end
63
+
64
+ def swap_index(index_1, index_2, matrix_index)
65
+ tm = matrix_index.dup
66
+ i1 = bmi.mi.index(index_1)
67
+ i2 = bmi.mi.index(index_2)
68
+ ta1 = tm[i1]
69
+ ta2 = tm[i2]
70
+ tm[i1] = ta2
71
+ tm[i2] = ta1
72
+ tm.dup
73
+ end
74
+
75
+ def reachability_matrix(matrix)
76
+ tmp_matrix = matrix.dup
77
+ guard_num = 0
78
+ check_matrix_1 = boolean_multiply(tmp_matrix, tmp_matrix)
79
+ check_matrix_2 = boolean_multiply(check_matrix_1, check_matrix_1)
80
+ until boolean_subtract(check_matrix_1, check_matrix_2) == 0 || guard_num > 10
81
+ guard_num += 1
82
+ check_matrix_1 = boolean_multiply(check_matrix_2, check_matrix_2)
83
+ check_matrix_2 = boolean_multiply(check_matrix_1, check_matrix_1)
84
+ end
85
+ check_matrix_2
86
+ end
87
+
88
+ def subtract_id_matrix(matrix)
89
+ sz = (matrix[0].length - 1)
90
+ (0..sz).map { |x| matrix[x][x] = 0 }
91
+ matrix
92
+ end
93
+ end
@@ -0,0 +1,18 @@
1
+ # encoding : utf-8
2
+ #
3
+ # Utilities that support logging and printing
4
+ #
5
+ # Copyright GPL 3 -- Joseph J. Simpson -- 2014 11-27-2014
6
+ # code to create log file
7
+ module LogAndPrint
8
+ def square_print_with_comment(comment, matrix = bm)
9
+ puts ' '
10
+ puts comment
11
+ puts matrix.to_a.map(&:inspect)
12
+ puts ' '
13
+ end
14
+
15
+ def write_log(log_name, data)
16
+ File.open(log_name, 'a+') { |f| f.write(data) }
17
+ end
18
+ end
@@ -0,0 +1,20 @@
1
+ # encoding : utf-8
2
+ #
3
+ # An index of a binary matrix
4
+ # Copyright GPL 3 -- Joseph J. Simpson -- 2014 11-22-2014
5
+ class MatrixIndex
6
+ attr_accessor :mi
7
+ def initialize(size)
8
+ @mi = Array.new(size) { |i| Array.new(1, i + 1) }
9
+ end
10
+
11
+ def compress_index(index_1, index_2)
12
+ temp_mi = mi.dup
13
+ i1 = temp_mi.index([index_1])
14
+ i2 = temp_mi.index([index_2])
15
+ temp_mi[i1].push(temp_mi[i2])
16
+ temp_mi.delete_at(i2)
17
+ mi = temp_mi
18
+ mi
19
+ end
20
+ end
@@ -0,0 +1,895 @@
1
+ require File.expand_path("../../lib/binary_matrix.rb", __FILE__)
2
+ require "#{File.dirname(__FILE__)}/spec_helper"
3
+ require 'logger'
4
+
5
+ describe BinaryMatrix do
6
+ logger = Logger.new('general_log_one.txt')
7
+ logger.formatter = proc do |severity, datetime, progname, msg|
8
+ "Binary Matrix: #{msg}\n"
9
+ end
10
+ logger.info "\nThis is a info logging file for the general subordination matrix\n"
11
+ before :each do
12
+ @binary_matrix = BinaryMatrix.new(12)
13
+ end
14
+ describe "#new" do
15
+ it "takes one parameter and returns a BinaryMatrix object" do
16
+ expect(@binary_matrix).to be_a_kind_of(BinaryMatrix)
17
+ end
18
+
19
+ it "has a size of tweleve (12)" do
20
+ expect(@binary_matrix.size).to be == 12
21
+ end
22
+
23
+ it "has tweleve (12) rows in the matrix" do
24
+ expect(@binary_matrix.number_of_rows).to be == 12
25
+ end
26
+
27
+ it "has tweleve (12) columns in the matrix" do
28
+ expect(@binary_matrix.number_of_columns).to be == 12
29
+ end
30
+
31
+ it "has a two dimensional tweleve (12) by tweleve (12) array" do
32
+ expect(@binary_matrix.bm).to be_a_kind_of(Array)
33
+ end
34
+
35
+ it "bm array is filled with zeros" do
36
+ expect(@binary_matrix.add(@binary_matrix.bm)).to be == 0
37
+ end
38
+
39
+ it "has an matrix index" do
40
+ expect(@binary_matrix.bmi).to be_a_kind_of(MatrixIndex)
41
+ end
42
+ end
43
+
44
+ describe "#add" do
45
+ it "will add up all the values in a matrix" do
46
+ temp_matrix = Array.new(4) { Array.new(4, 1)}
47
+ expect(@binary_matrix.add(temp_matrix)).to be == 16
48
+ end
49
+ end
50
+
51
+ describe "#enter_cell_content" do
52
+
53
+ it "will enter a one (1) into a matrix cell" do
54
+ @binary_matrix.enter_cell_content([2], [5])
55
+ expect(@binary_matrix.add).to be == 1
56
+ end
57
+
58
+ it "will enter a zero into the cell if the index numbers are the same" do
59
+ @binary_matrix.enter_cell_content([2], [2])
60
+ expect(@binary_matrix.add).to be == 0
61
+ end
62
+
63
+ end
64
+
65
+ describe "#boolean_add" do
66
+ it "will add cell contents from two same size matrices" do
67
+ temp_matrix_1 = Array.new(10) { Array.new(10, 1) }
68
+ temp_matrix_2 = Array.new(10) { Array.new(10, 2) }
69
+ temp_matrix_out = Array.new(10) { Array.new(10, 0) }
70
+ temp_matrix_answer = Array.new(10) { Array.new(10, 1) }
71
+ temp_matrix_out = @binary_matrix.boolean_add(temp_matrix_1, temp_matrix_2)
72
+ expect(temp_matrix_out).to eq temp_matrix_answer
73
+ end
74
+ end
75
+
76
+ describe "#boolean_multiply" do
77
+ it "will multipley two square matrices together and return a Boolean matrix" do
78
+ temp_matrix_1 = Array.new(10) { Array.new(10, 0) }
79
+ temp_matrix_2 = Array.new(10) { Array.new(10, 0) }
80
+ temp_matrix_a1 = Array.new(10) { Array.new(10, 0) }
81
+ temp_matrix_a2 = @binary_matrix.id_matrix(10)
82
+ temp_matrix_answer = @binary_matrix.boolean_add(temp_matrix_a1, temp_matrix_a2)
83
+ temp_matrix_out = @binary_matrix.boolean_multiply(temp_matrix_1, temp_matrix_2)
84
+ expect(temp_matrix_out).to eq temp_matrix_answer
85
+ end
86
+ end
87
+
88
+ describe "#expand_end" do
89
+ it "will expand the matrix by one row and column at the end" do
90
+ temp_matrix_answer = Array.new(13) { Array.new(13, 0) }
91
+ expect(@binary_matrix.expand_end(@binary_matrix.bm)).to eq temp_matrix_answer
92
+ end
93
+ end
94
+
95
+ describe "#expand" do
96
+ it "will expand the matrix inserting a row and column at the given index " do
97
+ temp_matrix_answer = Array.new(13) { Array.new(13, 0) }
98
+ expect(@binary_matrix.expand(@binary_matrix.bm, 4)).to eq temp_matrix_answer
99
+ end
100
+ end
101
+
102
+ describe "#compress" do
103
+ it "will compress two rows and columns into one" do
104
+ temp_matrix_answer = Array.new(11) { Array.new(11, 0) }
105
+ expect(@binary_matrix.compress([2], [6])).to eq temp_matrix_answer # added brackets
106
+ end
107
+ end
108
+
109
+ describe "#square_print_with_comment" do
110
+ it "will print the matrix in a square format with a commnet" do
111
+ expect { print "test one" }.to output("test one").to_stdout
112
+ end
113
+ it "will print the matrix in a square format with a commnet" do
114
+ expect { @binary_matrix.square_print_with_comment("testOne", \
115
+ @binary_matrix.bm)}.to output(" \ntestOne
116
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
117
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
118
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
119
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
120
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
121
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
122
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
123
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
124
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
125
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
126
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
127
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
128
+ \n").to_stdout
129
+ end
130
+ end
131
+
132
+ describe "#write_log" do
133
+ it "will log the matrix in a square format with a comment to a local file" do
134
+ puts "\n Binary Matrix .. General\n"
135
+ puts @binary_matrix.bm.to_a.map(&:inspect)
136
+ puts "Matrix Index .. \n"
137
+ p @binary_matrix.bmi.mi.to_a.map(&:inspect)
138
+ logger.info "\n Enter base binary matrix.. General\n"
139
+ "#{@binary_matrix.bm.to_a.each{ |r| logger.info r.inspect } }"
140
+ logger.info "\n\nMatrix Index"
141
+ "#{@binary_matrix.bmi.mi.to_a{ logger.info inspect } }"
142
+ end
143
+ end
144
+
145
+ # 1 and 10 were randomly selected to as the first set to compare
146
+ # City 1 and city 10 are at the same level, so the rows and columns must be merged
147
+ describe "#compress" do
148
+ it "will compress two rows and columns into one" do
149
+ @binary_matrix.bm = @binary_matrix.compress([1], [10])
150
+ @binary_matrix.bmi.mi = @binary_matrix.bmi.compress_index(1, 10)
151
+ puts "Compress rows columns 1 and 10\n"
152
+ puts @binary_matrix.bm.to_a.map(&:inspect)
153
+ puts "Matrix Index .. \n"
154
+ p @binary_matrix.bmi.mi.to_a.map(&:inspect)
155
+ logger.info "\nCompress rows and columns 1 and 10\n"
156
+ "#{@binary_matrix.bm.to_a.each{ |r| logger.info r.inspect } }"
157
+ logger.info "\n\nMatrix Index"
158
+ logger.info @binary_matrix.bmi.mi.to_a.map(&:inspect)
159
+ end
160
+ end
161
+
162
+ describe "#enter_cell_content" do
163
+ it "will enter a 1 into the selected matrix cell" do
164
+ @binary_matrix.bm = @binary_matrix.compress([1], [10])
165
+ @binary_matrix.bmi.mi = @binary_matrix.bmi.compress_index(1, 10)
166
+ @binary_matrix.enter_cell_content([1, [10]], [8], 1, @binary_matrix.bm)
167
+ puts "Enter 8 is north of 1\n"
168
+ puts @binary_matrix.bm.to_a.map(&:inspect)
169
+ puts "Matrix Index .. \n"
170
+ p @binary_matrix.bmi.mi.to_a.map(&:inspect)
171
+ logger.info "\nEnter 8 is north of 1\n"
172
+ "#{@binary_matrix.bm.to_a.each{ |r| logger.info r.inspect } }"
173
+ logger.info "\n\nMatrix Index"
174
+ logger.info @binary_matrix.bmi.mi.to_a.map(&:inspect)
175
+ end
176
+ end
177
+
178
+ describe "#swap_row_column" do
179
+ it "will swap selected rows and columns to create proper alignment" do
180
+ @binary_matrix.bm = @binary_matrix.compress([1], [10])
181
+ @binary_matrix.bmi.mi = @binary_matrix.bmi.compress_index(1, 10)
182
+ @binary_matrix.enter_cell_content([1, [10]], [8], 1, @binary_matrix.bm)
183
+ @binary_matrix.bm = @binary_matrix.swap_row_column([1, [10]], [8], @binary_matrix.bm, @binary_matrix.bmi.mi)
184
+ @binary_matrix.bmi.mi = @binary_matrix.swap_index([1, [10]], [8], @binary_matrix.bmi.mi)
185
+ puts "Swap rows and columns 1 and 8"
186
+ puts @binary_matrix.bm.to_a.map(&:inspect)
187
+ puts "Matrix Index .. \n"
188
+ p @binary_matrix.bmi.mi.to_a.map(&:inspect)
189
+ logger.info "\nSwap rows and columns 1 and 8\n"
190
+ "#{@binary_matrix.bm.to_a.each{ |r| logger.info r.inspect } }"
191
+ logger.info "\n\nMatrix Index"
192
+ logger.info @binary_matrix.bmi.mi.to_a.map(&:inspect)
193
+ end
194
+ end
195
+
196
+ describe "#enter_cell_content" do
197
+ it "will enter a 1 into the selected matrix cell" do
198
+ @binary_matrix.bm = @binary_matrix.compress([1], [10])
199
+ @binary_matrix.bmi.mi = @binary_matrix.bmi.compress_index(1, 10)
200
+ @binary_matrix.enter_cell_content([1, [10]], [8], 1, @binary_matrix.bm, @binary_matrix.bmi.mi)
201
+ @binary_matrix.bm = @binary_matrix.swap_row_column([1, [10]], [8], @binary_matrix.bm, @binary_matrix.bmi.mi)
202
+ @binary_matrix.bmi.mi = @binary_matrix.swap_index([1, [10]], [8], @binary_matrix.bmi.mi)
203
+ @binary_matrix.enter_cell_content([12], [8], 1, @binary_matrix.bm, @binary_matrix.bmi.mi)
204
+ puts "Enter 8 is north of 12"
205
+ puts @binary_matrix.bm.to_a.map(&:inspect)
206
+ puts "Matrix Index .. \n"
207
+ p @binary_matrix.bmi.mi.to_a.map(&:inspect)
208
+ logger.info "\nEnter 8 is north of 12\n"
209
+ "#{@binary_matrix.bm.to_a.each{ |r| logger.info r.inspect } }"
210
+ logger.info "\n\nMatrix Index"
211
+ logger.info @binary_matrix.bmi.mi.to_a.map(&:inspect)
212
+ end
213
+ end
214
+
215
+ describe "#enter_cell_content" do
216
+ it "will enter a 1 into the selected matrix cell" do
217
+ @binary_matrix.bm = @binary_matrix.compress([1], [10])
218
+ @binary_matrix.bmi.mi = @binary_matrix.bmi.compress_index(1, 10)
219
+ @binary_matrix.enter_cell_content([1, [10]], [8], 1, @binary_matrix.bm, @binary_matrix.bmi.mi)
220
+ @binary_matrix.bm = @binary_matrix.swap_row_column([1, [10]], [8], @binary_matrix.bm, @binary_matrix.bmi.mi)
221
+ @binary_matrix.bmi.mi = @binary_matrix.swap_index([1, [10]], [8], @binary_matrix.bmi.mi)
222
+ @binary_matrix.enter_cell_content([12], [8], 1, @binary_matrix.bm, @binary_matrix.bmi.mi)
223
+ @binary_matrix.enter_cell_content([12], [5], 1, @binary_matrix.bm, @binary_matrix.bmi.mi)
224
+ puts "Enter 5 is north of 12"
225
+ puts @binary_matrix.bm.to_a.map(&:inspect)
226
+ puts "Matrix Index .. \n"
227
+ p @binary_matrix.bmi.mi.to_a.map(&:inspect)
228
+ logger.info "\nEnter 5 is north of 12\n"
229
+ "#{@binary_matrix.bm.to_a.each{ |r| logger.info r.inspect } }"
230
+ logger.info "\n\nMatrix Index"
231
+ logger.info @binary_matrix.bmi.mi.to_a.map(&:inspect)
232
+ end
233
+ end
234
+
235
+ describe "#enter_cell_content" do
236
+ it "will enter a 1 into the selected matrix cell" do
237
+ @binary_matrix.bm = @binary_matrix.compress([1], [10])
238
+ @binary_matrix.bmi.mi = @binary_matrix.bmi.compress_index(1, 10)
239
+ @binary_matrix.enter_cell_content([1, [10]], [8], 1, @binary_matrix.bm, @binary_matrix.bmi.mi)
240
+ @binary_matrix.bm = @binary_matrix.swap_row_column([1, [10]], [8], @binary_matrix.bm, @binary_matrix.bmi.mi)
241
+ @binary_matrix.bmi.mi = @binary_matrix.swap_index([1, [10]], [8], @binary_matrix.bmi.mi)
242
+ @binary_matrix.enter_cell_content([12], [8], 1, @binary_matrix.bm, @binary_matrix.bmi.mi)
243
+ @binary_matrix.enter_cell_content([12], [5], 1, @binary_matrix.bm, @binary_matrix.bmi.mi)
244
+ @binary_matrix.enter_cell_content([3], [5], 1, @binary_matrix.bm, @binary_matrix.bmi.mi)
245
+ puts "Enter 5 is north of 3"
246
+ puts @binary_matrix.bm.to_a.map(&:inspect)
247
+ puts "Matrix Index .. \n"
248
+ p @binary_matrix.bmi.mi.to_a.map(&:inspect)
249
+ logger.info "\nEnter 5 is north of 3\n"
250
+ "#{@binary_matrix.bm.to_a.each{ |r| logger.info r.inspect } }"
251
+ logger.info "\n\nMatrix Index"
252
+ logger.info @binary_matrix.bmi.mi.to_a.map(&:inspect)
253
+ end
254
+ end
255
+
256
+ describe "#swap_row_column" do
257
+ it "will swap the selected rows and columns" do
258
+ @binary_matrix.bm = @binary_matrix.compress([1], [10])
259
+ @binary_matrix.bmi.mi = @binary_matrix.bmi.compress_index(1, 10)
260
+ @binary_matrix.enter_cell_content([1, [10]], [8], 1, @binary_matrix.bm, @binary_matrix.bmi.mi)
261
+ @binary_matrix.bm = @binary_matrix.swap_row_column([1, [10]], [8], @binary_matrix.bm, @binary_matrix.bmi.mi)
262
+ @binary_matrix.bmi.mi = @binary_matrix.swap_index([1, [10]], [8], @binary_matrix.bmi.mi)
263
+ @binary_matrix.enter_cell_content([12], [8], 1, @binary_matrix.bm, @binary_matrix.bmi.mi)
264
+ @binary_matrix.enter_cell_content([12], [5], 1, @binary_matrix.bm, @binary_matrix.bmi.mi)
265
+ @binary_matrix.enter_cell_content([3], [5], 1, @binary_matrix.bm, @binary_matrix.bmi.mi)
266
+ @binary_matrix.bm = @binary_matrix.swap_row_column([3], [5], @binary_matrix.bm, @binary_matrix.bmi.mi)
267
+ @binary_matrix.bmi.mi = @binary_matrix.swap_index([3], [5], @binary_matrix.bmi.mi)
268
+ puts "Swap row column 3 and 5"
269
+ puts @binary_matrix.bm.to_a.map(&:inspect)
270
+ puts "Matrix Index .. \n"
271
+ p @binary_matrix.bmi.mi.to_a.map(&:inspect)
272
+ logger.info "\nSwap row column 3 and 5\n"
273
+ "#{@binary_matrix.bm.to_a.each{ |r| logger.info r.inspect } }"
274
+ logger.info "\n\nMatrix Index"
275
+ logger.info @binary_matrix.bmi.mi.to_a.map(&:inspect)
276
+ end
277
+ end
278
+
279
+ def part_one
280
+ @binary_matrix.bm = @binary_matrix.compress([1], [10])
281
+ @binary_matrix.bmi.mi = @binary_matrix.bmi.compress_index(1, 10)
282
+ @binary_matrix.enter_cell_content([1, [10]], [8], 1, @binary_matrix.bm, @binary_matrix.bmi.mi)
283
+ @binary_matrix.bm = @binary_matrix.swap_row_column([1, [10]], [8], @binary_matrix.bm, @binary_matrix.bmi.mi)
284
+ @binary_matrix.bmi.mi = @binary_matrix.swap_index([1, [10]], [8], @binary_matrix.bmi.mi)
285
+ @binary_matrix.enter_cell_content([12], [8], 1, @binary_matrix.bm, @binary_matrix.bmi.mi)
286
+ @binary_matrix.enter_cell_content([12], [5], 1, @binary_matrix.bm, @binary_matrix.bmi.mi)
287
+ @binary_matrix.enter_cell_content([3], [5], 1, @binary_matrix.bm, @binary_matrix.bmi.mi)
288
+ @binary_matrix.bm = @binary_matrix.swap_row_column([3], [5], @binary_matrix.bm, @binary_matrix.bmi.mi)
289
+ @binary_matrix.bmi.mi = @binary_matrix.swap_index([3], [5], @binary_matrix.bmi.mi)
290
+ end
291
+
292
+
293
+ describe "#enter_cell_content" do
294
+ it "will place a one in the selected matrix cell" do
295
+ part_one
296
+ @binary_matrix.enter_cell_content([4], [3], 1, @binary_matrix.bm, @binary_matrix.bmi.mi)
297
+ puts "Enter 3 is north of 4"
298
+ puts @binary_matrix.bm.to_a.map(&:inspect)
299
+ puts "Matrix Index .. \n"
300
+ p @binary_matrix.bmi.mi.to_a.map(&:inspect)
301
+ logger.info "\nEnter 3 is north of 4\n"
302
+ "#{@binary_matrix.bm.to_a.each{ |r| logger.info r.inspect } }"
303
+ logger.info "\n\nMatrix Index"
304
+ logger.info @binary_matrix.bmi.mi.to_a.map(&:inspect)
305
+ end
306
+ end
307
+
308
+
309
+ describe "#swap_row_column" do
310
+ it "will swap the selected row and column" do
311
+ part_one
312
+ @binary_matrix.enter_cell_content([4], [3], 1, @binary_matrix.bm, @binary_matrix.bmi.mi)
313
+ @binary_matrix.bm = @binary_matrix.swap_row_column([4], [3], @binary_matrix.bm, @binary_matrix.bmi.mi)
314
+ @binary_matrix.bmi.mi = @binary_matrix.swap_index([4], [3], @binary_matrix.bmi.mi)
315
+ puts "Swap row column 4 and 3"
316
+ puts @binary_matrix.bm.to_a.map(&:inspect)
317
+ puts "Matrix Index .. \n"
318
+ p @binary_matrix.bmi.mi.to_a.map(&:inspect)
319
+ logger.info "\nSwap row column 4 and 3\n"
320
+ "#{@binary_matrix.bm.to_a.each{ |r| logger.info r.inspect } }"
321
+ logger.info "\n\nMatrix Index"
322
+ logger.info @binary_matrix.bmi.mi.to_a.map(&:inspect)
323
+ end
324
+ end
325
+
326
+
327
+ describe "#enter_cell_content" do
328
+ it "will enter a 1 into the selected matrix cell" do
329
+ part_one
330
+ @binary_matrix.enter_cell_content([4], [3], 1, @binary_matrix.bm, @binary_matrix.bmi.mi)
331
+ @binary_matrix.bm = @binary_matrix.swap_row_column([4], [3], @binary_matrix.bm, @binary_matrix.bmi.mi)
332
+ @binary_matrix.bmi.mi = @binary_matrix.swap_index([4], [3], @binary_matrix.bmi.mi)
333
+ @binary_matrix.enter_cell_content([4], [7], 1, @binary_matrix.bm, @binary_matrix.bmi.mi)
334
+ puts "Enter 7 is north of 4"
335
+ puts @binary_matrix.bm.to_a.map(&:inspect)
336
+ puts "Matrix Index .. \n"
337
+ p @binary_matrix.bmi.mi.to_a.map(&:inspect)
338
+ logger.info "\nEnter 7 is north of 4\n"
339
+ "#{@binary_matrix.bm.to_a.each{ |r| logger.info r.inspect } }"
340
+ logger.info "\n\nMatrix Index"
341
+ logger.info @binary_matrix.bmi.mi.to_a.map(&:inspect)
342
+ end
343
+ end
344
+
345
+ describe "#swap_row_column" do
346
+ it "will swap the selected rows and columns" do
347
+ part_one
348
+ @binary_matrix.enter_cell_content([4], [3], 1, @binary_matrix.bm, @binary_matrix.bmi.mi)
349
+ @binary_matrix.bm = @binary_matrix.swap_row_column([4], [3], @binary_matrix.bm, @binary_matrix.bmi.mi)
350
+ @binary_matrix.bmi.mi = @binary_matrix.swap_index([4], [3], @binary_matrix.bmi.mi)
351
+ @binary_matrix.enter_cell_content([4], [7], 1, @binary_matrix.bm, @binary_matrix.bmi.mi)
352
+ @binary_matrix.bm = @binary_matrix.swap_row_column([4], [7], @binary_matrix.bm, @binary_matrix.bmi.mi)
353
+ @binary_matrix.bmi.mi = @binary_matrix.swap_index([4], [7], @binary_matrix.bmi.mi)
354
+ puts "Swap rows and columns 4 and 7"
355
+ puts @binary_matrix.bm.to_a.map(&:inspect)
356
+ puts "Matrix Index .. \n"
357
+ p @binary_matrix.bmi.mi.to_a.map(&:inspect)
358
+ logger.info "\nSwap rows and columns 4 and 7\n"
359
+ "#{@binary_matrix.bm.to_a.each{ |r| logger.info r.inspect } }"
360
+ logger.info "\n\nMatrix Index"
361
+ logger.info @binary_matrix.bmi.mi.to_a.map(&:inspect)
362
+ end
363
+ end
364
+
365
+
366
+ describe "#enter_cell_content" do
367
+ it "will enter a 1 in the selected matrix cell" do
368
+ part_one
369
+ @binary_matrix.enter_cell_content([4], [3], 1, @binary_matrix.bm, @binary_matrix.bmi.mi)
370
+ @binary_matrix.bm = @binary_matrix.swap_row_column([4], [3], @binary_matrix.bm, @binary_matrix.bmi.mi)
371
+ @binary_matrix.bmi.mi = @binary_matrix.swap_index([4], [3], @binary_matrix.bmi.mi)
372
+ @binary_matrix.enter_cell_content([4], [7], 1, @binary_matrix.bm, @binary_matrix.bmi.mi)
373
+ @binary_matrix.bm = @binary_matrix.swap_row_column([4], [7], @binary_matrix.bm, @binary_matrix.bmi.mi)
374
+ @binary_matrix.bmi.mi = @binary_matrix.swap_index([4], [7], @binary_matrix.bmi.mi)
375
+ @binary_matrix.enter_cell_content([7], [11], 1, @binary_matrix.bm, @binary_matrix.bmi.mi)
376
+ puts "Enter 11 is north of 7"
377
+ puts @binary_matrix.bm.to_a.map(&:inspect)
378
+ puts "Matrix Index .. \n"
379
+ p @binary_matrix.bmi.mi.to_a.map(&:inspect)
380
+ logger.info "\nEnter 11 is north of 7\n"
381
+ "#{@binary_matrix.bm.to_a.each{ |r| logger.info r.inspect } }"
382
+ logger.info "\n\nMatrix Index"
383
+ logger.info @binary_matrix.bmi.mi.to_a.map(&:inspect)
384
+ end
385
+ end
386
+
387
+ describe "#swap_row_column" do
388
+ it "will swap the selected matrix cell" do
389
+ part_one
390
+ @binary_matrix.enter_cell_content([4], [3], 1, @binary_matrix.bm, @binary_matrix.bmi.mi)
391
+ @binary_matrix.bm = @binary_matrix.swap_row_column([4], [3], @binary_matrix.bm, @binary_matrix.bmi.mi)
392
+ @binary_matrix.bmi.mi = @binary_matrix.swap_index([4], [3], @binary_matrix.bmi.mi)
393
+ @binary_matrix.enter_cell_content([4], [7], 1, @binary_matrix.bm, @binary_matrix.bmi.mi)
394
+ @binary_matrix.bm = @binary_matrix.swap_row_column([4], [7], @binary_matrix.bm, @binary_matrix.bmi.mi)
395
+ @binary_matrix.bmi.mi = @binary_matrix.swap_index([4], [7], @binary_matrix.bmi.mi)
396
+ @binary_matrix.enter_cell_content([7], [11], 1, @binary_matrix.bm, @binary_matrix.bmi.mi)
397
+ @binary_matrix.bm = @binary_matrix.swap_row_column([7], [11], @binary_matrix.bm, @binary_matrix.bmi.mi)
398
+ @binary_matrix.bmi.mi = @binary_matrix.swap_index([7], [11], @binary_matrix.bmi.mi)
399
+ puts "Swap rows columns 11 and 7"
400
+ puts @binary_matrix.bm.to_a.map(&:inspect)
401
+ puts "Matrix Index .. \n"
402
+ p @binary_matrix.bmi.mi.to_a.map(&:inspect)
403
+ logger.info "\nSwap rows columns 11 and 7\n"
404
+ "#{@binary_matrix.bm.to_a.each{ |r| logger.info r.inspect } }"
405
+ logger.info "\n\nMatrix Index"
406
+ logger.info @binary_matrix.bmi.mi.to_a.map(&:inspect)
407
+ end
408
+ end
409
+
410
+ describe "#swap_row_column" do
411
+ it "will swap the selected matrix cell" do
412
+ part_one
413
+ @binary_matrix.enter_cell_content([4], [3], 1, @binary_matrix.bm, @binary_matrix.bmi.mi)
414
+ @binary_matrix.bm = @binary_matrix.swap_row_column([4], [3], @binary_matrix.bm, @binary_matrix.bmi.mi)
415
+ @binary_matrix.bmi.mi = @binary_matrix.swap_index([4], [3], @binary_matrix.bmi.mi)
416
+ @binary_matrix.enter_cell_content([4], [7], 1, @binary_matrix.bm, @binary_matrix.bmi.mi)
417
+ @binary_matrix.bm = @binary_matrix.swap_row_column([4], [7], @binary_matrix.bm, @binary_matrix.bmi.mi)
418
+ @binary_matrix.bmi.mi = @binary_matrix.swap_index([4], [7], @binary_matrix.bmi.mi)
419
+ @binary_matrix.enter_cell_content([7], [11], 1, @binary_matrix.bm, @binary_matrix.bmi.mi)
420
+ @binary_matrix.bm = @binary_matrix.swap_row_column([7], [11], @binary_matrix.bm, @binary_matrix.bmi.mi)
421
+ @binary_matrix.bmi.mi = @binary_matrix.swap_index([7], [11], @binary_matrix.bmi.mi)
422
+ @binary_matrix.bm = @binary_matrix.swap_row_column([4], [11], @binary_matrix.bm, @binary_matrix.bmi.mi)
423
+ @binary_matrix.bmi.mi = @binary_matrix.swap_index([4], [11], @binary_matrix.bmi.mi)
424
+ puts "Swap rows columns 11 and 4"
425
+ puts @binary_matrix.bm.to_a.map(&:inspect)
426
+ puts "Matrix Index .. \n"
427
+ p @binary_matrix.bmi.mi.to_a.map(&:inspect)
428
+ logger.info "\nSwap rows columns 11 and 4\n"
429
+ "#{@binary_matrix.bm.to_a.each{ |r| logger.info r.inspect } }"
430
+ logger.info "\n\nMatrix Index"
431
+ logger.info @binary_matrix.bmi.mi.to_a.map(&:inspect)
432
+ end
433
+ end
434
+
435
+ describe "#swap_row_column" do
436
+ it "will swap the selected matrix cell" do
437
+ part_one
438
+ @binary_matrix.enter_cell_content([4], [3], 1, @binary_matrix.bm, @binary_matrix.bmi.mi)
439
+ @binary_matrix.bm = @binary_matrix.swap_row_column([4], [3], @binary_matrix.bm, @binary_matrix.bmi.mi)
440
+ @binary_matrix.bmi.mi = @binary_matrix.swap_index([4], [3], @binary_matrix.bmi.mi)
441
+ @binary_matrix.enter_cell_content([4], [7], 1, @binary_matrix.bm, @binary_matrix.bmi.mi)
442
+ @binary_matrix.bm = @binary_matrix.swap_row_column([4], [7], @binary_matrix.bm, @binary_matrix.bmi.mi)
443
+ @binary_matrix.bmi.mi = @binary_matrix.swap_index([4], [7], @binary_matrix.bmi.mi)
444
+ @binary_matrix.enter_cell_content([7], [11], 1, @binary_matrix.bm, @binary_matrix.bmi.mi)
445
+ @binary_matrix.bm = @binary_matrix.swap_row_column([7], [11], @binary_matrix.bm, @binary_matrix.bmi.mi)
446
+ @binary_matrix.bmi.mi = @binary_matrix.swap_index([7], [11], @binary_matrix.bmi.mi)
447
+ @binary_matrix.bm = @binary_matrix.swap_row_column([4], [11], @binary_matrix.bm, @binary_matrix.bmi.mi)
448
+ @binary_matrix.bmi.mi = @binary_matrix.swap_index([4], [11], @binary_matrix.bmi.mi)
449
+ @binary_matrix.bm = @binary_matrix.swap_row_column([4], [7], @binary_matrix.bm, @binary_matrix.bmi.mi)
450
+ @binary_matrix.bmi.mi = @binary_matrix.swap_index([4], [7], @binary_matrix.bmi.mi)
451
+ puts "Swap rows columns 7 and 4"
452
+ puts @binary_matrix.bm.to_a.map(&:inspect)
453
+ puts "Matrix Index .. \n"
454
+ p @binary_matrix.bmi.mi.to_a.map(&:inspect)
455
+ logger.info "\nSwap rows columns 7 and 4\n"
456
+ "#{@binary_matrix.bm.to_a.each{ |r| logger.info r.inspect } }"
457
+ logger.info "\n\nMatrix Index"
458
+ logger.info @binary_matrix.bmi.mi.to_a.map(&:inspect)
459
+ end
460
+ end
461
+
462
+ describe "#swap_row_column" do
463
+ it "will swap the selected matrix cell" do
464
+ part_one
465
+ @binary_matrix.enter_cell_content([4], [3], 1, @binary_matrix.bm, @binary_matrix.bmi.mi)
466
+ @binary_matrix.bm = @binary_matrix.swap_row_column([4], [3], @binary_matrix.bm, @binary_matrix.bmi.mi)
467
+ @binary_matrix.bmi.mi = @binary_matrix.swap_index([4], [3], @binary_matrix.bmi.mi)
468
+ @binary_matrix.enter_cell_content([4], [7], 1, @binary_matrix.bm, @binary_matrix.bmi.mi)
469
+ @binary_matrix.bm = @binary_matrix.swap_row_column([4], [7], @binary_matrix.bm, @binary_matrix.bmi.mi)
470
+ @binary_matrix.bmi.mi = @binary_matrix.swap_index([4], [7], @binary_matrix.bmi.mi)
471
+ @binary_matrix.enter_cell_content([7], [11], 1, @binary_matrix.bm, @binary_matrix.bmi.mi)
472
+ @binary_matrix.bm = @binary_matrix.swap_row_column([7], [11], @binary_matrix.bm, @binary_matrix.bmi.mi)
473
+ @binary_matrix.bmi.mi = @binary_matrix.swap_index([7], [11], @binary_matrix.bmi.mi)
474
+ @binary_matrix.bm = @binary_matrix.swap_row_column([4], [11], @binary_matrix.bm, @binary_matrix.bmi.mi)
475
+ @binary_matrix.bmi.mi = @binary_matrix.swap_index([4], [11], @binary_matrix.bmi.mi)
476
+ @binary_matrix.bm = @binary_matrix.swap_row_column([4], [7], @binary_matrix.bm, @binary_matrix.bmi.mi)
477
+ @binary_matrix.bmi.mi = @binary_matrix.swap_index([4], [7], @binary_matrix.bmi.mi)
478
+ @binary_matrix.bm = @binary_matrix.swap_row_column([7], [11], @binary_matrix.bm, @binary_matrix.bmi.mi)
479
+ @binary_matrix.bmi.mi = @binary_matrix.swap_index([7], [11], @binary_matrix.bmi.mi)
480
+ puts "Swap rows columns 11 and 7"
481
+ puts @binary_matrix.bm.to_a.map(&:inspect)
482
+ puts "Matrix Index .. \n"
483
+ p @binary_matrix.bmi.mi.to_a.map(&:inspect)
484
+ logger.info "\nSwap rows columns 11 and 7\n"
485
+ "#{@binary_matrix.bm.to_a.each{ |r| logger.info r.inspect } }"
486
+ logger.info "\n\nMatrix Index"
487
+ logger.info @binary_matrix.bmi.mi.to_a.map(&:inspect)
488
+ end
489
+ end
490
+
491
+ def part_two
492
+ part_one
493
+ @binary_matrix.enter_cell_content([4], [3], 1, @binary_matrix.bm, @binary_matrix.bmi.mi)
494
+ @binary_matrix.bm = @binary_matrix.swap_row_column([4], [3], @binary_matrix.bm, @binary_matrix.bmi.mi)
495
+ @binary_matrix.bmi.mi = @binary_matrix.swap_index([4], [3], @binary_matrix.bmi.mi)
496
+ @binary_matrix.enter_cell_content([4], [7], 1, @binary_matrix.bm, @binary_matrix.bmi.mi)
497
+ @binary_matrix.bm = @binary_matrix.swap_row_column([4], [7], @binary_matrix.bm, @binary_matrix.bmi.mi)
498
+ @binary_matrix.bmi.mi = @binary_matrix.swap_index([4], [7], @binary_matrix.bmi.mi)
499
+ @binary_matrix.enter_cell_content([7], [11], 1, @binary_matrix.bm, @binary_matrix.bmi.mi)
500
+ @binary_matrix.bm = @binary_matrix.swap_row_column([7], [11], @binary_matrix.bm, @binary_matrix.bmi.mi)
501
+ @binary_matrix.bmi.mi = @binary_matrix.swap_index([7], [11], @binary_matrix.bmi.mi)
502
+ @binary_matrix.bm = @binary_matrix.swap_row_column([4], [11], @binary_matrix.bm, @binary_matrix.bmi.mi)
503
+ @binary_matrix.bmi.mi = @binary_matrix.swap_index([4], [11], @binary_matrix.bmi.mi)
504
+ @binary_matrix.bm = @binary_matrix.swap_row_column([4], [7], @binary_matrix.bm, @binary_matrix.bmi.mi)
505
+ @binary_matrix.bmi.mi = @binary_matrix.swap_index([4], [7], @binary_matrix.bmi.mi)
506
+ @binary_matrix.bm = @binary_matrix.swap_row_column([7], [11], @binary_matrix.bm, @binary_matrix.bmi.mi)
507
+ @binary_matrix.bmi.mi = @binary_matrix.swap_index([7], [11], @binary_matrix.bmi.mi)
508
+ end
509
+
510
+
511
+ describe "#enter_cell_content" do
512
+ it "will enter a 1 in the selected matrix cell" do
513
+ part_two
514
+ @binary_matrix.enter_cell_content([6], [11], 1, @binary_matrix.bm, @binary_matrix.bmi.mi)
515
+ @binary_matrix.bm = @binary_matrix.reachability_matrix(@binary_matrix.bm) # infer data
516
+ @binary_matrix.bm = @binary_matrix.subtract_id_matrix(@binary_matrix.bm)
517
+ puts "Enter 11 is north of 6"
518
+ puts @binary_matrix.bm.to_a.map(&:inspect)
519
+ puts "Matrix Index .. \n"
520
+ p @binary_matrix.bmi.mi.to_a.map(&:inspect)
521
+ logger.info "\nEnter 11 is north of 6\n"
522
+ "#{@binary_matrix.bm.to_a.each{ |r| logger.info r.inspect } }"
523
+ logger.info "\n\nMatrix Index"
524
+ logger.info @binary_matrix.bmi.mi.to_a.map(&:inspect)
525
+ end
526
+ end
527
+
528
+ describe "#enter_cell_content" do
529
+ it "will enter a 1 in the selected matrix cell" do
530
+ part_two
531
+ @binary_matrix.enter_cell_content([6], [11], 1, @binary_matrix.bm, @binary_matrix.bmi.mi)
532
+ @binary_matrix.bm = @binary_matrix.reachability_matrix(@binary_matrix.bm) # infer data
533
+ @binary_matrix.bm = @binary_matrix.subtract_id_matrix(@binary_matrix.bm)
534
+ @binary_matrix.enter_cell_content([6], [9], 1, @binary_matrix.bm, @binary_matrix.bmi.mi)
535
+ @binary_matrix.bm = @binary_matrix.swap_row_column([6], [9], @binary_matrix.bm, @binary_matrix.bmi.mi)
536
+ @binary_matrix.bmi.mi = @binary_matrix.swap_index([6], [9], @binary_matrix.bmi.mi)
537
+ @binary_matrix.bm = @binary_matrix.reachability_matrix(@binary_matrix.bm) # infer data
538
+ @binary_matrix.bm = @binary_matrix.subtract_id_matrix(@binary_matrix.bm)
539
+ puts "Enter 9 is north of 6"
540
+ puts @binary_matrix.bm.to_a.map(&:inspect)
541
+ puts "Matrix Index .. \n"
542
+ p @binary_matrix.bmi.mi.to_a.map(&:inspect)
543
+ logger.info "\nEnter 9 is north of 6\n"
544
+ "#{@binary_matrix.bm.to_a.each{ |r| logger.info r.inspect } }"
545
+ logger.info "\n\nMatrix Index"
546
+ logger.info @binary_matrix.bmi.mi.to_a.map(&:inspect)
547
+ end
548
+ end
549
+
550
+ describe "#enter_cell_content" do
551
+ it "will enter a 1 in the selected matrix cell" do
552
+ part_two
553
+ @binary_matrix.enter_cell_content([6], [11], 1, @binary_matrix.bm, @binary_matrix.bmi.mi)
554
+ @binary_matrix.bm = @binary_matrix.reachability_matrix(@binary_matrix.bm) # infer data
555
+ @binary_matrix.bm = @binary_matrix.subtract_id_matrix(@binary_matrix.bm)
556
+ @binary_matrix.enter_cell_content([6], [9], 1, @binary_matrix.bm, @binary_matrix.bmi.mi)
557
+ @binary_matrix.bm = @binary_matrix.swap_row_column([6], [9], @binary_matrix.bm, @binary_matrix.bmi.mi)
558
+ @binary_matrix.bmi.mi = @binary_matrix.swap_index([6], [9], @binary_matrix.bmi.mi)
559
+ @binary_matrix.bm = @binary_matrix.reachability_matrix(@binary_matrix.bm) # infer data
560
+ @binary_matrix.bm = @binary_matrix.subtract_id_matrix(@binary_matrix.bm)
561
+ @binary_matrix.enter_cell_content([9], [2], 1, @binary_matrix.bm, @binary_matrix.bmi.mi)
562
+ @binary_matrix.bm = @binary_matrix.reachability_matrix(@binary_matrix.bm) # infer data
563
+ @binary_matrix.bm = @binary_matrix.subtract_id_matrix(@binary_matrix.bm)
564
+ puts "Enter 2 is north of 9"
565
+ puts @binary_matrix.bm.to_a.map(&:inspect)
566
+ puts "Matrix Index .. \n"
567
+ p @binary_matrix.bmi.mi.to_a.map(&:inspect)
568
+ logger.info "\nEnter 2 is north of 9\n"
569
+ "#{@binary_matrix.bm.to_a.each{ |r| logger.info r.inspect } }"
570
+ logger.info "\n\nMatrix Index"
571
+ logger.info @binary_matrix.bmi.mi.to_a.map(&:inspect)
572
+ end
573
+ end
574
+
575
+ def part_three
576
+ part_two
577
+ @binary_matrix.enter_cell_content([6], [11], 1, @binary_matrix.bm, @binary_matrix.bmi.mi)
578
+ @binary_matrix.bm = @binary_matrix.reachability_matrix(@binary_matrix.bm) # infer data
579
+ @binary_matrix.bm = @binary_matrix.subtract_id_matrix(@binary_matrix.bm)
580
+ @binary_matrix.enter_cell_content([6], [9], 1, @binary_matrix.bm, @binary_matrix.bmi.mi)
581
+ @binary_matrix.bm = @binary_matrix.swap_row_column([6], [9], @binary_matrix.bm, @binary_matrix.bmi.mi)
582
+ @binary_matrix.bmi.mi = @binary_matrix.swap_index([6], [9], @binary_matrix.bmi.mi)
583
+ @binary_matrix.bm = @binary_matrix.reachability_matrix(@binary_matrix.bm) # infer data
584
+ @binary_matrix.bm = @binary_matrix.subtract_id_matrix(@binary_matrix.bm)
585
+ @binary_matrix.enter_cell_content([9], [2], 1, @binary_matrix.bm, @binary_matrix.bmi.mi)
586
+ @binary_matrix.bm = @binary_matrix.reachability_matrix(@binary_matrix.bm) # infer data
587
+ @binary_matrix.bm = @binary_matrix.subtract_id_matrix(@binary_matrix.bm)
588
+ end
589
+
590
+ describe "#enter_cell_content" do
591
+ it "will enter a 1 in the selected matrix cell" do
592
+ part_three
593
+ @binary_matrix.enter_cell_content([2], [8], 1, @binary_matrix.bm, @binary_matrix.bmi.mi)
594
+ @binary_matrix.bm = @binary_matrix.reachability_matrix(@binary_matrix.bm) # infer data
595
+ @binary_matrix.bm = @binary_matrix.subtract_id_matrix(@binary_matrix.bm)
596
+ puts "Enter 2 is north of 8"
597
+ puts @binary_matrix.bm.to_a.map(&:inspect)
598
+ puts "Matrix Index .. \n"
599
+ p @binary_matrix.bmi.mi.to_a.map(&:inspect)
600
+ logger.info "\nEnter 2 is north of 8\n"
601
+ "#{@binary_matrix.bm.to_a.each{ |r| logger.info r.inspect } }"
602
+ logger.info "\n\nMatrix Index"
603
+ logger.info @binary_matrix.bmi.mi.to_a.map(&:inspect)
604
+ end
605
+ end
606
+
607
+ describe "#enter_cell_content" do
608
+ it "will enter a 1 in the selected matrix cell" do
609
+ part_three
610
+ @binary_matrix.enter_cell_content([2], [8], 1, @binary_matrix.bm, @binary_matrix.bmi.mi)
611
+ @binary_matrix.bm = @binary_matrix.reachability_matrix(@binary_matrix.bm) # infer data
612
+ @binary_matrix.bm = @binary_matrix.subtract_id_matrix(@binary_matrix.bm)
613
+ @binary_matrix.enter_cell_content([5], [2], 1, @binary_matrix.bm, @binary_matrix.bmi.mi)
614
+ @binary_matrix.bm = @binary_matrix.reachability_matrix(@binary_matrix.bm) # infer data
615
+ @binary_matrix.bm = @binary_matrix.subtract_id_matrix(@binary_matrix.bm)
616
+ puts "Enter 2 is north of 5"
617
+ puts @binary_matrix.bm.to_a.map(&:inspect)
618
+ puts "Matrix Index .. \n"
619
+ p @binary_matrix.bmi.mi.to_a.map(&:inspect)
620
+ logger.info "\nEnter 2 is north of 5\n"
621
+ "#{@binary_matrix.bm.to_a.each{ |r| logger.info r.inspect } }"
622
+ logger.info "\n\nMatrix Index"
623
+ logger.info @binary_matrix.bmi.mi.to_a.map(&:inspect)
624
+ end
625
+ end
626
+
627
+ describe "#compress" do
628
+ it "will compress row columns 5 and 11 into row columns 5" do
629
+ part_three
630
+ @binary_matrix.enter_cell_content([2], [8], 1, @binary_matrix.bm, @binary_matrix.bmi.mi)
631
+ @binary_matrix.bm = @binary_matrix.reachability_matrix(@binary_matrix.bm) # infer data
632
+ @binary_matrix.bm = @binary_matrix.subtract_id_matrix(@binary_matrix.bm)
633
+ @binary_matrix.enter_cell_content([5], [2], 1, @binary_matrix.bm, @binary_matrix.bmi.mi)
634
+ @binary_matrix.bm = @binary_matrix.reachability_matrix(@binary_matrix.bm) # infer data
635
+ @binary_matrix.bm = @binary_matrix.subtract_id_matrix(@binary_matrix.bm)
636
+ @binary_matrix.bm = @binary_matrix.compress([5], [11])
637
+ @binary_matrix.bmi.mi = @binary_matrix.bmi.compress_index(5, 11)
638
+ @binary_matrix.bm = @binary_matrix.reachability_matrix(@binary_matrix.bm) # infer data
639
+ @binary_matrix.bm = @binary_matrix.subtract_id_matrix(@binary_matrix.bm)
640
+ puts "Compress 5 and 11 into 5"
641
+ puts @binary_matrix.bm.to_a.map(&:inspect)
642
+ puts "Matrix Index .. \n"
643
+ p @binary_matrix.bmi.mi.to_a.map(&:inspect)
644
+ logger.info "\nCompress 5 and 11 into 5\n"
645
+ "#{@binary_matrix.bm.to_a.each{ |r| logger.info r.inspect } }"
646
+ logger.info "\n\nMatrix Index"
647
+ logger.info @binary_matrix.bmi.mi.to_a.map(&:inspect)
648
+ end
649
+ end
650
+
651
+ describe "#enter_cell_content" do
652
+ it "will enter a 1 into the selected matrix cell" do
653
+ part_three
654
+ @binary_matrix.enter_cell_content([2], [8], 1, @binary_matrix.bm, @binary_matrix.bmi.mi)
655
+ @binary_matrix.bm = @binary_matrix.reachability_matrix(@binary_matrix.bm) # infer data
656
+ @binary_matrix.bm = @binary_matrix.subtract_id_matrix(@binary_matrix.bm)
657
+ @binary_matrix.enter_cell_content([5], [2], 1, @binary_matrix.bm, @binary_matrix.bmi.mi)
658
+ @binary_matrix.bm = @binary_matrix.reachability_matrix(@binary_matrix.bm) # infer data
659
+ @binary_matrix.bm = @binary_matrix.subtract_id_matrix(@binary_matrix.bm)
660
+ @binary_matrix.bm = @binary_matrix.compress([5], [11])
661
+ @binary_matrix.bmi.mi = @binary_matrix.bmi.compress_index(5, 11)
662
+ @binary_matrix.bm = @binary_matrix.reachability_matrix(@binary_matrix.bm) # infer data
663
+ @binary_matrix.bm = @binary_matrix.subtract_id_matrix(@binary_matrix.bm)
664
+ @binary_matrix.enter_cell_content([1, [10]], [2], 1, @binary_matrix.bm, @binary_matrix.bmi.mi)
665
+ @binary_matrix.bm = @binary_matrix.reachability_matrix(@binary_matrix.bm) # infer data
666
+ @binary_matrix.bm = @binary_matrix.subtract_id_matrix(@binary_matrix.bm)
667
+ puts "Enter 2 is north of 1-10"
668
+ puts @binary_matrix.bm.to_a.map(&:inspect)
669
+ puts "Matrix Index .. \n"
670
+ p @binary_matrix.bmi.mi.to_a.map(&:inspect)
671
+ logger.info "\nEnter 2 is north of 1-10\n"
672
+ "#{@binary_matrix.bm.to_a.each{ |r| logger.info r.inspect } }"
673
+ logger.info "\n\nMatrix Index"
674
+ logger.info @binary_matrix.bmi.mi.to_a.map(&:inspect)
675
+ end
676
+ end
677
+
678
+ def part_four
679
+ part_three
680
+ @binary_matrix.enter_cell_content([2], [8], 1, @binary_matrix.bm, @binary_matrix.bmi.mi)
681
+ @binary_matrix.bm = @binary_matrix.reachability_matrix(@binary_matrix.bm) # infer data
682
+ @binary_matrix.bm = @binary_matrix.subtract_id_matrix(@binary_matrix.bm)
683
+ @binary_matrix.enter_cell_content([5], [2], 1, @binary_matrix.bm, @binary_matrix.bmi.mi)
684
+ @binary_matrix.bm = @binary_matrix.reachability_matrix(@binary_matrix.bm) # infer data
685
+ @binary_matrix.bm = @binary_matrix.subtract_id_matrix(@binary_matrix.bm)
686
+ @binary_matrix.bm = @binary_matrix.compress([5], [11])
687
+ @binary_matrix.bmi.mi = @binary_matrix.bmi.compress_index(5, 11)
688
+ @binary_matrix.bm = @binary_matrix.reachability_matrix(@binary_matrix.bm) # infer data
689
+ @binary_matrix.bm = @binary_matrix.subtract_id_matrix(@binary_matrix.bm)
690
+ @binary_matrix.enter_cell_content([1, [10]], [2], 1, @binary_matrix.bm, @binary_matrix.bmi.mi)
691
+ @binary_matrix.bm = @binary_matrix.reachability_matrix(@binary_matrix.bm) # infer data
692
+ @binary_matrix.bm = @binary_matrix.subtract_id_matrix(@binary_matrix.bm)
693
+ end
694
+
695
+ describe "#enter_cell_content" do
696
+ it "will enter a 1 into the selected matrix cell" do
697
+ part_four
698
+ @binary_matrix.enter_cell_content([9], [3], 1, @binary_matrix.bm, @binary_matrix.bmi.mi)
699
+ @binary_matrix.bm = @binary_matrix.reachability_matrix(@binary_matrix.bm) # infer data
700
+ @binary_matrix.bm = @binary_matrix.subtract_id_matrix(@binary_matrix.bm)
701
+ puts "Enter 3 is north of 9"
702
+ puts @binary_matrix.bm.to_a.map(&:inspect)
703
+ puts "Matrix Index .. \n"
704
+ p @binary_matrix.bmi.mi.to_a.map(&:inspect)
705
+ logger.info "\nEnter 3 is north of 9\n"
706
+ "#{@binary_matrix.bm.to_a.each{ |r| logger.info r.inspect } }"
707
+ logger.info "\n\nMatrix Index"
708
+ logger.info @binary_matrix.bmi.mi.to_a.map(&:inspect)
709
+ end
710
+ end
711
+
712
+ describe "#enter_cell_content" do
713
+ it "will enter a 1 into the selected matrix cell" do
714
+ part_four
715
+ @binary_matrix.enter_cell_content([9], [3], 1, @binary_matrix.bm, @binary_matrix.bmi.mi)
716
+ @binary_matrix.bm = @binary_matrix.reachability_matrix(@binary_matrix.bm) # infer data
717
+ @binary_matrix.bm = @binary_matrix.subtract_id_matrix(@binary_matrix.bm)
718
+ @binary_matrix.enter_cell_content([7], [3], 1, @binary_matrix.bm, @binary_matrix.bmi.mi)
719
+ puts "Enter 3 is north of 7"
720
+ puts @binary_matrix.bm.to_a.map(&:inspect)
721
+ puts "Matrix Index .. \n"
722
+ p @binary_matrix.bmi.mi.to_a.map(&:inspect)
723
+ logger.info "\nEnter 3 is north of 7\n"
724
+ "#{@binary_matrix.bm.to_a.each{ |r| logger.info r.inspect } }"
725
+ logger.info "\n\nMatrix Index"
726
+ logger.info @binary_matrix.bmi.mi.to_a.map(&:inspect)
727
+ end
728
+ end
729
+
730
+ describe "#enter_cell_content" do
731
+ it "will enter a 1 into the selected matrix cell" do
732
+ part_four
733
+ @binary_matrix.enter_cell_content([9], [3], 1, @binary_matrix.bm, @binary_matrix.bmi.mi)
734
+ @binary_matrix.bm = @binary_matrix.reachability_matrix(@binary_matrix.bm) # infer data
735
+ @binary_matrix.bm = @binary_matrix.subtract_id_matrix(@binary_matrix.bm)
736
+ @binary_matrix.enter_cell_content([7], [3], 1, @binary_matrix.bm, @binary_matrix.bmi.mi)
737
+ @binary_matrix.enter_cell_content([7], [9], 1, @binary_matrix.bm, @binary_matrix.bmi.mi)
738
+ puts "Enter 9 is north of 7"
739
+ puts @binary_matrix.bm.to_a.map(&:inspect)
740
+ puts "Matrix Index .. \n"
741
+ p @binary_matrix.bmi.mi.to_a.map(&:inspect)
742
+ logger.info "\nEnter 9 is north of 7\n"
743
+ "#{@binary_matrix.bm.to_a.each{ |r| logger.info r.inspect } }"
744
+ logger.info "\n\nMatrix Index"
745
+ logger.info @binary_matrix.bmi.mi.to_a.map(&:inspect)
746
+ end
747
+ end
748
+
749
+ describe "#compress" do
750
+ it "will compress row columns 3 and 6 into 3" do
751
+ part_four
752
+ @binary_matrix.enter_cell_content([9], [3], 1, @binary_matrix.bm, @binary_matrix.bmi.mi)
753
+ @binary_matrix.bm = @binary_matrix.reachability_matrix(@binary_matrix.bm) # infer data
754
+ @binary_matrix.bm = @binary_matrix.subtract_id_matrix(@binary_matrix.bm)
755
+ @binary_matrix.enter_cell_content([7], [3], 1, @binary_matrix.bm, @binary_matrix.bmi.mi)
756
+ @binary_matrix.enter_cell_content([7], [9], 1, @binary_matrix.bm, @binary_matrix.bmi.mi)
757
+ @binary_matrix.bm = @binary_matrix.compress([3], [6])
758
+ @binary_matrix.bmi.mi = @binary_matrix.bmi.compress_index(3, 6)
759
+ puts "Compress 3 and 6 into 3"
760
+ puts @binary_matrix.bm.to_a.map(&:inspect)
761
+ puts "Matrix Index .. \n"
762
+ p @binary_matrix.bmi.mi.to_a.map(&:inspect)
763
+ logger.info "\nCompress 3 and 6b into 3\n"
764
+ "#{@binary_matrix.bm.to_a.each{ |r| logger.info r.inspect } }"
765
+ logger.info "\n\nMatrix Index"
766
+ logger.info @binary_matrix.bmi.mi.to_a.map(&:inspect)
767
+ end
768
+ end
769
+
770
+ describe "#swap_row_column" do
771
+ it "will swap_row_column 1-10 and 3-6 " do
772
+ part_four
773
+ @binary_matrix.enter_cell_content([9], [3], 1, @binary_matrix.bm, @binary_matrix.bmi.mi)
774
+ @binary_matrix.bm = @binary_matrix.reachability_matrix(@binary_matrix.bm) # infer data
775
+ @binary_matrix.bm = @binary_matrix.subtract_id_matrix(@binary_matrix.bm)
776
+ @binary_matrix.enter_cell_content([7], [3], 1, @binary_matrix.bm, @binary_matrix.bmi.mi)
777
+ @binary_matrix.enter_cell_content([7], [9], 1, @binary_matrix.bm, @binary_matrix.bmi.mi)
778
+ @binary_matrix.bm = @binary_matrix.compress([3], [6])
779
+ @binary_matrix.bmi.mi = @binary_matrix.bmi.compress_index(3, 6)
780
+ @binary_matrix.bm = @binary_matrix.swap_row_column([1, [10]], [3, [6]], @binary_matrix.bm, @binary_matrix.bmi.mi)
781
+ @binary_matrix.bmi.mi = @binary_matrix.swap_index([1, [10]], [3, [6]], @binary_matrix.bmi.mi)
782
+ puts "Swap rows columns 1-10 and 3-6"
783
+ puts @binary_matrix.bm.to_a.map(&:inspect)
784
+ puts "Matrix Index .. \n"
785
+ p @binary_matrix.bmi.mi.to_a.map(&:inspect)
786
+ logger.info "\nCompress 3 and 6b into 3\n"
787
+ "#{@binary_matrix.bm.to_a.each{ |r| logger.info r.inspect } }"
788
+ logger.info "\n\nMatrix Index"
789
+ logger.info @binary_matrix.bmi.mi.to_a.map(&:inspect)
790
+ end
791
+ end
792
+
793
+ describe "#enter_cell_content" do
794
+ it "will enter a 1 in the selected matrix cell" do
795
+ part_four
796
+ @binary_matrix.enter_cell_content([9], [3], 1, @binary_matrix.bm, @binary_matrix.bmi.mi)
797
+ @binary_matrix.bm = @binary_matrix.reachability_matrix(@binary_matrix.bm) # infer data
798
+ @binary_matrix.bm = @binary_matrix.subtract_id_matrix(@binary_matrix.bm)
799
+ @binary_matrix.enter_cell_content([7], [3], 1, @binary_matrix.bm, @binary_matrix.bmi.mi)
800
+ @binary_matrix.enter_cell_content([7], [9], 1, @binary_matrix.bm, @binary_matrix.bmi.mi)
801
+ @binary_matrix.bm = @binary_matrix.compress([3], [6])
802
+ @binary_matrix.bmi.mi = @binary_matrix.bmi.compress_index(3, 6)
803
+ @binary_matrix.bm = @binary_matrix.swap_row_column([1, [10]], [3, [6]], @binary_matrix.bm, @binary_matrix.bmi.mi)
804
+ @binary_matrix.bmi.mi = @binary_matrix.swap_index([1, [10]], [3, [6]], @binary_matrix.bmi.mi)
805
+ @binary_matrix.enter_cell_content([9], [3, [6]], 1, @binary_matrix.bm, @binary_matrix.bmi.mi)
806
+ puts "Enter 3-6 is north of 9"
807
+ puts @binary_matrix.bm.to_a.map(&:inspect)
808
+ puts "Matrix Index .. \n"
809
+ p @binary_matrix.bmi.mi.to_a.map(&:inspect)
810
+ logger.info "\nEnter 3-6 is north of 9\n"
811
+ "#{@binary_matrix.bm.to_a.each{ |r| logger.info r.inspect } }"
812
+ logger.info "\n\nMatrix Index"
813
+ logger.info @binary_matrix.bmi.mi.to_a.map(&:inspect)
814
+ end
815
+ end
816
+
817
+ describe "#swap_row_column" do
818
+ it "will swap rows and column 3-6 and 9" do
819
+ part_four
820
+ @binary_matrix.enter_cell_content([9], [3], 1, @binary_matrix.bm, @binary_matrix.bmi.mi)
821
+ @binary_matrix.bm = @binary_matrix.reachability_matrix(@binary_matrix.bm) # infer data
822
+ @binary_matrix.bm = @binary_matrix.subtract_id_matrix(@binary_matrix.bm)
823
+ @binary_matrix.enter_cell_content([7], [3], 1, @binary_matrix.bm, @binary_matrix.bmi.mi)
824
+ @binary_matrix.enter_cell_content([7], [9], 1, @binary_matrix.bm, @binary_matrix.bmi.mi)
825
+ @binary_matrix.bm = @binary_matrix.compress([3], [6])
826
+ @binary_matrix.bmi.mi = @binary_matrix.bmi.compress_index(3, 6)
827
+ @binary_matrix.bm = @binary_matrix.swap_row_column([1, [10]], [3, [6]], @binary_matrix.bm, @binary_matrix.bmi.mi)
828
+ @binary_matrix.bmi.mi = @binary_matrix.swap_index([1, [10]], [3, [6]], @binary_matrix.bmi.mi)
829
+ @binary_matrix.enter_cell_content([9], [3, [6]], 1, @binary_matrix.bm, @binary_matrix.bmi.mi)
830
+ @binary_matrix.bm = @binary_matrix.swap_row_column([9], [3, [6]], @binary_matrix.bm, @binary_matrix.bmi.mi)
831
+ @binary_matrix.bmi.mi = @binary_matrix.swap_index([9], [3, [6]], @binary_matrix.bmi.mi)
832
+ puts "Enter 3-6 is north of 9"
833
+ puts @binary_matrix.bm.to_a.map(&:inspect)
834
+ puts "Matrix Index .. \n"
835
+ p @binary_matrix.bmi.mi.to_a.map(&:inspect)
836
+ logger.info "\nEnter 3-6 is north of 9\n"
837
+ "#{@binary_matrix.bm.to_a.each{ |r| logger.info r.inspect } }"
838
+ logger.info "\n\nMatrix Index"
839
+ logger.info @binary_matrix.bmi.mi.to_a.map(&:inspect)
840
+ end
841
+ end
842
+
843
+ def part_five
844
+ part_four
845
+ @binary_matrix.enter_cell_content([9], [3], 1, @binary_matrix.bm, @binary_matrix.bmi.mi)
846
+ @binary_matrix.bm = @binary_matrix.reachability_matrix(@binary_matrix.bm) # infer data
847
+ @binary_matrix.bm = @binary_matrix.subtract_id_matrix(@binary_matrix.bm)
848
+ @binary_matrix.enter_cell_content([7], [3], 1, @binary_matrix.bm, @binary_matrix.bmi.mi)
849
+ @binary_matrix.enter_cell_content([7], [9], 1, @binary_matrix.bm, @binary_matrix.bmi.mi)
850
+ @binary_matrix.bm = @binary_matrix.compress([3], [6])
851
+ @binary_matrix.bmi.mi = @binary_matrix.bmi.compress_index(3, 6)
852
+ @binary_matrix.bm = @binary_matrix.swap_row_column([1, [10]], [3, [6]], @binary_matrix.bm, @binary_matrix.bmi.mi)
853
+ @binary_matrix.bmi.mi = @binary_matrix.swap_index([1, [10]], [3, [6]], @binary_matrix.bmi.mi)
854
+ @binary_matrix.enter_cell_content([9], [3, [6]], 1, @binary_matrix.bm, @binary_matrix.bmi.mi)
855
+ @binary_matrix.bm = @binary_matrix.swap_row_column([9], [3, [6]], @binary_matrix.bm, @binary_matrix.bmi.mi)
856
+ @binary_matrix.bmi.mi = @binary_matrix.swap_index([9], [3, [6]], @binary_matrix.bmi.mi)
857
+ end
858
+
859
+ describe "#compress" do
860
+ it "will compress rows and columns 9 and 12" do
861
+ part_five
862
+ @binary_matrix.bm = @binary_matrix.compress([9], [12])
863
+ @binary_matrix.bmi.mi = @binary_matrix.bmi.compress_index(9, 12)
864
+ puts "Compress row and columns 9 and 12"
865
+ puts @binary_matrix.bm.to_a.map(&:inspect)
866
+ puts "Matrix Index .. \n"
867
+ p @binary_matrix.bmi.mi.to_a.map(&:inspect)
868
+ logger.info "\nCompress rows and columns 9 and 12\n"
869
+ "#{@binary_matrix.bm.to_a.each{ |r| logger.info r.inspect } }"
870
+ logger.info "\n\nMatrix Index"
871
+ logger.info @binary_matrix.bmi.mi.to_a.map(&:inspect)
872
+ end
873
+ end
874
+
875
+ describe "#enter_cell_content" do
876
+ it "will enter a 1 in the selected matrix cell" do
877
+ part_five
878
+ @binary_matrix.bm = @binary_matrix.compress([9], [12])
879
+ @binary_matrix.bmi.mi = @binary_matrix.bmi.compress_index(9, 12)
880
+ @binary_matrix.enter_cell_content([7], [9, [12]], 1, @binary_matrix.bm, @binary_matrix.bmi.mi)
881
+ @binary_matrix.bm = @binary_matrix.swap_row_column([7], [9, [12]], @binary_matrix.bm, @binary_matrix.bmi.mi)
882
+ @binary_matrix.bmi.mi = @binary_matrix.swap_index([7], [9, [12]], @binary_matrix.bmi.mi)
883
+ puts "Enter 9-12 north of 7"
884
+ puts @binary_matrix.bm.to_a.map(&:inspect)
885
+ puts "Matrix Index .. \n"
886
+ p @binary_matrix.bmi.mi.to_a.map(&:inspect)
887
+ logger.info "\nEnter 9-12 north of 7\n"
888
+ "#{@binary_matrix.bm.to_a.each{ |r| logger.info r.inspect } }"
889
+ logger.info "\n\nMatrix Index"
890
+ logger.info @binary_matrix.bmi.mi.to_a.map(&:inspect)
891
+ end
892
+ end
893
+
894
+
895
+ end