mgmg 1.8.1 → 1.8.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +3 -0
- data/lib/mgmg/recipe.rb +16 -8
- data/lib/mgmg/search.rb +11 -4
- data/lib/mgmg/utils.rb +4 -0
- data/lib/mgmg/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 67f8cb095fc1716b95438a8eda538d4318811ee2f204c93a75c78b6814951f37
|
4
|
+
data.tar.gz: e17d1ae24f42c252332ae48ab8698faa1c79d1315bf3cd686fa6ee8fd9a8e306
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9289ac21117cfc2d1177e17c3a5ad8b1b329800013959a7261f9b16b9d399e6f4820ec6d6f5b3cce51deaa11dbf0b9a2285ee6ed5f5a9131d657821d531f3203
|
7
|
+
data.tar.gz: d9c86b0ce3d605d52e574ca63722f56d23e6d07f7f3e46bf105abc321620edcc8eae5f5e29b00ac4866976e51eafc6a363d5761029891bde0cc8566b48ff67ee
|
data/CHANGELOG.md
CHANGED
@@ -194,3 +194,6 @@
|
|
194
194
|
- `Mgmg::Recipe`に`name`属性を追加.`String/Enumerable#to_recipe`の際,キーワード引数`name`を追加することで設定できる.
|
195
195
|
- `Mgmg.#efficient_list` を追加.
|
196
196
|
- `Enumerable#build`,`Enumerable#search`で意図せぬ例外が発生していた問題を修正.
|
197
|
+
|
198
|
+
## 1.8.2 2022/11/21
|
199
|
+
- オプション`cut_exp`で探索が打ち切られる場合に,`Mgmg::SearchCutException`でない例外が発生する場合があったバグを修正.
|
data/lib/mgmg/recipe.rb
CHANGED
@@ -86,16 +86,24 @@ module Mgmg
|
|
86
86
|
raise BrokenRecipeError
|
87
87
|
end
|
88
88
|
end
|
89
|
-
def show(smith=-1, armor=smith, comp=armor.tap{armor=smith}, para: @para, **kw)
|
89
|
+
def show(smith=-1, armor=smith, comp=armor.tap{armor=smith}, para: @para, search: nil, find_max: nil, **kw)
|
90
90
|
opt = temp_opt(**kw)
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
@recipe.show(
|
91
|
+
if search
|
92
|
+
sc = @recipe.search(para, search, opt:)
|
93
|
+
@recipe.show(*sc, para:, name: @name, opt:)
|
94
|
+
elsif find_max
|
95
|
+
sc = @recipe.search(para, find_max, opt:)
|
96
|
+
@recipe.show(*sc, para:, name: @name, opt:)
|
97
97
|
else
|
98
|
-
|
98
|
+
smith, armor, comp = opt.smith_min, opt.armor_min, opt.comp_min if smith.nil?
|
99
|
+
case @recipe
|
100
|
+
when String
|
101
|
+
@recipe.show(smith, comp, para:, name: @name, opt:)
|
102
|
+
when Enumerable
|
103
|
+
@recipe.show(smith, armor, comp, para:, name: @name, opt:)
|
104
|
+
else
|
105
|
+
raise BrokenRecipeError
|
106
|
+
end
|
99
107
|
end
|
100
108
|
end
|
101
109
|
def search(target, para: @para, **kw)
|
data/lib/mgmg/search.rb
CHANGED
@@ -69,6 +69,7 @@ class String
|
|
69
69
|
[exp_best, ret]
|
70
70
|
end
|
71
71
|
def search(para, target, opt: Mgmg::Option.new)
|
72
|
+
org_cut_exp = opt.cut_exp
|
72
73
|
opt = opt.dup.set_default(self)
|
73
74
|
opt_nocut = opt.dup; opt_nocut.cut_exp = Float::INFINITY
|
74
75
|
begin
|
@@ -109,6 +110,7 @@ class String
|
|
109
110
|
end
|
110
111
|
end
|
111
112
|
exp_best = opt.cut_exp
|
113
|
+
values = values.filter(&:finite?)
|
112
114
|
diff = values.max-values.min
|
113
115
|
if 0 < diff
|
114
116
|
opt.cut_exp = exp_best + diff*opt.fib_ext[0]
|
@@ -124,8 +126,8 @@ class String
|
|
124
126
|
end
|
125
127
|
end
|
126
128
|
if ret.nil?
|
127
|
-
max = opt.irep.para_call(para, *find_max(para,
|
128
|
-
raise Mgmg::SearchCutException, "the maximum output with given cut_exp=#{
|
129
|
+
max = opt.irep.para_call(para, *find_max(para, org_cut_exp, opt:))
|
130
|
+
raise Mgmg::SearchCutException, "the maximum output with given cut_exp=#{org_cut_exp.comma3} is #{max.comma3}, which does not reach given target=#{target.comma3}"
|
129
131
|
end
|
130
132
|
ret
|
131
133
|
end
|
@@ -178,6 +180,7 @@ class String
|
|
178
180
|
values = [values[1], values[2], cur, values[3]]
|
179
181
|
end
|
180
182
|
end
|
183
|
+
values = values.filter(&:finite?)
|
181
184
|
diff = values.max-values.min
|
182
185
|
if 0 < diff
|
183
186
|
th = max - diff*opt.fib_ext[1]
|
@@ -338,6 +341,7 @@ module Enumerable
|
|
338
341
|
[exp_best, ret]
|
339
342
|
end
|
340
343
|
def search(para, target, opt: Mgmg::Option.new)
|
344
|
+
org_cut_exp = opt.cut_exp
|
341
345
|
opt = opt.dup.set_default(self)
|
342
346
|
begin
|
343
347
|
opt.comp_min = comp_search(para, target, opt.smith_max, opt.armor_max, opt:)
|
@@ -377,6 +381,7 @@ module Enumerable
|
|
377
381
|
end
|
378
382
|
end
|
379
383
|
exp_best = opt.cut_exp
|
384
|
+
values = values.filter(&:finite?)
|
380
385
|
diff = values.max-values.min
|
381
386
|
if 0 < diff
|
382
387
|
opt.cut_exp = exp_best + diff*opt.fib_ext[0]
|
@@ -392,8 +397,8 @@ module Enumerable
|
|
392
397
|
end
|
393
398
|
end
|
394
399
|
if ret.nil?
|
395
|
-
max = opt.irep.para_call(para, *find_max(para,
|
396
|
-
raise Mgmg::SearchCutException, "the maximum output with given cut_exp=#{
|
400
|
+
max = opt.irep.para_call(para, *find_max(para, org_cut_exp, opt:))
|
401
|
+
raise Mgmg::SearchCutException, "the maximum output with given cut_exp=#{org_cut_exp.comma3} is #{max.comma3}, which does not reach given target=#{target.comma3}"
|
397
402
|
end
|
398
403
|
ret
|
399
404
|
end
|
@@ -444,6 +449,7 @@ module Enumerable
|
|
444
449
|
cur = cur_i if cur < cur_i
|
445
450
|
end
|
446
451
|
end
|
452
|
+
a_vals = a_vals.filter(&:finite?)
|
447
453
|
diff = a_vals.max-a_vals.min
|
448
454
|
if 0 < diff
|
449
455
|
th = max - diff*opt.fib_ext[1]
|
@@ -486,6 +492,7 @@ module Enumerable
|
|
486
492
|
values = [values[1], values[2], cur, values[3]]
|
487
493
|
end
|
488
494
|
end
|
495
|
+
values = values.filter(&:finite?)
|
489
496
|
diff = values.max-values.min
|
490
497
|
if 0 < diff
|
491
498
|
th = max - diff*opt.fib_ext[1]
|
data/lib/mgmg/utils.rb
CHANGED
@@ -166,6 +166,7 @@ module Mgmg
|
|
166
166
|
end
|
167
167
|
end
|
168
168
|
module_function def invexp2(exp, comp)
|
169
|
+
raise ArgumentError, "exp must be finite" unless exp.finite?
|
169
170
|
begin
|
170
171
|
ret = Math.sqrt(exp - (2*((comp-1)**2)) - 3).floor + 2
|
171
172
|
rescue Math::DomainError
|
@@ -178,6 +179,7 @@ module Mgmg
|
|
178
179
|
end
|
179
180
|
end
|
180
181
|
module_function def invexp2c(exp, s)
|
182
|
+
raise ArgumentError, "exp must be finite" unless exp.finite?
|
181
183
|
begin
|
182
184
|
ret = Math.sqrt((exp - (((s-1)**2)) - 3).quo(2)).floor + 2
|
183
185
|
rescue Math::DomainError
|
@@ -190,6 +192,7 @@ module Mgmg
|
|
190
192
|
end
|
191
193
|
end
|
192
194
|
module_function def invexp3(exp, sa, comp)
|
195
|
+
raise ArgumentError, "exp must be finite" unless exp.finite?
|
193
196
|
return invexp2(exp, comp) if sa < 0
|
194
197
|
begin
|
195
198
|
ret = Math.sqrt(exp - ((sa-1)**2) - (2*((comp-1)**2)) - 4).floor + 2
|
@@ -203,6 +206,7 @@ module Mgmg
|
|
203
206
|
end
|
204
207
|
end
|
205
208
|
module_function def invexp3c(exp, smith, armor)
|
209
|
+
raise ArgumentError, "exp must be finite" unless exp.finite?
|
206
210
|
if smith < 0
|
207
211
|
return invexp2c(exp, armor)
|
208
212
|
elsif armor < 0
|
data/lib/mgmg/version.rb
CHANGED
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.8.
|
4
|
+
version: 1.8.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-11-
|
11
|
+
date: 2022-11-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|