JSFiddle - React, Tailwind, and code Playground
by robgallen
HTML
<form>
Capacity required: <input type="text" id="capacity" value="1850000" />
# planets: <select id="planets">
<option>8</option>
<option>9</option>
<option>10</option>
<option>11</option>
<option selected="selected">12</option>
<option>13</option>
<option>14</option>
<option>15</option>
<option>16</option>
</select>
<button id="btn" type="button">Go</button>
</form>
<hr />
<div id="feedback"></div>
CSS
body {
font-family: sans-serif;
}
JavaScript
var feedback = $('#feedback');
var creditStorage = [1000, 1400, 1800, 3000, 4000, 5000, 6000, 7500, 10000, 13000, 16000, 20000, 24000, 28000, 35000, 45000, 65000, 90000, 130000, 170000, 210000, 250000, 290000, 330000, 370000, 410000, 450000, 490000, 530000, 570000, 610000, 650000, 690000, 730000, 770000, 810000, 850000, 850000, 850000, 850000];
var planetLevels = [];
function startCalc () {
feedback.html('');
var capacity = $('#capacity').val();
var planets = $('#planets').val();
var planets1to4 = creditStorage[15-1] * 4;
var planet5 = creditStorage[20-1];
planetLevels = [15, 15, 15, 15, 20];
var remainingCapacity = capacity - planets1to4 - planet5;
var remainingPlanets = planets - 5;
addFeedback('Starter planets 1-5 have capacity of ' + (planets1to4 + planet5));
addFeedback('Planets left: ' + remainingPlanets);
addFeedback('Capacity left: ' + remainingCapacity);
addFeedback('Planet levels so far ' + planetLevels.toString());
addFeedback('...');
loopCalc(remainingCapacity, remainingPlanets);
}
function loopCalc (remainder, p) {
var mean = remainder / p;
var index = creditStorage.findIndex(p => {
return (p >= mean);
});
var credits = creditStorage[index];
var level = index + 1;
if (p <= 1) {
planetLevels.push(level);
addFeedback('Done');
addFeedback('Planet levels so far ' + planetLevels.toString());
return;
};
var halfPlanets = Math.floor(p / 2);
var remainingPlanets = p - halfPlanets;
while (halfPlanets--) {
planetLevels.push(level);
remainder = remainder - credits;
}
addFeedback('Planets left: ' + remainingPlanets);
addFeedback('Capacity left: ' + remainder);
addFeedback('Planet levels so far ' + planetLevels.toString());
addFeedback('...');
loopCalc(remainder, remainingPlanets);
}
function addFeedback (msg) {
var existing = feedback.html();
msg = existing + '<br/>' + msg;
feedback.html(msg);
}
$('#btn').on('click', startCalc);