Guest User

Untitled

a guest
Feb 25th, 2018
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.26 KB | None | 0 0
  1. // 5勝でOKラインになり8敗で割れる ⇒ 5勝7敗までセーフ
  2. // であるから、求める確率は
  3. // 4勝n敗してから5勝目をおさめる確率 (n = 0, 1, ..., 7)
  4. // = (4勝0敗の確率 + 4勝1敗の確率 + 4勝2敗の確率 + ... + 4勝7敗の確率) × 5勝目をする確率
  5. // $= (_4C_0p^4 + _5C_1p^4(1-p)+ _6C_2p^4(1-p)^2 + \cdots + _{11}C_7p^4(1-p)^7)\cdot p$
  6. // ただし p は勝率とする
  7.  
  8. // nPk
  9. const permutation = (n, k) => Array.from({length: k}, (_, i) => n - i).reduce((a, b) => a * b, 1);
  10.  
  11. // nCk
  12. const combination = (n, k) => {
  13. const k2 = Math.min(k, n - k);
  14. return permutation(n, k2) / permutation(k2, k2);
  15. };
  16.  
  17. // 勝率pの人がwin勝lose敗する確率 良い命名思いつかん
  18. const t = p => (win, lose) => combination(win + lose, win) * (p ** win) * ((1 - p) ** lose);
  19.  
  20. // 計算結果 pをまとめたほうがパフォーマンスはいいけど、こっちのほうが使いやすい
  21. const probability = p => Array.from({length: 8}, (_, lose) => t(p)(4, lose)).reduce((a, b) => a + b) * p;
  22.  
  23. // いろんな勝率でやる
  24. const result = {};
  25. for (let i = 35; i <= 75; i++) {
  26. // 適当に四捨五入
  27. result[`${i}%`] = `${Math.round(probability(i / 100) * 1000) / 10}%`;
  28. }
  29.  
  30. console.log(JSON.stringify(result, null, " "));
Add Comment
Please, Sign In to add comment