OSDN Git Service

expansion generator supports multiple variable
[mint/mint-lib.git] / lib / mint / generator / factorization.rb
1 # -*- coding: utf-8 -*-
2
3 module Mint::Generator
4
5
6   #
7   # 因数分解の問題を生成するジェネレータ
8   #
9   # オプション ::
10   #               以下のオプションが使用出来る
11   #               [_order_min_] 次数の最小値 (ex. 2)
12   #               [_order_max_] 次数の最大値 (ex. 3)
13   #               [_x_] 使用する変数 (ex. ['x'] / [['x', 'y']])
14   #               [_factor_minus_] 真なら整数部に負の数を使用する (ex. true)
15   #               [_factor_min_] 整数部の最小値 (ex. 0)
16   #               [_factor_max_] 整数部の最大値 (ex. 100)
17   #
18   class Factorization < HighOrderExpression
19
20     validation /\A(?:\d+)?([a-zA-Z])\^2 [+-] (?:\d+)?\1 [+-] \d+\z/
21     validation /\A(?:\d+)?([a-zA-Z])\^2 [+-] (?:\d+)?\1([a-zA-Z]) [+-] \d+\2\^2\z/
22     validation /\A(?:\d+)?[a-zA-Z]\^2 [+-] (?:\d+)?[a-zA-Z]\^2\z/
23
24     validation /\A(?:\d+)?([a-zA-Z])\^3 [+-] (?:\d+)?\1\^2 [+-] (?:\d+)?\1 [+-] \d+\z/
25     validation /\A(?:\d+)?([a-zA-Z])\^3 [+-] (?:\d+)?\1\^2([a-zA-Z]) [+-] (?:\d+)?\1\2\^2 [+-] (?:\d+)?\2\^3\z/
26
27     private
28     def generate_problem
29       defaults = {
30         :order_min => 2, :order_max => 3,
31         :factor_minus => true,
32         :factor_min   => 1,
33         :factor_max   => 100,
34       }
35       do_generate(defaults)
36     end
37
38     def expression
39       factorization
40     end
41   end
42 end
43