Skip to content

Instantly share code, notes, and snippets.

@haraldh
Last active October 13, 2015 16:00
Show Gist options
  • Save haraldh/6ebd52d2fcc0ee3f1bf0 to your computer and use it in GitHub Desktop.
Save haraldh/6ebd52d2fcc0ee3f1bf0 to your computer and use it in GitHub Desktop.
<!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;">
&nbsp;&nbsp;&nbsp; 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;">
&nbsp;&nbsp;&nbsp; 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