/** * 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) + '%)ゲット!'; }