OSDN Git Service

refactored linear_function_graph generator
authorTomohiro Nishimura <tomohiro68@gmail.com>
Tue, 23 Mar 2010 13:47:55 +0000 (22:47 +0900)
committerTomohiro Nishimura <tomohiro68@gmail.com>
Tue, 23 Mar 2010 13:47:55 +0000 (22:47 +0900)
lib/mint/generator/linear_function_graph.rb

index 0caab0c..15226cf 100644 (file)
@@ -42,24 +42,24 @@ module Mint::Generator
     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