1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120 | /**
* 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 = '<em>履歴:</em>' + historytext + '<hr>' + pushtext ;
if(addhistoryflag)
historytext = historytext + '<br>' + pushtext;
}
function retry(){
document.getElementById('result').innerHTML = '';
mode = 'push';
numpush = 0;
pushtext = '';
document.getElementById('result').innerHTML = '<em>履歴:</em>' + historytext + '<hr>' + 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 = 'パンダを<em>' +
numchallenges.toFixed() + '匹</em>ゲットするのに:<hr>';
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 += '<em>' + (k+1) + '回でゲット:</em>';
document.getElementById('result').innerHTML += t + '匹(' + (t/numchallenges*100).toFixed(5) + '%)累積' + sumstat + '匹(' + (sumstat/numchallenges*100).toFixed(5) + '%)<br>';
}
}
document.getElementById('result').innerHTML += '<hr><em>合計:</em>くま' + bear + (sum-numchallenges.toFixed()) + '匹(' + ((sum-numchallenges.toFixed())/sum*100).toFixed(5) + '%),パンダ' + panda + numchallenges.toFixed() + '匹(' + ((numchallenges.toFixed())/sum*100).toFixed(5) + '%)ゲット!';
}
|