Class: Sangi::SubtractionEngine

Inherits:
Object
  • Object
show all
Includes:
SubtractionBorrowing
Defined in:
lib/sangi/engines/subtraction_engine.rb

Instance Method Summary collapse

Constructor Details

#initialize(config) ⇒ SubtractionEngine

Returns a new instance of SubtractionEngine.



5
6
7
# File 'lib/sangi/engines/subtraction_engine.rb', line 5

def initialize(config)
  @config = config
end

Instance Method Details

#build(minuend_abs:, subtrahend_abs:, result_sign:, expression:) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/sangi/engines/subtraction_engine.rb', line 9

def build(minuend_abs:, subtrahend_abs:, result_sign:, expression:)
  @rod_factory = RodFactory.new
  @result_value = result_sign * (minuend_abs - subtrahend_abs)
  place_count = [
    digit_count(minuend_abs),
    digit_count(subtrahend_abs),
    digit_count(@result_value.abs),
    1
  ].max
  @board = Board.from_numbers(
    a: minuend_abs,
    b: subtrahend_abs,
    work: 0,
    place_count: place_count,
    rod_factory: @rod_factory
  )
  @board.row(:work).sign = result_sign
  @builder = StepBuilder.new(
    config: @config,
    expression: expression,
    board: @board,
    result_value: @result_value,
    rod_factory: @rod_factory
  )

  push_setup_step
  copy_minuend_to_work(minuend_abs)
  digit_count(subtrahend_abs).times do |place|
    subtract_digit_from_work(place, digit_of(subtrahend_abs, place))
  end
  push_finish_step
  @builder.steps
end