最終更新: 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回攻撃を食らうとしても勝率は半分以上。ううむ。
隠れた条件を影響の大きそうな順に並べてみた。