
No License
TypeScript
2021年03月29日
/**
* 藤井二冠の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.