最終更新: 2012-11-11T20:48+0900
20121104の日記でシフに勝てないと書いた。結局大剣の間合いの外から魔法で倒したんだけど、あのまま接近戦を挑んでいた場合、あれ以上の上達がないとして、どれくらい勝ちの目があったのかを数えてみた。
# 灰色の大狼シフに勝つ目の数 freq = [1] + [0] * 20 # freq[i]: i回攻撃に成功した場合の数。20回攻撃に成功すれば勝利。 dead = 0 # 死亡した場合の数。2回分のダメージで死ぬ。 Attack = 2 # 3回に2回は攻撃(回復)に成功する。 Damage = 1 # 3回に1回は攻撃を食らう。 0.upto(0/0.0) {|step| # これまでに実行した行動の数。無限ループにしてるけど 40回目で終わり。 19.downto(0) {|i| estus = [[(step - i) / 2, 0].max, 10].min # これまでにエスト瓶を使用した回数。0回から10回。 damaged = step - i - estus - estus == 1 # すでに一撃食らっているかどうか。 a, d, freq[i] = freq[i]*Attack, freq[i]*Damage, 0 if not damaged freq[i] = d # 受傷 freq[i+1] += a # 攻撃 else dead += d # 死亡 if estus == 10 or i == 19 freq[i+1] += a # 攻撃 else freq[i] = a # 回復 end end } break if freq.inject(&:+) == freq.last } puts "win: %d (%.1f%%)" % [freq.last, 100.0*freq.last/(freq.last+dead)] puts "dead: %d (%.1f%%)" % [dead , 100.0*dead /(freq.last+dead)] #=> win: 71351031113449472 (63.1%) #=> dead: 41659564283659605 (36.9%)
バグってるんだろうか 6割も勝てるなんて思えない。5回に2回攻撃を食らうとしても勝率は半分以上。ううむ。
隠れた条件を影響の大きそうな順に並べてみた。