secret
anonymous / isleyaardvark2.rb
Last active

  • Download Gist
isleyaardvark2.rb
Ruby
1 2 3 4 5 6 7 8 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
# This class prepares a pretty-print version of a polynomial with a minimum of 2 coefficients
#
class Polynomial
# Create the polynomial object and store the coefficients
#
def initialize(coefficients)
raise ArgumentError, "Need at least 2 coefficients" if coefficients.length < 2
@coefficients = coefficients
end
 
# Returns a string version of the polynomial, simplifies coefficients of 1x^n to x^n,
# simplifies x^1 to x and ax^0 to a. Doesn't include elements with a coefficient of 0.
# If all coefficients = 0, returns "0".
#
def to_s
polynomial = []
@coefficients.each_with_index do |coefficient, index|
polynomial << coefficient.to_s + "x^" + (@coefficients.length - 1 - index).to_s
end
if @coefficients.all? { |coefficient| coefficient.zero? }
polynomial_string = "0"
else
polynomial_string = polynomial.join("+")\
.gsub(/\+\-/, '-')\
.gsub(/(^|[\+\-])[1]x/, '\1x')\
.gsub(/(^|[\+\-])[0]x\^[(0-9)+]/, '')\
.gsub(/x\^1([\+\-]|$)/, 'x')\
.gsub(/x\^0/, '')
# ^| in regex handles case where 1x is at beginning of line, otherwise it's -1x and is covered by rest of regex
end
return polynomial_string
end
 
end

Please sign in to comment on this gist.

Something went wrong with that request. Please try again.