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