/** * Random sampling * by Kazuki Maeda * Last-Modified: Mar. 15, 2015 */ window.onload = function(){ document.getElementById('population').addEventListener('keypress', enter, true); document.getElementById('samplesize').addEventListener('keypress', enter, true); document.getElementById('sampling').addEventListener('click', sampling, true); } function numComp(a, b){ return a-b; } function sampling(){ var population = Math.floor(document.getElementById('population').value); var samplesize = Math.floor(document.getElementById('samplesize').value); var lang = document.getElementById('lang').value; if(isNaN(population) || population <= 0){ if(lang == 'en') document.getElementById('result').innerHTML = 'Specify a positive interger for the size of population.'; else document.getElementById('result').innerHTML = '母集団の大きさには正の整数を指定して下さい.'; return; } if(isNaN(samplesize) || samplesize <= 0){ if(lang == 'en') document.getElementById('result').innerHTML = 'Specify a positive interger for the size of sample.'; else document.getElementById('result').innerHTML = '標本の大きさには正の整数を指定して下さい.'; return; } if(population <= samplesize){ if(lang == 'en') document.getElementById('result').innerHTML = 'The size of sample should be less than the size of population.'; else document.getElementById('result').innerHTML = '標本の大きさは母集団の大きさ未満にして下さい.'; return; } var p = population; var pl = new Array(); for(var i = 0; i < population; ++i) pl[i] = i+1; var res = new Array(); for(var i = 0; i < samplesize; ++i){ var r = Math.floor(Math.random()*p); res[i] = pl[r]; pl.splice(r, 1); --p; } res.sort(numComp); var result; if(lang == 'en') result = 'Result' else result = '抽出結果' result += ' (' + samplesize + '/' + population + '):
'; for(var i = 0; i < samplesize; ++i){ result += res[i]; if(i != samplesize-1) result += ', '; } document.getElementById('result').innerHTML = result + ''; } function enter(e){ if(e.keyCode == 13) sampling(); }