[抱負]

ダブルクロスの達成値の平均値を求めるプログラムをschemeで書く、です。

昨日やったのが能力値2、技能0、クリティカル値11(クリティカルしない)、エフェクトは使用しないケース。
こんな感じ。

(define (roll-2dice-nocr)
  (-
   (apply +
		  (map (lambda (n)
				 (* (/ (- (expt n 2) (expt (- n 1) 2)) (expt 10.0 2)) n)
				 )
			   '(1 2 3 4 5 6 7 8 9 10))
		  )
   (/ 1 (expt 10.0 2))
   ))

で、この解き方を拡張して、

能力値X、技能0、クリティカル値11(クリティカルしない)、エフェクトは使用しないケース

を求める。
実はこのプログラムの2のところを関数の引数として抜き出すだけでいけるはず。
このプログラムの2のところは(ダイスのリストのところは別)昨日の説明の、面積の求めるところの2だから、ダイスを3つに増やした場合は体積になるだけなはず。
(…四次元以上の容積?の名称は知らないのでアレだけど、まあ理屈はあってるはず)
で、ソースコードにするとこんな感じ。

(define (roll-dice-nocr x)
  (-
   (apply +
		  (map (lambda (n)
				 (* (/ (- (expt n x) (expt (- n 1) x)) (expt 10.0 x)) n)
				 )
			   '(1 2 3 4 5 6 7 8 9 10))
		  )
   (/ 1 (expt 10.0 x))
   ))

実行結果はこんな感じ。

gosh> (roll-dice-nocr 1)
5.400000000000001
gosh> (roll-dice-nocr 2)
7.140000000000001
gosh> (roll-dice-nocr 3)
7.974
gosh> (roll-dice-nocr 4)
8.4666
gosh> (roll-dice-nocr 5)
8.79174
gosh> (roll-dice-nocr 6)
9.021594000000002
gosh> (roll-dice-nocr 7)
9.1919574
gosh> (roll-dice-nocr 8)
9.322686659999999
gosh> (roll-dice-nocr 9)
9.425695013999999
gosh> (roll-dice-nocr 10)
9.5085658074