10 # [_term_number_] 生成する項の数 (ex. 1)
11 # [_operators_] 使用する演算子 (ex. %w[ + - * ])
12 # [_numerator_term_min_] 分母の項数の最小値 (ex. 1)
13 # [_numerator_term_max_] 分母の項数の最大値 (ex. 1)
14 # [_denominator_term_min_] 分子の項数の最小値 (ex. 2)
15 # [_denominator_term_max_] 分子の項数の最大値 (ex. 2)
17 class ComplexFractionalArithmetic < Arithmetic
21 option :numerator_term_min, 1
22 option :numerator_term_max, 1
23 option :denominator_term_min, 2
24 option :denominator_term_max, 2
25 option :operators, %w[ + - * ]
28 option :numerator_min, 1
29 option :numerator_max, 9
30 option :denominator_min, 1
31 option :denominator_max, 9
41 result << "(#{denominator})"
46 opts = { :min => 1, :max => 9, :minus => false }
47 do_with(opts) { integer }
50 [:numerator, :denominator].each do |name|
51 define_method(name) do
53 term_number(name).times do
55 result << options[:operators].sample
57 result[0..-2].join(' ')
61 def term_number(position)
62 min = options[:"#{position}_term_min"]
63 max = [min, options[:"#{position}_term_max"]].max
64 (min..max).to_a.sample