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
37 result << "(#{denominator})"
42 opts = { :min => 1, :max => 9, :minus => false }
43 do_with(opts) { integer }
46 [:numerator, :denominator].each do |name|
47 define_method(name) do
49 term_number(name).times do
51 result << options[:operators].sample
53 result[0..-2].join(' ')
57 def term_number(position)
58 min = options[:"#{position}_term_min"]
59 max = [min, options[:"#{position}_term_max"]].max
60 (min..max).to_a.sample