Class: RMathGuard::Digit

Inherits:
Array
  • Object
show all
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

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

#maskedObject



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

#middleObject



89
90
91
# File 'lib/rmathguard/digit.rb', line 89

def middle
  self.size / 2
end

#middle_columnObject



93
94
95
# File 'lib/rmathguard/digit.rb', line 93

def middle_column
  self.first.size / 2
end