anonymous 藤井聡太二冠の30連勝確率と3連敗確率
No License TypeScript
2021年03月29日
Copy Clone
/**
 * 藤井二冠の3連敗と30連勝の頻度を計算するプログラム
 */

/** 勝利確率 */
const winRate = 0.84;
/** 何連勝からカウントするか */
const winBorder = 30;
/** 何連敗からカウントするか */
const loseBorder = -3;

/** 試行回数(100億回) */
let count = 10000000000;

/** 現在の30連勝数 */
let win30Count = 0;
/** 現在の3連敗数 */
let lose3Count = 0;

/** 処理部分 */
{
  /** 現在の連勝、連敗数(マイナスが連敗) */
  let winLose = 0;

  /** 100億対局実行しておく(最後の1局はカウントされないが面倒なので割愛) */
  while (count > 0) {
    /** 勝敗判定 */
    const result: boolean = Math.random() < winRate;

    /** 勝利していた場合の処理  */
    if (result) {
      // 現在の連敗数をチェック
      // 3連敗以上だった場合には、3連敗数を増やしておく
      if (winLose <= loseBorder) {
        // 3連敗数を増やす
        lose3Count += 1;
      }

      // 連勝数を増やす
      // 既に連勝中だった場合には連勝数をインクリメント
      // 連敗中だった場合には連勝数を1にしておく
      winLose = winLose >= 1 ? winLose + 1 : 1;
    } else {
      // 敗北していた場合の処理

      // 現在の連勝数をチェック
      // 30連勝以上だった場合には、30連勝数を増やしておく
      if (winLose >= winBorder) {
        // 3連敗数を増やす
        win30Count += 1;
      }

      // 連勝数を増やす
      // 既に連勝中だった場合には連勝数をインクリメント
      // 連敗中だった場合には連勝数を1にしておく
      winLose = winLose <= -1 ? winLose - 1 : -1;
    }

    /** 残りの試行回数を減らしておく */
    count -= 1;

    if (count === 0) {
      /**
       * 結果の出力
       */

      console.log(`30連勝数:${win30Count}`);
      console.log(`3連敗数:${lose3Count}`);
      console.log(winLose);
    }
  }
}
/**
 * 藤井二冠の3連敗と30連勝の頻度を計算するプログラム
 */

/** 勝利確率 */
const winRate = 0.84;
/** 何連勝からカウントするか */
const winBorder = 30;
/** 何連敗からカウントするか */
const loseBorder = -3;

/** 試行回数(100億回) */
let count = 10000000000;

/** 現在の30連勝数 */
let win30Count = 0;
/** 現在の3連敗数 */
let lose3Count = 0;

/** 処理部分 */
{
  /** 現在の連勝、連敗数(マイナスが連敗) */
  let winLose = 0;

  /** 100億対局実行しておく(最後の1局はカウントされないが面倒なので割愛) */
  while (count > 0) {
    /** 勝敗判定 */
    const result: boolean = Math.random() < winRate;

    /** 勝利していた場合の処理  */
    if (result) {
      // 現在の連敗数をチェック
      // 3連敗以上だった場合には、3連敗数を増やしておく
      if (winLose <= loseBorder) {
        // 3連敗数を増やす
        lose3Count += 1;
      }

      // 連勝数を増やす
      // 既に連勝中だった場合には連勝数をインクリメント
      // 連敗中だった場合には連勝数を1にしておく
      winLose = winLose >= 1 ? winLose + 1 : 1;
    } else {
      // 敗北していた場合の処理

      // 現在の連勝数をチェック
      // 30連勝以上だった場合には、30連勝数を増やしておく
      if (winLose >= winBorder) {
        // 3連敗数を増やす
        win30Count += 1;
      }

      // 連勝数を増やす
      // 既に連勝中だった場合には連勝数をインクリメント
      // 連敗中だった場合には連勝数を1にしておく
      winLose = winLose <= -1 ? winLose - 1 : -1;
    }

    /** 残りの試行回数を減らしておく */
    count -= 1;

    if (count === 0) {
      /**
       * 結果の出力
       */

      console.log(`30連勝数:${win30Count}`);
      console.log(`3連敗数:${lose3Count}`);
      console.log(winLose);
    }
  }
}
No one still commented. Please first comment.