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