Last active
October 13, 2015 16:00
-
-
Save haraldh/6ebd52d2fcc0ee3f1bf0 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!DOCTYPE html> | |
<html lang="en-US"> | |
<head> | |
<meta charset="UTF-8" /> | |
<title>Cost of Reinforcement Simulator</title> | |
<style> | |
table, th, td { | |
border: 1px solid white; | |
border-collapse: collapse; | |
} | |
th, td { | |
padding: 5px; | |
} | |
td { | |
text-align: right; | |
} | |
body | |
{ | |
-webkit-text-size-adjust: 100%; | |
-moz-text-size-adjust: 100%; | |
-ms-text-size-adjust: 100%; | |
text-size-adjust: 100%; | |
font-family: 'Trebuchet MS', Helvetica, Arial, sans-serif; | |
color: rgb(255, 255, 255); | |
background-color: rgb(0,0,0); | |
background: url('https://i.imgur.com/SPaW4Xa.jpg') center top no-repeat black; | |
background-size: 1980px; | |
word-wrap: break-word; | |
line-height: 1.28; | |
} | |
#navigation.pageContent { | |
background-color: #000; | |
padding-right: 5px; | |
padding-left: 5px; | |
margin: 0 5%; | |
margin: 0 auto; | |
-webkit-box-sizing: border-box; -moz-box-sizing: border-box; -ms-box-sizing: border-box; box-sizing: border-box; | |
max-width: 980px; | |
float: center; | |
width: 80%; | |
} | |
</style> | |
</head> | |
<body> | |
<script type="text/javascript"> | |
function getRandomInt(min, max) { | |
return Math.floor(Math.random() * (max - min + 1)) + min; | |
} | |
function simulation() { | |
var item_min = parseInt(document.getElementById("item_min").value, 10); | |
var item_max = parseInt(document.getElementById("item_max").value, 10); | |
var target = parseInt(document.getElementById("target").value, 10); | |
var num_simulation = parseInt(document.getElementById("num_simulation").value, 10); | |
var cost = document.getElementById("cost").value; | |
var ore = document.getElementById("ore").value; | |
var si = [ 0,0,0,0,0,0,0,0,0,0 ]; | |
var sm = 0; | |
for (i=0; i<10; i++) { | |
si[i] = parseInt(document.getElementById("value" + (i + 1)).value, 10); | |
} | |
si.sort(function(a, b){return a-b}); | |
var st = Math.floor(item_max * (target-1) / 10) + 1; | |
var ct = []; | |
smi = si.reduce(function(pv, cv) { return pv + cv; }, 0); | |
for(k=0; k < num_simulation; k++) { | |
var n = 0; | |
var s = si.slice(); | |
var sm = smi; | |
while (sm < st) { | |
var t = getRandomInt(item_min, item_max); | |
if (t > s[0]) { | |
sm = sm - s[0] + t; | |
s[0] = t; | |
s.sort(function(a, b){return a-b}); | |
} | |
n += 1; | |
} | |
ct.push(n); | |
} | |
ct.sort(function(a, b){return a-b}); | |
var init_draws = 0; | |
for (i=0; i<10; i++) | |
if (si[i] == 0) | |
init_draws++; | |
var text = "<hr/>"; | |
text += "<p>" + num_simulation + " simulation runs for item range " + item_min + "-" + item_max + " - Cost " + cost + "</p>"; | |
text += "<p>Initial slot values: "; | |
for (i=0; i<10; i++) | |
text+=si[i] + " "; | |
text += "</p><p>You have to reach the sum: " + st + "</p>"; | |
text += "<p>Chance of reinforcing your item with a number of reinforcements and a cost less than the amount of gold."; | |
var p = [ 25, 50, 75, 90]; | |
text += "<table><tr><th colspan=\"4\">" + target + "%</th></tr><tr><th>Chance</th><th>Reinforcements</th><th>Iron Ore</th><th>Gold</th></tr>"; | |
for (i=0; i < 4; i++) { | |
// calculate the cost | |
var c=0; | |
var draws = ct[num_simulation*p[i]/100]; | |
// Initial cost is half | |
c += Math.min(draws, init_draws) * cost/2; | |
c += Math.max(0, draws - init_draws) * cost; | |
var nore = ct[num_simulation*p[i]/100] * ore; | |
text += "<tr><td>" + p[i] + "%</td><td>" + ct[num_simulation*p[i]/100] + "</td><td>" + nore.toLocaleString() + "</td><td>" + c.toLocaleString() + "</td></tr>"; | |
} | |
text += "</table></p>"; | |
document.getElementById('result').innerHTML = text + document.getElementById('result').innerHTML; | |
} | |
</script> | |
<section> | |
<div id="navigation" class="pageContent"> | |
<p> | |
<p>Strategy: reinforce the lowest value. The more simulation runs, the better the results. 100000 gives pretty good results.</p> | |
<p>Number of Simulations: <input type="number" id="num_simulation" value="100000" min="100" max="1000000" style="width: 7em;"></p> | |
<p>Iron Ore: <input type="number" id="ore" value="300" maxlength="5" style="width: 5em;"> | |
Cost of reinforcement: <input type="number" id="cost" value="60000" maxlength="5" style="width: 5em;"></p> | |
<p>Target Percentage to reach: <input type="number" id="target" value="95" min="0" max="100" maxlength="3" style="width: 3em;"> | |
Item range: <input type="number" id="item_min" value="9" style="width: 4em;" maxlength="4"> - <input type="number" id="item_max" value="35" style="width: 4em;" maxlength="4"></p> | |
<p> | |
Initial Slot Values: | |
<table> | |
<tr><td>1</td><td><input type="number" id="value1" value="0" maxlength="4" style="width: 4em;"></td></tr> | |
<tr><td>2</td><td><input type="number" id="value2" value="0" maxlength="4" style="width: 4em;"></td></tr> | |
<tr><td>3</td><td><input type="number" id="value3" value="0" maxlength="4" style="width: 4em;"></td></tr> | |
<tr><td>4</td><td><input type="number" id="value4" value="0" maxlength="4" style="width: 4em;"></td></tr> | |
<tr><td>5</td><td><input type="number" id="value5" value="0" maxlength="4" style="width: 4em;"></td></tr> | |
<tr><td>6</td><td><input type="number" id="value6" value="0" maxlength="4" style="width: 4em;"></td></tr> | |
<tr><td>7</td><td><input type="number" id="value7" value="0" maxlength="4" style="width: 4em;"></td></tr> | |
<tr><td>8</td><td><input type="number" id="value8" value="0" maxlength="4" style="width: 4em;"></td></tr> | |
<tr><td>9</td><td><input type="number" id="value9" value="0" maxlength="4" style="width: 4em;"></td></tr> | |
<tr><td>10</td><td><input type="number" id="value10" value="0" maxlength="4" style="width: 4em;"></td></tr> | |
</table> | |
</p> | |
<button onclick="simulation()">Simulate</button> | |
</p> | |
<p id="result"><hr/></p> | |
</div> | |
</section> | |
<footer><hr/><div style="float: left; padding:10px;"><p><a href="http://forum.angelstonegame.com/index.php?threads/reinforcement-calculator.10576/">Feedback</a></p></div> | |
<div style="float: left;padding:10px;"><p>Donate via Paypal: <form action="https://www.paypal.com/cgi-bin/webscr" method="post" target="_top"> | |
<input type="hidden" name="cmd" value="_s-xclick"> | |
<input type="hidden" name="hosted_button_id" value="KNAQ4YX83Y5FY"> | |
<input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_donateCC_LG.gif" border="0" name="submit" alt="Donate with PayPal"> | |
<img alt="" border="0" src="https://www.paypalobjects.com/en_US/i/scr/pixel.gif" width="1" height="1"> | |
</form></p></div> | |
<div style="float: left;padding:10px;"><p>Donate with Bitcoin:<a style="vertical-align:top; padding:30px;" href="bitcoin:176b1aAMS89XMFn4zYaKHLrcmP7Bwv1KBK?label=Reinforcement%20Donation"><img border="0" src="donation.png" alt="1KzTSfqjF2iKCduwz59nv2uqh1W2JsTxZH"></a></p></div> | |
</footer> | |
</body> </html> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment