Class: RMathGuard::Digit
- Inherits:
-
Array
- Object
- Array
- RMathGuard::Digit
- Defined in:
- lib/rmathguard/digit.rb
Constant Summary collapse
- PATTERN =
('A'..'Z').to_a + (1..9).to_a
Class Method Summary collapse
Instance Method Summary collapse
- #build(&blk) ⇒ Object
- #column(position, range) ⇒ Object
- #copy(digit) ⇒ Object
- #full_column(position) ⇒ Object
- #full_row(position) ⇒ Object
- #half_column(position) ⇒ Object
-
#initialize(rows, columns) ⇒ Digit
constructor
A new instance of Digit.
- #masked ⇒ Object
- #middle ⇒ Object
- #middle_column ⇒ Object
Constructor Details
#initialize(rows, columns) ⇒ Digit
Returns a new instance of Digit.
5 6 7 |
# File 'lib/rmathguard/digit.rb', line 5 def initialize(rows, columns) super(rows) { Array.new(columns, 0) } end |
Class Method Details
.build(rows = 5, columns = 3, &blk) ⇒ Object
9 10 11 12 13 |
# File 'lib/rmathguard/digit.rb', line 9 def self.build(rows = 5, columns = 3, &blk) digit = Digit.new(rows, columns) digit.instance_eval(&blk) digit end |
Instance Method Details
#build(&blk) ⇒ Object
15 16 17 18 19 20 |
# File 'lib/rmathguard/digit.rb', line 15 def build(&blk) digit = Digit.new(self.size, self.first.size) digit.copy(self) digit.instance_eval(&blk) digit end |
#column(position, range) ⇒ Object
83 84 85 86 87 |
# File 'lib/rmathguard/digit.rb', line 83 def column(position, range) range.each do |row| self[row][position] = 1 end end |
#copy(digit) ⇒ Object
22 23 24 25 26 27 28 |
# File 'lib/rmathguard/digit.rb', line 22 def copy(digit) digit.each_index do |row| digit[row].each_index do |col| self[row][col] = digit[row][col] end end end |
#full_column(position) ⇒ Object
55 56 57 58 59 60 61 62 63 64 65 |
# File 'lib/rmathguard/digit.rb', line 55 def full_column(position) position = case position when :last self[0].size - 1 when :first 0 end self.each_index do |row| self[row][position] = 1 end end |
#full_row(position) ⇒ Object
41 42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/rmathguard/digit.rb', line 41 def full_row(position) position = case position when :top, :first 0 when :middle (self.size / 2.0).round - 1 when :bottom, :last self.size - 1 else position.to_i end self[position].fill(1) end |
#half_column(position) ⇒ Object
67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
# File 'lib/rmathguard/digit.rb', line 67 def half_column(position) position = case position when :top_left [0..middle, 0] when :top_right [0..middle, self.first.size - 1] when :bottom_left [middle...self.size, 0] when :bottom_right [middle...self.size, self.first.size - 1] end position.first.each do |row| self[row][position.last] = 1 end end |
#masked ⇒ Object
30 31 32 33 34 35 36 37 38 39 |
# File 'lib/rmathguard/digit.rb', line 30 def masked digit = Digit.new(self.size, self.first.size) digit.copy(self) digit.each_index do |row| digit[row].each_index do |col| digit[row][col] = PATTERN[Kernel::rand(PATTERN.size)] unless digit[row][col] == 0 end end digit end |
#middle ⇒ Object
89 90 91 |
# File 'lib/rmathguard/digit.rb', line 89 def middle self.size / 2 end |
#middle_column ⇒ Object
93 94 95 |
# File 'lib/rmathguard/digit.rb', line 93 def middle_column self.first.size / 2 end |