Skip to content

Instantly share code, notes, and snippets.

Created December 17, 2009 02:48
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save anonymous/7ed1ea920808eab59537 to your computer and use it in GitHub Desktop.
Save anonymous/7ed1ea920808eab59537 to your computer and use it in GitHub Desktop.
# 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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment