チバリヨ2シミュレータ JSコード
JavaScriptで書いたチバリヨ2の虹パト〜リミットレスモード終了までの獲得枚数シミュレータです。
虹パトから開始時
平均ボーナス回数:21.23回(ループ率:約94.24%)
平均合計獲得枚数:4935.76枚
有利区間切りからツラヌキ発動時
平均ボーナス回数:14.40回(ループ率:約93.1%)
平均合計獲得枚数:3352.97枚
// 状態
const STATE_A = "A";
const STATE_B = "B";
const STATE_END = "END";
// 獲得個数
const PRIZE_COUNT_SBIG = 315;
const PRIZE_COUNT_BIG = 210;
const PRIZE_COUNT_REG = 90;
// 状態遷移確率
const PROB_A_TO_B_FAIL = 0.08;
const PROB_B_UP = 0.15;
const PROB_B_END = 0.12;
// 獲得個数確率
const PROB_PRIZE_COUNT_SBIG = 0.5;
const PROB_PRIZE_COUNT_BIG = 0.25;
const PROB_PRIZE_COUNT_REG = 0.25;
// シミュレーション回数
const SIMULATION_COUNT = 10000;
// 定数
const MAX_PRIZE_PER_YURI = 2000;
const MAX_PRIZE_PER_DRAW = 19000;
// シミュレーション実行
function simulate() {
let totalDraws = 0;
let totalPrizeCount = 0;
for (let i = 0; i < SIMULATION_COUNT; i++) {
let state = STATE_A;
let totalPrize = 0;
let totalPrizeYuri = 0;
let draws = 0;
while (true) {
draws++;
// 状態遷移
state = transitionState(state);
// 獲得枚数
const prizeCount = getPrizeCount();
totalPrize += prizeCount;
totalPrizeYuri += prizeCount;
// 有利区間終了条件枚数を超えたら有利区間を切り状態Bへ移行
if (totalPrizeYuri >= MAX_PRIZE_PER_YURI) {
state = STATE_B;
totalPrizeYuri=0;
}
// 終了状態かコンプリートしたら終了
if (state === STATE_END || totalPrize >= MAX_PRIZE_PER_DRAW) {
break;
}
}
totalDraws += draws;
totalPrizeCount += totalPrize;
}
// 平均計算
const averageDraws = totalDraws / SIMULATION_COUNT;
const averagePrizeCount = totalPrizeCount / SIMULATION_COUNT;
// 結果出力
console.log(`平均抽選回数:${averageDraws.toFixed(2)}回`);
console.log(`平均合計獲得枚数:${averagePrizeCount.toFixed(2)}枚`);
}
// 状態遷移処理
function transitionState(state) {
if (state === STATE_A) {
if (Math.random() < PROB_A_TO_B_FAIL) {
return STATE_B;
}
} else if (state === STATE_B) {
const rand = Math.random();
if (rand < PROB_B_UP) {
return STATE_A;
} else if (rand < PROB_B_UP + PROB_B_END) {
return STATE_END;
}
}
return state;
}
// 獲得個数取得
function getPrizeCount() {
const rand = Math.random();
if (rand < PROB_PRIZE_COUNT_SBIG) {
return PRIZE_COUNT_SBIG;
} else if (rand < PROB_PRIZE_COUNT_SBIG + PROB_PRIZE_COUNT_BIG) {
return PRIZE_COUNT_BIG;
} else {
return PRIZE_COUNT_REG;
}
}
// シミュレーション実行
simulate();
この記事が気に入ったらサポートをしてみませんか?