module Numerificator

Private Instance Methods

equationfy(coefficients) click to toggle source
# File lib/cartesius/numerificator.rb, line 5
def equationfy(coefficients)
  coefficients.delete_if {|_, value| value.zero?}

  if coefficients.first.last < 0
    coefficients.each {|k, v| coefficients[k] = -v}
  end

  equation = []
  coefficients.each do |key, value|
    if key == '1'
      equation << [monomial(value)]
    else
      equation << [monomial(value, key)]
    end
  end
  equation << ['=', '0']

  equation.join(' ')
end
monomial(number_part, letter_part = nil) click to toggle source
# File lib/cartesius/numerificator.rb, line 43
def monomial(number_part, letter_part = nil)
  number_string = if number_part.denominator == 1
                    number_part.numerator.abs.to_s
                  else
                    "(#{number_part.abs})"
                  end
  "#{signum_symbol(number_part)}#{number_string}#{letter_part}"
end
normalize(*coefficients) click to toggle source
# File lib/cartesius/numerificator.rb, line 60
def normalize(*coefficients)
  sign = signum(coefficients.first.to_r)
  coefficients.map! {|coefficient| sign * coefficient.to_r}
end
numberfy(numerator, denominator) click to toggle source

TODO: test

# File lib/cartesius/numerificator.rb, line 33
def numberfy(numerator, denominator)
  if denominator == 1
    numerator
  elsif denominator == -1
    -numerator
  else
    Rational(numerator, denominator)
  end
end
signum(number) click to toggle source
# File lib/cartesius/numerificator.rb, line 52
def signum(number)
  number < 0 ? -1 : 1
end
signum_symbol(number) click to toggle source
# File lib/cartesius/numerificator.rb, line 56
def signum_symbol(number)
  number >= 0 ? '+' : '-'
end
stringfy(number) click to toggle source
# File lib/cartesius/numerificator.rb, line 25
def stringfy(number)
  if number.denominator == 1
    return number.numerator.to_s
  end
  number.to_s
end