Class: Lm::Minimizer
- Inherits:
-
Object
- Object
- Lm::Minimizer
- Defined in:
- lib/lm/minimizer.rb
Instance Method Summary collapse
- #calculator ⇒ Object
- #canonical ⇒ Object
- #canonical_evaluate(input) ⇒ Object
- #degenerate ⇒ Object
-
#degenerate? ⇒ Boolean
degenerate case.
- #evaluate(input) ⇒ Object
- #implicants ⇒ Object
-
#initialize(output_str) ⇒ Minimizer
constructor
A new instance of Minimizer.
- #inputlen ⇒ Object
- #output_string ⇒ Object
- #pm ⇒ Object
- #pos ⇒ Object
- #qcm ⇒ Object
- #reduced_sum ⇒ Object
- #shortest ⇒ Object
- #variation ⇒ Object
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
#calculator ⇒ Object
56 57 58 |
# File 'lib/lm/minimizer.rb', line 56 def calculator String122ResultSelector.new(implicants, reduced_sum) end |
#canonical ⇒ Object
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 |
#degenerate ⇒ Object
69 70 71 |
# File 'lib/lm/minimizer.rb', line 69 def degenerate Degenerate.new(variation.first) end |
#degenerate? ⇒ Boolean
degenerate case
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 |
#implicants ⇒ Object
33 34 35 |
# File 'lib/lm/minimizer.rb', line 33 def implicants qcm.prime_implicants end |
#inputlen ⇒ Object
79 80 81 |
# File 'lib/lm/minimizer.rb', line 79 def inputlen output_string.bitcount end |
#output_string ⇒ Object
19 20 21 |
# File 'lib/lm/minimizer.rb', line 19 def output_string OutputString.new(@output_str) end |
#qcm ⇒ Object
29 30 31 |
# File 'lib/lm/minimizer.rb', line 29 def qcm QuineMcCluskey.new(canonical.implicants) end |
#reduced_sum ⇒ Object
45 46 47 48 49 50 51 52 53 54 |
# File 'lib/lm/minimizer.rb', line 45 def reduced_sum sum = pos.apply_factorize. loop do newsum = sum.reduce return newsum if sum.to_s.length == newsum.to_s.length sum = newsum end sum end |
#shortest ⇒ Object
73 74 75 76 77 |
# File 'lib/lm/minimizer.rb', line 73 def shortest return degenerate if degenerate? calculator.shortest end |
#variation ⇒ Object
60 61 62 |
# File 'lib/lm/minimizer.rb', line 60 def variation @variation ||= @output_str.split("").uniq end |