mgmg 1.4.2 → 1.5.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +21 -0
- data/README.md +41 -10
- data/lib/mgmg/equip.rb +19 -24
- data/lib/mgmg/ir.rb +5 -11
- data/lib/mgmg/optimize.rb +21 -9
- data/lib/mgmg/option.rb +84 -0
- data/lib/mgmg/recipe.rb +172 -0
- data/lib/mgmg/reinforce.rb +3 -3
- data/lib/mgmg/search.rb +204 -222
- data/lib/mgmg/system_equip.rb +4 -0
- data/lib/mgmg/utils.rb +53 -10
- data/lib/mgmg/version.rb +1 -1
- data/lib/mgmg.rb +181 -79
- data/mgmg.gemspec +4 -4
- data/reference.md +186 -49
- metadata +12 -10
data/reference.md
CHANGED
@@ -1,12 +1,17 @@
|
|
1
1
|
# リファレンス
|
2
2
|
本ライブラリで定義される主要なメソッドを以下に解説します.
|
3
3
|
|
4
|
-
## `String#
|
4
|
+
## `String#to_recipe(para=:power, allow_over20: false, **kw)`,`Enumerable#to_recipe(para=:power, **kw)`
|
5
|
+
レシピ文字列である`self`と,注目パラメータ`para`,オプション`Mgmg.option(**kw)`をセットにした[後述](#mgmgrecipe)の`Mgmg::Recipe`オブジェクトを生成して返します.デフォルト値としてセットされたパラメータを使用する以外は,レシピ文字列と同様に扱えます.
|
6
|
+
|
7
|
+
`allow_over20`が偽の場合,レシピの☆を確認し,20を超える場合は,例外`Mgmg::Over20Error`を発生します.このチェックを抑制したい場合は,真にしてください.
|
8
|
+
|
9
|
+
## `String#build(smith=-1, comp=smith, opt: Mgmg.option())`
|
5
10
|
レシピ文字列である`self`を解釈し,鍛冶・防具製作Lvを`smith`,道具製作Lvを`comp`として鍛冶・防具製作及び武器・防具合成を行った結果を[後述](#mgmgequip)の`Mgmg::Equip`クラスのインスタンスとして生成し,返します.例えば,
|
6
11
|
```ruby
|
7
12
|
'[杖(水玉10火玉5)+本(骨10鉄1)]+[本(水玉5綿2)+杖(骨10鉄1)]'.build(112, 176)
|
8
13
|
```
|
9
|
-
のようにします.基本的に`[]`による合成順序の指定が必要ですが,不確定の場合,`left_associative`が真なら左結合,偽なら右結合として解釈します.
|
14
|
+
のようにします.基本的に`[]`による合成順序の指定が必要ですが,不確定の場合,`opt.left_associative`が真なら左結合,偽なら右結合として解釈します.
|
10
15
|
```ruby
|
11
16
|
'法衣(綿10皮10)+歴戦の服'
|
12
17
|
```
|
@@ -14,33 +19,69 @@
|
|
14
19
|
|
15
20
|
`self`が解釈不能な場合,例外が発生します.また,製作Lvや完成品の☆制限のチェックを行っていないほか,本ライブラリでは`武器+防具`や`防具+武器`の合成も可能になっています.街の鍛冶・防具製作・道具製作屋に任せた場合をシミュレートする場合は製作Lvを負の値(`-1`など,負であれば何でもよい)にします(製作Lv0相当の性能を計算し,消費エレメント量は委託仕様となります).
|
16
21
|
|
17
|
-
|
18
|
-
|
22
|
+
`opt`は,`left_associative`のみ使用します.
|
23
|
+
|
24
|
+
## `Enumerable#build(smith=-1, armor=smith, comp=armor.tap{armor=smith}, opt: Mgmg.option())`
|
25
|
+
複数のレシピ文字列からなる`self`の各要素を製作し,そのすべてを装備したときの`Mgmg::Equip`を返します.製作では`鍛冶Lv=smith`, `防具製作Lv=armor`, `道具製作Lv=comp`とします.1つしか指定しなければすべてそのLv,2つなら1つ目を`smith=armor`,2つ目を`comp`に,3つならそれぞれの値とします.製作Lvが負の場合,製作Lv0として計算した上で,消費エレメント量は街の製作屋に頼んだ場合の値を計算します.武器複数など,同時装備が不可能な場合でも,特にチェックはされません.
|
26
|
+
|
27
|
+
`opt`は,`left_associative`のみ使用します.
|
28
|
+
|
29
|
+
## `String#min_weight(opt: Mgmg.option())`
|
30
|
+
製作可能な最小重量を返します.基本的には合成回数+1ですが,既製品を含む場合はその限りではありません.
|
31
|
+
|
32
|
+
製作を行うため,`opt`が指定可能ですが,特に結果には影響しません.
|
33
|
+
|
34
|
+
## `String#max_weight(include_outsourcing=false, opt: Mgmg.option())`
|
35
|
+
製作可能な最大重量を返します.`include_outsourcing`が真の場合,委託製作時の重量を返します.
|
36
|
+
委託製作では,製作Lv0相当となるため,素材の☆による最低製作Lvで作るよりも重くなる場合があります.
|
19
37
|
|
20
|
-
|
21
|
-
`self`を`weight`以下で作るための最低製作Lvを返します.`build`と異なり,合成や既成品は解釈できません.また,素材の☆による最低製作Lvとのmaxを返すため,街の鍛冶・防具製作屋に頼んだ場合の重量は`self.build.weight`で確認する必要があります.`weight`を省略した場合,重量1となる製作Lvを返します.
|
38
|
+
製作を行うため,`opt`が指定可能ですが,特に結果には影響しません.
|
22
39
|
|
23
|
-
## `String#
|
40
|
+
## `String#min_level(w=0, include_outsourcing=false, opt: Mgmg.option())`
|
41
|
+
`self`を重量`w`以下で作るための最低製作Lvを返します.
|
42
|
+
`w`が`0`以下の場合,`self.min_weight-w`を指定した場合と同じになります.
|
43
|
+
|
44
|
+
`include_outsourcing`が真の場合,委託製作で目標重量が達成可能な場合,`-1`を返します.
|
45
|
+
偽の場合,返り値の最小値(`w`が`self.max_weight`以上の場合)は素材の☆による最低製作Lvになります.
|
46
|
+
|
47
|
+
`w`が最小重量より小さい場合,`ArgumentError`となります.製作を行うため,`opt`が指定可能ですが,特に結果には影響しません.
|
48
|
+
|
49
|
+
## `String#min_levels(weight=1, opt: Mgmg.option())`
|
24
50
|
合成レシピの各鍛冶・防具製作品に対して,レシピ文字列をキー,重量1で作製するために必要な製作Lvを値とした`Hash`を返します.重量はすべての装備について同じ値しか指定できません.
|
25
|
-
最大値は,`self.build.min_level`によって得られます.
|
26
51
|
|
27
|
-
|
52
|
+
製作を行うため,`opt`が指定可能ですが,特に結果には影響しません.
|
53
|
+
|
54
|
+
## `Enumerable#max_weight(include_outsourcing=false, opt: Mgmg.option())`,`Enumerable#min_weight(opt: Mgmg.option())`
|
55
|
+
製作可能な最大・最小重量を返します.`opt`を含め,`String#max_weight`,`String#min_weight`と同様です.
|
56
|
+
|
57
|
+
## `Enumerable#max_weights(include_outsourcing=false, opt: Mgmg.option())`,`Enumerable#min_weights(opt: Mgmg.option())`
|
58
|
+
`self`を武器の集合と防具の集合に分け,`[武器の最大・最小重量, 防具の最大・最小重量]`を返します.その他は`String#max_weight`,`String#min_weight`と同様です.
|
59
|
+
|
60
|
+
## `Enumerable#min_levels(weight=1, opt: Mgmg.option())`
|
28
61
|
すべての要素`str`に対する`str.min_levels`をマージした`Hash`を返します.
|
29
62
|
|
30
|
-
|
31
|
-
|
63
|
+
製作を行うため,`opt`が指定可能ですが,特に結果には影響しません.
|
64
|
+
|
65
|
+
## `Enumerable#min_levels_max(weight=1, opt: Mgmg.option())`
|
66
|
+
`self.min_levels`から武器,防具それぞれに対する最大値を求め,`[必要最小鍛冶Lv, 必要最小防具製作Lv]`を返します.武器,防具の一方のみが含まれる場合,もう一方は`-1`になります.
|
32
67
|
|
33
|
-
|
34
|
-
|
68
|
+
製作を行うため,`opt`が指定可能ですが,特に結果には影響しません.
|
69
|
+
|
70
|
+
## `String#min_comp(opt: Mgmg.option())`,`Enumerable#min_comp(opt: Mgmg.option())`
|
71
|
+
レシピ通りに合成するのに必要な道具製作Lvを返します.ただし,全体が「[]」で囲われているか,非合成レシピの場合,代わりに`-1`を返します.
|
35
72
|
|
36
73
|
`Enumerable`の場合,すべての要素に対する最大値を返します.
|
37
74
|
|
38
|
-
|
39
|
-
|
75
|
+
`opt`は,`left_associative`のみ使用します.
|
76
|
+
|
77
|
+
## `String#min_smith(opt: Mgmg.option())`,`Enumerable#min_smith(opt: Mgmg.option())`
|
78
|
+
レシピ通りに製作するのに必要な鍛冶・防具製作Lvを返します.製作物の重量については考慮せず,鍛冶・防具製作に必要な☆条件を満たすために必要な製作Lvを返します.既製品のみから構成される場合は`-1`になります.
|
40
79
|
|
41
|
-
`Enumerable`の場合,すべての要素に対し,武器,防具それぞれの最大値を求め,`[必要最小鍛冶Lv, 必要最小防具製作Lv]
|
80
|
+
`Enumerable`の場合,すべての要素に対し,武器,防具それぞれの最大値を求め,`[必要最小鍛冶Lv, 必要最小防具製作Lv]`を返します.武器,防具の一方のみが含まれる場合,もう一方は`-1`になります.
|
42
81
|
|
43
|
-
|
82
|
+
製作を行うため,`opt`が指定可能ですが,特に結果には影響しません.
|
83
|
+
|
84
|
+
## `String#poly(para=:cost, opt: Mgmg.option())`
|
44
85
|
レシピ文字列である`self`を解釈し,`para`で指定した9パラ値について,丸めを無視した鍛冶・防具製作Lvと道具製作Lvの2変数からなる多項式関数を示す`Mgmg::TPolynomial`クラスのインスタンスを生成し,返します.`para`は次のシンボルのいずれかを指定します.
|
45
86
|
```ruby
|
46
87
|
:attack, :phydef, :magdef, :hp, :mp, :str, :dex, :speed, :magic
|
@@ -55,78 +96,99 @@
|
|
55
96
|
|
56
97
|
また,`:cost`を渡すことで,消費エレメント量に関する近似多項式を得られます.`self`に`"+"`が含まれていれば合成品とみなし,最後の合成に必要な地エレメント量を,それ以外では,武器なら消費火エレメント量を,防具なら消費水エレメント量を返します.ただし,`self`が既成品そのものの場合,零多項式を返します.
|
57
98
|
|
58
|
-
|
99
|
+
`opt`は,`left_associative`のみ使用します.
|
100
|
+
|
101
|
+
## `String#ir(opt: Mgmg.option())`
|
59
102
|
レシピ文字列である`self`を解釈し,9パラ値について,丸めを考慮した鍛冶・防具製作Lvと道具製作Lvの2変数からなる関数オブジェクトを保持する`Mgmg::IR`クラスのインスタンスを生成し,返します.詳しくは,[後述](#mgmgir)の`Mgmg::IR`クラスの説明を参照ください.
|
60
103
|
|
61
|
-
`reinforcement
|
104
|
+
`opt`は,`left_associative`と`reinforcement`を使用します.
|
62
105
|
|
63
|
-
## `Enumerable#ir(
|
106
|
+
## `Enumerable#ir(opt: Mgmg.option())`
|
64
107
|
複数のレシピ文字列からなる`self`の各要素を製作し,そのすべてを装備したときの`Mgmg::IR`を返します.この場合,鍛冶Lv,防具製作Lv,道具製作Lvの3変数からなる関数オブジェクトを保持するものとして扱われます.各装備の種別に応じ,鍛冶Lvまたは防具製作Lvを適用し,9パラ値を計算します.
|
65
108
|
|
66
|
-
|
109
|
+
`opt`は,`left_associative`と`reinforcement`を使用します.
|
110
|
+
|
111
|
+
## `String#smith_seach(para, target, comp, opt: Mgmg.option())`
|
67
112
|
`para`の値が`target`以上となるのに必要な最小の鍛冶・防具製作Lvを二分探索で探索して返します.
|
68
|
-
道具製作Lvは`comp`で固定,鍛冶・防具製作Lvを`smith_min`と`smith_max`で挟み込んで探索します.
|
113
|
+
道具製作Lvは`comp`で固定,鍛冶・防具製作Lvを`opt.smith_min`と`opt.smith_max`で挟み込んで探索します.
|
69
114
|
|
70
|
-
`smith_min
|
71
|
-
`
|
115
|
+
`opt.smith_min`のデフォルト値は重量`opt.target_weight`で製作するのに必要な鍛冶・防具製作Lv (`self.min_level(opt.target_weight)`)です.
|
116
|
+
`opt.target_weight`のデフォルト値は`0`で,`0`以下の場合の挙動は[前述](#stringmin_levelw0-include_outsourcingfalse-opt-mgmgoption)の`String#min_level`を参照してください.
|
117
|
+
`opt.smith_min<opt.smith_max`でないとき,`opt.smith_max`で`para`が`target`以上でないときは`ArgumentError`となります.
|
72
118
|
|
73
119
|
`para`は,`Mgmg::Equip`のメソッド名をシンボルで指定(`:power, :fpower`も可)します.
|
74
120
|
反転などの影響で,探索範囲において`para`の値が(広義)単調増加になっていない場合,正しい結果を返しません.
|
75
|
-
`cut_exp`以下の経験値で`target`以上を達成できない場合,`Mgmg::SearchCutException`を発生します.
|
121
|
+
`opt.cut_exp`以下の経験値で`target`以上を達成できない場合,`Mgmg::SearchCutException`を発生します.
|
76
122
|
|
77
|
-
`irep
|
78
|
-
`reinforcement`が渡された場合,`para`を強化された値として計算します.`irep`が指定されている場合は無視されます.
|
123
|
+
`opt`は,上記の他に`left_associative`,`reinforcement`,`irep`を使用します.
|
79
124
|
|
80
|
-
## `String#comp_search(para, target, smith,
|
125
|
+
## `String#comp_search(para, target, smith, opt: Mgmg.option())`
|
81
126
|
`String#smith_seach`とは逆に,鍛冶・防具製作Lvを固定して最小の道具製作Lvを探索します.
|
82
|
-
|
127
|
+
探索の起点である`opt.comp_min`のデフォルト値は,製作に必要な最小の道具製作Lv (`self.min_comp`)です.
|
83
128
|
その他は`String#smith_seach`と同様です.
|
84
129
|
|
85
|
-
|
86
|
-
|
130
|
+
`opt`は,`comp_min`,`comp_max`,`left_associative`,`reinforcement`,`irep`を使用します.
|
131
|
+
|
132
|
+
## `String#search(para, target, opt: Mgmg.option())`
|
133
|
+
`c_min=comp_search(para, target, opt.smith_max, opt: opt)` から `c_max=comp_search(para, target, opt.smith_min, opt: opt)` まで,`opt.step`ずつ動かして,
|
87
134
|
`smith_search`を行い,その過程で得られた最小経験値の鍛冶・防具製作Lvと道具製作Lvからなる配列を返します.
|
88
|
-
レシピ中の,対象パラメータの種別値がすべて奇数,または全て偶数であるなら,`step`を`2`にしても探索すべき範囲を網羅できます.
|
135
|
+
レシピ中の,対象パラメータの種別値がすべて奇数,または全て偶数であるなら,`opt.step`を`2`にしても探索すべき範囲を網羅できます.
|
89
136
|
その他は`String#smith_seach`と同様です.
|
90
137
|
|
91
|
-
|
138
|
+
`opt`は,`String#smith_search`または`String#comp_search`で使われるすべてのパラメータを使用します.
|
139
|
+
|
140
|
+
## `Enumerable#search(para, target, opt: Mgmg.option())`
|
92
141
|
複数装備の組について,`para`の値が`target`以上となる最小経験値の`[鍛冶Lv,防具製作Lv,道具製作Lv]`を返します.
|
93
142
|
武器のみなら防具製作Lvは`0`,防具のみなら鍛冶Lvは`0`,合成なしなら道具製作Lvは`0`となります.
|
94
|
-
その他は`String#smith_seach`と同様です.
|
95
143
|
|
96
|
-
|
144
|
+
`opt.smith_min`および`opt.armor_min`のデフォルト値は,武器・防具の各総重量を`opt.target_weight`で製作するのに必要な鍛冶・防具製作Lv (`self.min_level(*opt.target_weight)`)です.`opt.target_weight`には2要素からなる配列を指定しますが,整数が与えられた場合,それを2つ並べた配列と同等のものとして扱います.合計重量を指定することにはならないので注意してください.`opt.target_weight`のデフォルト値は`0`です.
|
145
|
+
|
146
|
+
その他は,`String#smith_seach`と同様です.
|
147
|
+
|
148
|
+
## `Mgmg.#find_lowerbound(a, b, para, start, term, opt_a: Mgmg.option(), opt_b: Mgmg.option())`
|
97
149
|
レシピ`a`とレシピ`b`について,`para`の値を目標値以上にする最小経験値の組において,目標値`start`における優劣が逆転する目標値の下限を探索し,返します.
|
98
150
|
返り値は`[逆転しない最大目標値, 逆転時の最小para値]`です.前者は逆転目標値の下限,後者は,目標値が前者よりも少しだけ大きいときの`para`値です.
|
99
151
|
ここで,最小経験値が小さい方,または最小経験値が同じなら,そのときの`para`値が大きい方をよりよいものと解釈します.
|
100
152
|
`term`は`start`より大きい値とします.目標値`term`における優劣が,目標値`start`における優劣と同じ場合,`Mgmg::SearchCutException`を発生します.
|
101
|
-
`a`と`b`は`String`でもその`Enumerable`でも構いません.
|
102
153
|
|
103
|
-
`
|
104
|
-
これらが`nil`で,`min_smith`が真ならば,重量を無視した製作可能最小Lvが指定されます.`min_smith`が偽(デフォルト)ならば,最小重量で製作可能な製作Lvが指定されます.重量を無視した製作可能Lvでの重量が3で,重量が2以下となる製作Lvで探索したい場合などは,`smith_min_a`,`smith_min_b`,`armor_min_a`,`armor_min_b`を具体的に指定してください.
|
154
|
+
`a`と`b`は`String`でもその`Enumerable`でも構いません.`Mgmg::Recipe`が与えられた場合,`opt_a`,`opt_b`は無視され,代わりに`a.option`,`b.option`が使用されます.`a.para`,`b.para`は無視され,引数で与えた`para`を使用します.
|
105
155
|
|
106
|
-
|
156
|
+
`opt_a`,`opt_b`には,それぞれ`a`と`b`に関するオプションパラメータを指定します.`smith_min`,`armor_min`,`min_smith`,`left_associative`,`reinforcement`,`irep`を使用します.
|
157
|
+
|
158
|
+
## `Mgmg.#find_upperbound(a, b, para, start, term, opt_a: Mgmg.option(), opt_b: Mgmg.option())`
|
107
159
|
`Mgmg.#find_lowerbound`とは逆に,目標値を下げながら,優劣が逆転する最大の目標値を探索し,返します.返り値は`[逆転する最大目標値, 逆転前の最小para値]`です.目標値が,前者よりも少しでも大きいと逆転が起こらず(逆転する目標値の上限),少しだけ大きい時の`para`値が後者になります.
|
108
160
|
|
109
|
-
|
161
|
+
`opt_a`,`opt_b`は,`Mgmg.#find_lowerbound`と同様です.
|
162
|
+
|
163
|
+
## `String#eff(para, smith, comp=smith, opt: Mgmg.option())`
|
110
164
|
[`smith`を1上げたときの`para`値/(`smith`を1上げるのに必要な経験値), `comp`を1上げたときの`para`値/(`comp`を2上げるのに必要な経験値)]を返します.
|
111
165
|
`para`は,`Mgmg::Equip`のメソッド名をシンボルで指定(`:power, :fpower`も可)します.
|
112
166
|
|
113
|
-
|
114
|
-
|
167
|
+
`opt`は`String#build`にそのまま渡されます.
|
168
|
+
|
169
|
+
## `String#peff(para, smith, comp=smith, opt: Mgmg.option())`
|
170
|
+
近似多項式における偏微分値を使用した場合の,`String#eff`と同様の値を返します.`self.poly(para, opt: opt).eff(smith, comp)`と等価です.
|
115
171
|
|
116
|
-
|
172
|
+
`opt`は`String#poly`にそのまま渡されます.
|
173
|
+
|
174
|
+
## `String#phydef_optimize(smith=nil, comp=smith, opt: Mgmg.option())`
|
117
175
|
反転物防装備の反転材の種別,素材の最適化を行い,修正したレシピを返します.
|
118
176
|
`smith`,`comp`は探索を行う製作レベルを表し,`smith`が`nil`の場合,近似多項式で最適化を行います.近似多項式では,道具製作レベルの次数が高い項の係数を最適化します.
|
119
|
-
物防を最大化するレシピのうち,`magdef_maximize`が真なら魔防を最大化する組み合わせ,偽ならコストを最小化(≒魔防を最小化)する組み合わせを探索します.
|
177
|
+
物防を最大化するレシピのうち,`opt.magdef_maximize`が真なら魔防を最大化する組み合わせ,偽ならコストを最小化(≒魔防を最小化)する組み合わせを探索します.
|
120
178
|
ある範囲での全数探索を行うため,段数の多いレシピでは計算量が膨大になるほか,厳密な最適化を保証するものではなく,今後のアップデートで解が変わるような変更が入る可能性があります.
|
121
179
|
|
122
|
-
|
180
|
+
`opt`は,上記の`magdef_maximize`が使われるほか,`String#build`または`String#poly`にそのまま渡されます.
|
181
|
+
|
182
|
+
## `String#buster_optimize(smith=nil, comp=smith, opt: Mgmg.option())`
|
123
183
|
`String#phydef_optimize`の魔力弓版で,反転材の素材の最適化を行い,修正したレシピを返します.
|
124
184
|
|
185
|
+
`opt`は,`String#build`または`String#poly`にそのまま渡されます.
|
186
|
+
|
125
187
|
## `Mgmg.#exp(smith, armor, comp=armor.tap{armor=0})`
|
126
188
|
鍛冶Lvを0から`smith`に,防具製作Lvを0から`armor`に,道具製作Lvを0から`comp`に上げるのに必要な総経験値を返します.鍛冶Lvと防具製作Lvは逆でも同じです.
|
127
189
|
|
128
190
|
## `Mgmg::Equip`
|
129
|
-
[前述](#stringbuildsmith-1-compsmith-
|
191
|
+
[前述](#stringbuildsmith-1-compsmith-opt-mgmgoption)の`String#build`によって生成される装備品のクラスです.複数装備の合計値を表す「複数装備」という種別の装備品の場合もあります.以下のようなインスタンスメソッドが定義されています.
|
130
192
|
|
131
193
|
## `Mgmg::Equip#to_s`
|
132
194
|
```ruby
|
@@ -212,7 +274,7 @@
|
|
212
274
|
レシピ中の,鍛冶・防具製作物の文字列をキー,重量`weight`で生成するのに必要な最小レベルを値とした`Hash`を返します.
|
213
275
|
「複数装備」の場合,各装備の`min_levels`をマージした`Hash`を返します.
|
214
276
|
|
215
|
-
## `Mgmg::Equip#
|
277
|
+
## `Mgmg::Equip#min_levels_max(weight=1)`
|
216
278
|
`min_levels(weight)`の値の最大値を返します.「複数装備」の場合,`[鍛冶の必要レベル,防具製作の必要レベル]`を返します.
|
217
279
|
|
218
280
|
## `Mgmg::Equip#reinforce(*arg)`
|
@@ -236,7 +298,7 @@
|
|
236
298
|
|オールアップ|物防,腕力,器用,素早,魔力x1.5|本アクティブ|
|
237
299
|
|
238
300
|
## `Mgmg::TPolynomial`
|
239
|
-
[前述](#stringpolyparacost-
|
301
|
+
[前述](#stringpolyparacost-opt-mgmgoption)の`String#poly`によって生成される二変数多項式のクラスです.最初のTはtwo-variableのTです.以下のようなメソッドが定義されています.
|
240
302
|
|
241
303
|
## `Mgmg::TPolynomial#to_s(fmt=nil)`
|
242
304
|
鍛冶・防具製作LvをS,道具製作LvをCとして,`self`を表す数式文字列を返します.係数`coeff`を文字列に変換する際,`fmt`の値に応じて次の方法を用います.
|
@@ -282,7 +344,7 @@ alias として`*`があるほか`scalar(1.quo(value))`として`quo`,`/`,`s
|
|
282
344
|
一方のみが欲しい場合,`Mgmg::TPolynomial#smith_eff(smith, comp=smith)`,`Mgmg::TPolynomial#smith_eff(smith, comp=smith)`が使えます.
|
283
345
|
|
284
346
|
## `Mgmg::IR`
|
285
|
-
[前述](#
|
347
|
+
[前述](#stringiropt-mgmgoption)の`String#ir`または`Enumerable#ir`によって生成される,9パラ値を計算するための,2変数または3変数の関数オブジェクトを保持するクラスです.`Mgmg::IR`では,`Mgmg::Equip`と異なり,重量,EL値,総消費エレメントを取り扱いません.
|
286
348
|
|
287
349
|
## `Mgmg::IR#to_s`
|
288
350
|
例えば,「斧(牙9皮9)+短剣(鉄9皮2)」のレシピに対して,
|
@@ -372,3 +434,78 @@ alias として`*`があるほか`scalar(1.quo(value))`として`quo`,`/`,`s
|
|
372
434
|
調理法,主食材,副食材,料理Lvを指定し,対応する料理の効果の**概算値**を計算します.計算式は [Wikiの記述](https://wikiwiki.jp/guruguru/%E3%82%A2%E3%82%A4%E3%83%86%E3%83%A0/%E9%A3%9F%E7%B3%A7%E5%93%81#y1576f2d) に基づきますが,正確ではないことがわかっています.例えば,`('蒸す', 'アースドラン', '氷河酒', 27)`の物防は87ですが,この計算式では88になります.調理法,主食材,副食材は文字列で,料理Lvは整数で指定します.
|
373
435
|
|
374
436
|
調理法は「焼き」か「蒸す」,主食材は「獣肉」「ウッチ」「ゴッチ」「ガガッチ」「ドランギョ」「ドラバーン」「フレドラン」「アースドラン」「アクアドラン」「ダークドン」,副食材は「氷酒」「氷水酒」「氷河酒」「カエン酒」「爆炎酒」「煉獄酒」のみ対応しています.攻撃,物防,魔防の強化を考える場合,これらで十分と判断しての選択となっています.なお,副食材の数値は,Wikiの表で順番が間違っていると思われる部分を修正しています.
|
437
|
+
|
438
|
+
## `Mgmg::Option`
|
439
|
+
多くのメソッドのオプション引数をまとめるクラスです.このクラスのインスタンスを使ってそれぞれのメソッドに引き渡します.
|
440
|
+
|
441
|
+
## `Mgmg.#option(recipe=nil, **kw)`
|
442
|
+
`kw`はキーワード引数本体です.定義されているキーワードと意味,使用される主なメソッドは下表の通りです.デフォルト値は簡易的な表示であり,細かい点では不正確です.
|
443
|
+
`recipe`にレシピ`String`または`Enumerable`を渡すと,そのレシピを使ってデフォルト値を具体化しますが,各メソッドで自動的に具体化されるため,通常は必要ありません.
|
444
|
+
|
445
|
+
|キーワード|デフォルト値|意味|主なメソッド,備考|
|
446
|
+
|:-|:-|:-|:-|
|
447
|
+
|left_associative|`true`|レシピ文字列を左結合で解釈する|`Mgmg::Option`を使用するすべてのメソッド|
|
448
|
+
|smith_min|`recipe.min_level(target_weight)`|鍛冶Lvに関する探索範囲の最小値|`String#search`など|
|
449
|
+
|armor_min|`recipe.min_level(*target_weight)[1]`|防具製作Lvに関する探索範囲の最小値|`Enumerable#search`など.`String`系では代わりに`smith_min`を使う|
|
450
|
+
|comp_min|`recipe.min_comp`|道具製作Lvに関する探索範囲の最小値|`String#search`など|
|
451
|
+
|smith_max, armor_max, comp_max|`10000`|各製作Lvの探索範囲の最大値|`String#search`など|
|
452
|
+
|target_weight|`0`|`smith_min`のデフォルト値計算に使う目標重量|`String#search`など|
|
453
|
+
|step|`1`|探索時において道具製作Lvを動かす幅|`String#search`など|
|
454
|
+
|magdef_maximize|`true`|目標を魔防最大(真)かコスト最小(偽)にするためのスイッチ|`String#phydef_optimize`|
|
455
|
+
|reinforcement|`[]`|[前述](#mgmgequipreinforcearg)の`Mgmg::Equip#reinforce`による強化リスト|一部を除くすべてのメソッド|
|
456
|
+
|buff|`[]`|`reinforcement`のエイリアス|どちらか一方のみを指定する|
|
457
|
+
|irep|`recipe.ir()`|`Mgmg::IR`の使い回しによる高速化|`String#search`など,内部的に使用|
|
458
|
+
|cut_exp|`Float::INFINITY`|探索時の総経験値の打ち切り値|`String#search`など,内部的に使用|
|
459
|
+
|
460
|
+
## `Mgmg::Recipe`
|
461
|
+
レシピ文字列,注目パラメータ,オプションをセットにして扱うためのクラスです.
|
462
|
+
それぞれ`Mgmg::Recipe#recipe`,`Mgmg::Recipe#para`,`Mgmg::Recipe#option`でアクセスできます.
|
463
|
+
|
464
|
+
## `Mgmg::Recipe#option(**kw)`
|
465
|
+
オプションパラメータを`kw`で上書きして,新しい`Mgmg::Option`インスタンスを返します.
|
466
|
+
渡したバラメータだけ上書きします.パラメータを渡さない場合,単にセットになってるオプションオブジェクトを返します.
|
467
|
+
`target_weight`を上書きした場合,`smith_min`,`armor_min`は自動的に再計算されます.
|
468
|
+
|
469
|
+
与えるパラメータ以外をデフォルト値に戻したい場合,`recipe.option=Mgmg.option(**kw)`のように`Mgmg::Recipe#option=(new_option)`を使用します.
|
470
|
+
|
471
|
+
## `Mgmg::Recipe#replace(new_recipe, para: self.para, **kw)`
|
472
|
+
レシピ文字列を`new_recipe`で置き換え,`kw`でオプションを設定します.`para`を与えた場合,注目パラメータも引数で置き換えます.
|
473
|
+
レシピ文字列とオプションの対応を保つため,`Mgmg::Recipe#recipe=`メソッドは定義していません.代わりにこれを使います.
|
474
|
+
|
475
|
+
## `Mgmg::Recipe#build(smith=-1, armor=smith, comp=armor.tap{armor=smith}, **kw)`
|
476
|
+
`self.recipe.build`を呼び出して返します.`kw`が与えられた場合,オプションのうち,与えられたパラメータのみ一時的に上書きします.
|
477
|
+
|
478
|
+
`smith`に`nil`を与えた場合,製作Lvを`self.option.smith_min`,`self.option.armor_min`,`self.option.comp_min`とします.
|
479
|
+
|
480
|
+
## `Mgmg::Recipe#search(target, para: self.para, **kw)`
|
481
|
+
`self.recipe.search`を呼び出して返します.注目パラメータはセットされたものを自動的に渡しますが,別のパラメータを使いたい場合,キーワード引数で指定します.その他のキーワード引数を与えた場合,オプションのうち,与えられたパラメータのみ一時的に上書きします.
|
482
|
+
|
483
|
+
## `Mgmg::Recipe#min_level(w=self.option.target_weight, include_outsourcing=false)`
|
484
|
+
`self.recipe.min_level(w, include_outsourcing)`を返します.`w`のデフォルトパラメータが`target_weight`になっている以外は`String#min_level`または`Enumerable#min_level`と同じです.
|
485
|
+
|
486
|
+
## `Mgmg::Recipe#min_weight, max_weight, min_levels, min_levels_max, min_smith, min_comp`
|
487
|
+
`self.recipe`の同名メソッドをそのまま呼び出して返します.
|
488
|
+
|
489
|
+
## `Mgmg::Recipe#ir(**kw)`
|
490
|
+
`self.recipe`に対応した`Mgmg::IR`インスタンスを返します.
|
491
|
+
|
492
|
+
`kw`を与えた場合一時的に置き換えたオプションに対応した`Mgmg::IR`インスタンスを返します.`left_associative`が与えられれば再構築し,`reinforcement`が与えられれば,スキル・料理の効果を与えた引数に差し替えます.その他のキーワードを与えても特に影響はありません.
|
493
|
+
|
494
|
+
## `Mgmg::Recipe#para_call(smith=-1, armor=smith, comp=armor.tap{armor=smith}, para: self.para, **kw)`
|
495
|
+
`self.ir.para_call`を呼び出して返します.キーワード引数が与えられた場合,与えられた分だけ一時的に上書きします.
|
496
|
+
|
497
|
+
`smith`に`nil`を与えた場合,製作Lvを`self.option.smith_min`,`self.option.armor_min`,`self.option.comp_min`とします.製作Lvに負の値が与えられた場合,`0`に修正して計算して返します.
|
498
|
+
|
499
|
+
パラメータとして,以下が指定でき,これらは直接メソッドとしても定義されています(`Mgmg::Recipe#attack`など).製作Lvの与え方は`para_call`と同様です.
|
500
|
+
|
501
|
+
```ruby
|
502
|
+
:attack, :phydef, :magdef, :hp, :mp, :str, :dex, :speed, :magic
|
503
|
+
:atkstr, :atk_sd, :dex_as, :mag_das, :magic2, :magmag, :pmdef
|
504
|
+
:power, :fpower, :smith_cost, :comp_cost, :cost
|
505
|
+
```
|
506
|
+
|
507
|
+
## `Mgmg::Recipe#poly(para=self.para, **kw)`
|
508
|
+
`self.recipe.poly(para, opt: self.option)`を返します.`kw`が与えられた場合,オプションのうち,与えられたパラメータのみ一時的に上書きします.
|
509
|
+
|
510
|
+
## `Mgmg::Recipe#phydef_optimize(smith=nil, comp=smith, **kw)`,`Mgmg::Recipe#buster_optimize(smith=nil, comp=smith, **kw)`
|
511
|
+
`self.recipe.phydef_optimize(smith, comp, opt: self.option)`,`self.recipe.buster_optimize(smith, comp, opt: self.option)`を返します.`kw`が与えられた場合,オプションのうち,与えられたパラメータのみ一時的に上書きします.
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mgmg
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.5.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- KAZOON
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-06-
|
11
|
+
date: 2022-06-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -16,42 +16,42 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 2.
|
19
|
+
version: 2.3.16
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 2.
|
26
|
+
version: 2.3.16
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 13.0.
|
33
|
+
version: 13.0.6
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: 13.0.
|
40
|
+
version: 13.0.6
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: irb
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: 1.
|
47
|
+
version: 1.4.1
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: 1.
|
54
|
+
version: 1.4.1
|
55
55
|
description:
|
56
56
|
email:
|
57
57
|
- cycloawaodorin+gem@gmail.com
|
@@ -73,7 +73,9 @@ files:
|
|
73
73
|
- lib/mgmg/equip.rb
|
74
74
|
- lib/mgmg/ir.rb
|
75
75
|
- lib/mgmg/optimize.rb
|
76
|
+
- lib/mgmg/option.rb
|
76
77
|
- lib/mgmg/poly.rb
|
78
|
+
- lib/mgmg/recipe.rb
|
77
79
|
- lib/mgmg/reinforce.rb
|
78
80
|
- lib/mgmg/search.rb
|
79
81
|
- lib/mgmg/system_equip.rb
|
@@ -95,14 +97,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
95
97
|
requirements:
|
96
98
|
- - ">="
|
97
99
|
- !ruby/object:Gem::Version
|
98
|
-
version:
|
100
|
+
version: 3.1.0
|
99
101
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
100
102
|
requirements:
|
101
103
|
- - ">="
|
102
104
|
- !ruby/object:Gem::Version
|
103
105
|
version: '0'
|
104
106
|
requirements: []
|
105
|
-
rubygems_version: 3.3.
|
107
|
+
rubygems_version: 3.3.16
|
106
108
|
signing_key:
|
107
109
|
specification_version: 4
|
108
110
|
summary: Calculate specs of equipments of Megurimeguru, a game produced by Kou.
|