module Polymath

Constants

Version

Public Class Methods

command_line(options) click to toggle source

@brief preforms actions specified by command line arguments

@param options The parsed options

@return nil

# File lib/polymath.rb, line 76
def self.command_line(options)
  raise "No polynomial given" unless options[:polynomial]

  polynomial = Polymath.polynomial(options[:polynomial])
  math       = Polymath::Math.new

  polynomial.cleanup!

  if options[:factor]
    zeroes = math.factor_rational_zeroes(polynomial: polynomial)
  end

  #output
  puts options.map { |opt, value|
    next unless value
    case opt
    when :verbose
      polynomial.to_s
    when :factor
      "zeroes: #{zeroes}" if options[:factor]
    when :analyze
      {
        deg:   polynomial.deg,
        class: polynomial.classification.map { |t, c| c }.compact.join(" ")
      }.map { |a,b| "#{a}: #{b}" }.join("\n")
    end
  }.compact.join("\n")

end
parse_options(args) click to toggle source

@brief parses command line arguments

@param args The arguments

@return a hash of parsed options

# File lib/polymath.rb, line 17
def self.parse_options(args)

  options = {
    :polynomial => nil,
    :verbose    => true,
    :analyze    => false,
    :factor     => false
  }

  parser = OptionParser.new { |opts|
    opts.banner = "Usage: polymath [options] <polynomial>"

    opts.on("-f", "--factor", "factor the polynomial expression") { |f|
      options[:factor] = f
    }

    opts.on("-a", "--analyze", "analyze the polynomial expression") { |a|
      options[:analyze] = a
    }

    opts.on("-q", "--quiet", "only output what is specified") { |q|
      options[:verbose] = ! q
    }

    opts.on("-r", "--random [N]", "generate a random polynomial") { |n|
      options[:polynomial] =  if n
                                Nomial::random_polynomial(Integer(n))
                              else
                                Nomial::random_polynomial
                              end
    }

    opts.on_tail("-h", "--help", "Show this message") {
      puts opts
      exit
    }

    opts.on_tail("--version", "Show version") {
      puts self::Version.join('.')
      exit
    }
  }

  parser.parse!(args)
  options[:polynomial] = args.pop unless options[:polynomial]
  options
end
polynomial(exp) click to toggle source
# File lib/polymath.rb, line 65
def self.polynomial(exp)
  Polymath::Nomial::Polynomial.new(exp)
end