/**
* Capsule Toy Machine
* by Kazuki Maeda
* Last-Modified: Dec. 6, 2022
*/
const prob = 100; // 逆数が当たり確率
const bear = '🐻';
const panda = '🐼';
let mode = '';
let numpush = 0;
let prize = 0;
let stat;
let pushtext;
let historytext;
window.onload = function(){
if(document.getElementById('push'))
document.getElementById('push').addEventListener('click', push, true);
if(document.getElementById('challenges'))
document.getElementById('challenges').addEventListener('click', challenges, true);
if(document.getElementById('retry'))
document.getElementById('retry').addEventListener('click', retry, true);
}
function push(){
if(mode != 'push'){
if(mode != 'pushcontinue'){
historytext = '';
}
document.getElementById('result').innerHTML = '';
mode = 'push';
numpush = 0;
pushtext = '';
}
let r = Math.floor(Math.random()*prob);
let addhistoryflag = false;
let rchar;
++numpush;
if(r){
pushtext += bear;
} else {
pushtext += panda + ':' + numpush + '回でパンダ当たり!!';
addhistoryflag = true;
mode = 'pushcontinue';
let push = document.getElementById('push');
push.disabled = true;
push.style.color = 'yellow';
document.getElementById('retry').style.visibility = 'visible';
}
document.getElementById('result').innerHTML = '履歴:' + historytext + '
' + pushtext ;
if(addhistoryflag)
historytext = historytext + '
' + pushtext;
}
function retry(){
document.getElementById('result').innerHTML = '';
mode = 'push';
numpush = 0;
pushtext = '';
document.getElementById('result').innerHTML = '履歴:' + historytext + '
' + pushtext ;
let push = document.getElementById('push');
push.disabled = false;
push.style.color = 'red';
document.getElementById('retry').style.visibility = 'hidden';
}
function addstat(stat, n){
if(typeof stat[n] === 'undefined')
stat[n] = 1;
else
++stat[n];
}
function challenges(){
mode = 'challenges';
let numchallenges = Math.floor(document.getElementById('numchallenges').value);
prize = 0;
let restext = '';
let stat = [];
document.getElementById('result').innerHTML = '';
for(let k = 0; k < numchallenges; ++k){
numpush = 0;
while(1){
let r = Math.floor(Math.random()*prob);
let rchar;
if(r){
++numpush;
} else {
addstat(stat, numpush);
let t = Math.pow(2, numpush);
prize += t;
}
if(!r)
break;
}
}
document.getElementById('result').innerHTML = 'パンダを' +
numchallenges.toFixed() + '匹ゲットするのに:
';
sumstat = 0;
sum = 0;
for(let k = 0; k < stat.length; ++k){
let t;
if(typeof stat[k] === 'undefined')
t = 0;
else
t = stat[k];
if(t){
sumstat += t;
sum += t*(k+1);
document.getElementById('result').innerHTML += '' + (k+1) + '回でゲット:';
document.getElementById('result').innerHTML += t + '匹(' + (t/numchallenges*100).toFixed(5) + '%)累積' + sumstat + '匹(' + (sumstat/numchallenges*100).toFixed(5) + '%)
';
}
}
document.getElementById('result').innerHTML += '
合計:くま' + bear + (sum-numchallenges.toFixed()) + '匹(' + ((sum-numchallenges.toFixed())/sum*100).toFixed(5) + '%),パンダ' + panda + numchallenges.toFixed() + '匹(' + ((numchallenges.toFixed())/sum*100).toFixed(5) + '%)ゲット!';
}