option :denominator_max, 5
def generate_problem
- a = create_rational(options)
- b = create_rational(options)
- f = function(a, b)
- begin
- x1, x2 = Array.new(2){
- create_integer(options[:x_min], options[:x_max], options[:x_minus])
- }.sort
- end while x1 == x2
- y1, y2 = f.call(x1), f.call(x2)
+ a, b = create_rational, create_rational
+ x1, x2 = create_sorted_integers(2) while x1 == x2
+ y1, y2 = function(a, b)[x1], function(a, b)[x2]
{ :p1 => [x1, y1], :p2 => [x2, y2], :gradient => a, :intercept => b }
end
+ def create_sorted_integers(amount)
+ Array.new(amount){
+ create_integer(options[:x_min], options[:x_max], options[:x_minus])
+ }.sort
+ end
+
def function(a, b)
- lambda{|x| a * x + b }
+ @function ||= lambda{|x| a * x + b }
end
- def create_rational(options)
- numerator_part = create_integer(options[:numerator_min], options[:numerator_max], options[:minus])
+ def create_rational
+ numerator_part = create_integer(options[:numerator_min], options[:numerator_max], options[:minus])
denominator_part = create_integer(options[:denominator_min], options[:denominator_max], false)
Rational(numerator_part, denominator_part)
end