Class: Lm::Minimizer

Inherits:
Object
  • Object
show all
Defined in:
lib/lm/minimizer.rb

Instance Method Summary collapse

Constructor Details

#initialize(output_str) ⇒ Minimizer

Returns a new instance of Minimizer.



15
16
17
# File 'lib/lm/minimizer.rb', line 15

def initialize(output_str)
  @output_str = output_str
end

Instance Method Details

#calculatorObject



56
57
58
# File 'lib/lm/minimizer.rb', line 56

def calculator
  String122ResultSelector.new(implicants, reduced_sum)
end

#canonicalObject



23
24
25
26
27
# File 'lib/lm/minimizer.rb', line 23

def canonical
  return degenerate if degenerate?

  output_string.sop
end

#canonical_evaluate(input) ⇒ Object



89
90
91
92
93
# File 'lib/lm/minimizer.rb', line 89

def canonical_evaluate(input)
  return degenerate.to_s.to_i if degenerate?

  BinFunc.new(output_string.sop).evaluate(input)
end

#degenerateObject



69
70
71
# File 'lib/lm/minimizer.rb', line 69

def degenerate
  Degenerate.new(variation.first)
end

#degenerate?Boolean

degenerate case

Returns:

  • (Boolean)


65
66
67
# File 'lib/lm/minimizer.rb', line 65

def degenerate?
  variation.length == 1
end

#evaluate(input) ⇒ Object



83
84
85
86
87
# File 'lib/lm/minimizer.rb', line 83

def evaluate(input)
  return degenerate.to_s.to_i if degenerate?

  BinFunc.new(shortest).evaluate(input)
end

#implicantsObject



33
34
35
# File 'lib/lm/minimizer.rb', line 33

def implicants
  qcm.prime_implicants
end

#inputlenObject



79
80
81
# File 'lib/lm/minimizer.rb', line 79

def inputlen
  output_string.bitcount
end

#output_stringObject



19
20
21
# File 'lib/lm/minimizer.rb', line 19

def output_string
  OutputString.new(@output_str)
end

#pmObject



37
38
39
# File 'lib/lm/minimizer.rb', line 37

def pm
  Petrick.new(implicants)
end

#posObject



41
42
43
# File 'lib/lm/minimizer.rb', line 41

def pos
  POS.new(pm.string122)
end

#qcmObject



29
30
31
# File 'lib/lm/minimizer.rb', line 29

def qcm
  QuineMcCluskey.new(canonical.implicants)
end

#reduced_sumObject



45
46
47
48
49
50
51
52
53
54
# File 'lib/lm/minimizer.rb', line 45

def reduced_sum
  sum = pos.apply_factorize.expand
  loop do
    newsum = sum.reduce
    return newsum if sum.to_s.length == newsum.to_s.length

    sum = newsum
  end
  sum
end

#shortestObject



73
74
75
76
77
# File 'lib/lm/minimizer.rb', line 73

def shortest
  return degenerate if degenerate?

  calculator.shortest
end

#variationObject



60
61
62
# File 'lib/lm/minimizer.rb', line 60

def variation
  @variation ||= @output_str.split("").uniq
end