Create a gist now

Instantly share code, notes, and snippets.

anonymous /SurajDhakankar.rb Secret
Created Dec 15, 2009

What would you like to do?
class that pretty-prints polynomials
class Polynomial
attr_accessor :expression
def initialize(coeffs)
bConstant = true #Print constant value of the polynomial
bPower = false #Print variable x with its power > 1
bSign = false #Print + as it does not get printed while printing positive integer
index = 0 #Contains power of the variable x in polynomial
expression = "" #Polynomial expression to be created in reverse order
#Start creating polynomial from least power of x to
#highest power of x in reverse order
coeffs.reverse_each do |coeff|
#Print + sign if required for the previous coefficient
expression += (bSign && coeff!=0) ? "+" : ""
#For an element of polynomial Ax^N print "^N" in reverse
#order where N>1 and A!=0
expression += (bPower && coeff!=0) ? "#{index}^" : ""
if bConstant
#Print constant term of polynomial if non-zero
expression += (coeff != 0) ? "#{coeff}".reverse : ""
bConstant = false
#For an element of polynomial Ax^N print "Ax" in reverse order where A!=0
#Handle special cases of A==-1 and A==1
expression += (coeff != 0) ? ( coeff ==1?"x":(coeff ==-1?"x-":"#{coeff}x".reverse)): ""
bPower = true
#If current coefficient is positive we need to print the '+' sign
#while printing next higher term of polynomial
#'-' sign for current coefficient gets printed while printing the number
if coeff != 0
bSign= (coeff>0) ? true : false
#increment power of variable x to next level
index += 1
if bPower
#Handle the case when all the coefficients are zero
@expression = (expression!="") ? expression.reverse : "0"
#raise exception if there are less than 2 coefficients
raise ArgumentError, "Need at least 2 coefficients"
def to_s
return @expression
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment