"use strict"; //List of species and their number of villagers. var species = { "イヌ": 16, "カエル": 18, "アリクイ": 7, "ゴリラ": 9, "ネコ": 23, "クマ": 15, "オオカミ": 11, "リス": 18, "ニワトリ": 9, "ワシ": 9, "ブタ": 15, "ウマ": 15, "タコ": 3, "シカ": 10, "ライオン": 7, "トリ": 13, "オウシ": 6, "コグマ": 16, "ワニ": 7, "メウシ": 4, "ヒツジ": 13, "ヤギ": 8, "アヒル": 17, "サル": 8, "ネズミ": 15, "カンガルー": 8, "ゾウ": 11, "サイ": 6, "コアラ": 9, "ダチョウ": 10, "ウサギ": 20, "ペンギン": 13, "カバ": 7, "ハムスター": 8, "トラ": 7, }; var speciesSelector = document.getElementById('species-select'); var result = document.getElementById('result'); var currentFormula = document.getElementById('formula-span'); //Create Chart var ctx = document.getElementById('myChart').getContext('2d'); var myChart = new Chart(ctx, { type: 'line', data: { datasets: [{ label: '確率', data: [], backgroundColor: [ 'rgba(255, 99, 132, 0.2)', ], borderColor: [ 'rgba(255, 99, 132, 1)', ], pointRadius: 0, borderWidth: 1 }] }, options: { title: { display: true, text: "確率/チケット数" } } }); //Creates the entries in the villager species select. for (var villagerKind in species) { var opt = document.createElement('option'); opt.value = villagerKind; opt.innerHTML = villagerKind; speciesSelector.appendChild(opt); } function calculateVillagersOdds() { //Get the user inputs. var numberOfVillager = species[document.getElementById("species-select").value]; var selectedSpecies = document.getElementById("species-select").value.toLowerCase(); var numberOwned = +document.getElementById("villager-number").value; var nmtNumber = +document.getElementById("nmt-number").value; var decimalPlaces = +document.getElementById("decimal-places").value; //Limits the number of decimal places to 1 (would also break toFixed() if user entered something smaller than 1). if (decimalPlaces < 1) { decimalPlaces = 1; } //Update the number of species that can be found if the user has complete species on his island (eg: all octopi and all cows...). var numberOfSpecies = Object.keys(species).length; if (document.getElementById('has-1-species').checked || document.getElementById('has-2-species').checked) { numberOfSpecies--; if (document.getElementById('has-2-species').checked) { numberOfSpecies--; } } var percent = (1 / numberOfSpecies * 1 / (numberOfVillager - numberOwned) * 100).toFixed(decimalPlaces); //Calculate the odds of finding a specific villager based on the number of tickets. var bernoulli = (100 - Math.pow((100 - (1 / numberOfSpecies * 1 / (numberOfVillager - numberOwned) * 100)) / 100, nmtNumber) * 100).toFixed(decimalPlaces); //Don't blame me if you don't get Raymond in 40000 islands. if (bernoulli == 100) { bernoulli = 99.99; } //Calcalates the fractional odds. var fractionalOdd = 1 / ((1 / numberOfSpecies * 1 / (numberOfVillager - numberOwned) * 100) / 100); //Check if the percent is positive and not equal to 0. Which would mean that the number of villager entered is greater than the number within the species. if (Math.sign(percent) !== -1 && Math.sign(percent) !== 0 && isFinite(percent)) { result.innerHTML = "あなたがゲームプレイをして "+selectedSpecies +"" + " 種一匹に会う確率は " + percent + "% (1:" + Math.round(fractionalOdd) + ") です。

マイルりょこうけん一つあたり " + (1/numberOfSpecies * 100).toFixed(decimalPlaces) + "% (1:" + numberOfSpecies + ") の確率を持っています。 "; currentFormula.innerHTML = "

公式: 1/" + numberOfSpecies + " * 1/(" + numberOfVillager + "-" + numberOwned + ")"; //Check if the entered number of NMT is greater than 1. Otherwise the result would be the same as the line above. if (Math.sign(nmtNumber) !== -1 && Math.sign(nmtNumber) !== 0 && nmtNumber !== 1 && !isNaN(nmtNumber)) { result.innerHTML += "

あなたはマイルりょこうけん "+nmtNumber+"個を使用であれば、当該住民に会う確率は" + bernoulli + "% です。 "; } } else { result.innerHTML = "入力した数は、その種内の村人の数よりも多くなっています。"; currentFormula.innerHTML = ""; } updateChart(nmtNumber, numberOfSpecies, numberOwned, decimalPlaces, numberOfVillager); } function updateChart(nmtNumber, numberOfSpecies, numberOwned, decimalPlaces, numberOfVillager) { var probArray = []; var labelArray = []; if(nmtNumber < 1000) { for (let index = 0; index <= nmtNumber; index++) { probArray.push((100 - Math.pow((100 - (1 / numberOfSpecies * 1 / (numberOfVillager - numberOwned) * 100)) / 100, index) * 100).toFixed(decimalPlaces)) labelArray.push("" + index); } } else if (nmtNumber < 10000) { for (let index = 0; index <= nmtNumber; index+=10) { probArray.push((100 - Math.pow((100 - (1 / numberOfSpecies * 1 / (numberOfVillager - numberOwned) * 100)) / 100, index) * 100).toFixed(decimalPlaces)) labelArray.push("" + index); } } else if (nmtNumber < 50000){ for (let index = 0; index <= nmtNumber; index+=100) { probArray.push((100 - Math.pow((100 - (1 / numberOfSpecies * 1 / (numberOfVillager - numberOwned) * 100)) / 100, index) * 100).toFixed(decimalPlaces)) labelArray.push("" + index); } } else { for (let index = 0; index <= nmtNumber; index+=1000) { probArray.push((100 - Math.pow((100 - (1 / numberOfSpecies * 1 / (numberOfVillager - numberOwned) * 100)) / 100, index) * 100).toFixed(decimalPlaces)) labelArray.push("" + index); } } myChart.data.datasets[0].data = probArray; myChart.data.labels = labelArray; myChart.update(); }