Instantly share code, notes, and snippets.

# anonymous/rohitsasikumar.rbSecret Created Dec 3, 2009

 require 'test/unit' # Class for printing the polynomial in string form given the coefficients in an array. # Assumptions: Coefficents are whole numbers only. class Polynomial def initialize (arg) raise ArgumentError, "Need at least 2 coefficients" if arg.size < 2 @coefficients = arg end # Function for printing the polynomial def to_s # create an array of the variable and degrees. For eg, if the number of coefficients is 3, then the array of is ["x^3", "x^2", "x", ""] variable_degree = Array.new(@coefficients.size) {|i| i} variable_degree.reverse!.collect! do|i| if i == 1 "x" elsif i >= 1 "x^#{i}" end end variable_degree.compact! variable_degree << "" # make a sum of the terms of the polynomial using the coefficients and the variable_degree array expr = @coefficients.inject('') do |sum,obj| if obj == 0 variable_degree.shift next sum elsif obj == 1 asd = '+' elsif obj == -1 asd = '-' elsif obj > 1 asd = '+' + obj.to_s else asd = obj.to_s end sum + asd + variable_degree.shift end expr = "0" if expr.eql? "" # If result is "" string then make it "0" expr.sub!(/^\+/,'') # remove the leading '+' sign expr end end # unit tests for testing the Polynomial class class Polynomial_Test < Test::Unit::TestCase def setup @p1 = Polynomial.new([-3,-4,1,0,6]) @p2 = Polynomial.new([1,0,2]) @p3 = Polynomial.new([-1,-2,3,0]) @p4 = Polynomial.new([0,0,0]) end def test_first_negative assert_equal("-3x^4-4x^3+x^2+6", @p1.to_s) end def test_simple assert_equal("x^2+2", @p2.to_s) end def test_first_minus_one assert_equal("-x^3-2x^2+3x", @p3.to_s) end def test_all_zero assert_equal("0", @p4.to_s) end def test_error e = assert_raise(ArgumentError) { Polynomial.new([1]) } assert_match(/Need at least 2 coefficients/, e.message) end def test_misc assert_equal("-x^3+2x^2-3x-4", Polynomial.new([-1,2,-3,-4]).to_s) assert_equal("x^4+3x^2+5", Polynomial.new([0,1,0,3,0,5]).to_s) assert_equal("9x^5", Polynomial.new([9,0,0,0,0,0]).to_s) end end
to join this conversation on GitHub. Already have an account? Sign in to comment