binary_matrix 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.
@@ -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