diff --git a/muni.css b/muni.css new file mode 100644 index 0000000..4a95097 --- /dev/null +++ b/muni.css @@ -0,0 +1,28 @@ +* { + font-family: "Comic Sans MS", "Comic Sans", cursive; + box-sizing: border-box; +} + +body::before { + content: ""; + position: fixed; + width: 100vw; + height: 100vh; + top: 0; + left: 0; + background-image: url("https://cdn.discordapp.com/emojis/744938186983080126.png?v=1"); + background-size: cover; + background-repeat: no-repeat; + background-position: center calc(62% + 2%); + z-index: -1; + opacity: 0.25; +} + +textarea { + background-color: transparent; + width: 100%; +} + +textarea:disabled { + color: black; +} diff --git a/muni.js b/muni.js new file mode 100644 index 0000000..c582de0 --- /dev/null +++ b/muni.js @@ -0,0 +1,478 @@ +const MAXSTEPS = 10000; + +function test() { + var start = Math.abs(Number(document.getElementById("starting").value)); + var end = Math.abs(Number(document.getElementById("ending").value)); + var maxscore = Math.abs(Number(document.getElementById("maxscore").value)); + var bonus = Number(document.getElementById("team").value); + var type = document.getElementById("Bingo").checked + ? "Bingo" + : document.getElementById("Poker").checked + ? "Poker/Raid" + : "Medley"; + var flexible = document.getElementById("flexible").checked; + //document.getElementById("console").value=flexible+"...\n\n" + var step = 1; + var flameCount = 0; + var originalTarget = start; + document.getElementById("console").value = ""; + + var interval = type == "Medley" ? 15000 : 10000; + + maxscore = Math.floor(maxscore / interval) * interval; + + function EPCalc(voltage, score, bonus) { + if (voltage > 0) { + switch (type) { + case "Bingo": + { + return ( + voltage * + Math.floor( + (1 + bonus) * Math.max(10, Math.floor(score / interval)) + ) + ); + } + break; + case "Medley": + { + return ( + voltage * + Math.floor((1 + bonus) * (10 + Math.floor(score / interval))) + ); + } + break; + case "Poker/Raid": + { + return ( + voltage * + Math.floor((1 + bonus) * (50 + Math.floor(score / interval))) + ); + } + break; + } + } else { + return Math.round(bonus * 10) + 10; + } + } + + function EvenOdd(val) { + return val % 2 == 0 ? "even" : "odd"; + } + + function TryBiggestGain(tbonus) { + var voltage = 5; + for (var i = maxscore; i >= maxscore * 0.8; i -= interval) { + if (start + EPCalc(voltage, i, tbonus) < end - 10) { + //document.getElementById("console").value+="Ending value needs to be "+EvenOdd(end-10)+"\n" + if (EvenOdd(start + EPCalc(voltage, i, tbonus)) == EvenOdd(end - 10)) { + //document.getElementById("console").value+=EvenOdd(start+EPCalc(voltage,i,tbonus))+"/"+EvenOdd(end-10)+"\n" + start += EPCalc(voltage, i, tbonus); + flameCount += voltage; + document.getElementById("console").value += + "Step " + + step++ + + ") Using " + + voltage + + " voltage w/" + + Math.round(tbonus * 100) + + "% team, score between " + + i + + "~" + + (i + interval - 1) + + " pts. EP +" + + EPCalc(voltage, i, tbonus) + + ". Remaining:" + + (end - start) + + " EP \n"; + return true; + } + } + } + return false; + } + + function TrySmallerGain(voltage, tbonus) { + for (var i = maxscore; i >= maxscore * 0.8; i -= interval) { + if (start + EPCalc(voltage, i, tbonus) < end - 10) { + //document.getElementById("console").value+="Ending value needs to be "+EvenOdd(end-10)+"\n" + if (EvenOdd(start + EPCalc(voltage, i, tbonus)) == EvenOdd(end - 10)) { + //document.getElementById("console").value+=EvenOdd(start+EPCalc(voltage,i,tbonus))+"/"+EvenOdd(end-10)+"\n" + start += EPCalc(voltage, i, tbonus); + flameCount += voltage; + document.getElementById("console").value += + "Step " + + step++ + + ") Using " + + voltage + + " voltage w/" + + Math.round(tbonus * 100) + + "% team, score between " + + i + + "~" + + (i + interval - 1) + + " pts. EP +" + + EPCalc(voltage, i, tbonus) + + ". Remaining:" + + (end - start) + + " EP \n"; + return true; + } + } + } + return false; + } + + function TrySmolGain(voltage, tbonus) { + for (var i = maxscore; i >= 0; i -= interval) { + if ( + EPCalc(voltage, i, tbonus) >= 10 + Math.round(bonus * 10) && + start + EPCalc(voltage, i, tbonus) <= + end - (10 + Math.round(bonus * 10)) + ) { + //document.getElementById("console").value+="Ending value needs to be "+EvenOdd(end-10)+"\n" + if (EvenOdd(start + EPCalc(voltage, i, tbonus)) == EvenOdd(end - 10)) { + //document.getElementById("console").value+=EvenOdd(start+EPCalc(voltage,i,tbonus))+"/"+EvenOdd(end-10)+"\n" + start += EPCalc(voltage, i, tbonus); + flameCount += voltage; + document.getElementById("console").value += + "Step " + + step++ + + ") Using " + + voltage + + " voltage w/" + + Math.round(tbonus * 100) + + "% team, score between " + + i + + "~" + + (i + interval - 1) + + " pts. EP +" + + EPCalc(voltage, i, tbonus) + + ". Remaining:" + + (end - start) + + " EP \n"; + return true; + } + } + } + for (var i = maxscore; i >= 0; i -= interval) { + if ( + EvenOdd(start + EPCalc(voltage, i, tbonus)) != EvenOdd(end - 10) && + start + EPCalc(voltage, i, tbonus) == end + ) { + //document.getElementById("console").value+="Ending value needs to be "+EvenOdd(end-10)+"\n" + //document.getElementById("console").value+=EvenOdd(start+EPCalc(voltage,i,tbonus))+"/"+EvenOdd(end-10)+"\n" + start += EPCalc(voltage, i, tbonus); + flameCount += voltage; + document.getElementById("console").value += + "Step " + + step++ + + ") Using " + + voltage + + " voltage w/" + + Math.round(tbonus * 100) + + "% team, score between " + + i + + "~" + + (i + interval - 1) + + " pts. EP +" + + EPCalc(voltage, i, tbonus) + + ". Remaining:" + + (end - start) + + " EP \n"; + return true; + } + } + /*for (var i=maxscore;i>=0;i-=interval) { + if ((start+EPCalc(voltage,i,tbonus))==end) { + //document.getElementById("console").value+="Ending value needs to be "+EvenOdd(end-10)+"\n" + //document.getElementById("console").value+=EvenOdd(start+EPCalc(voltage,i,tbonus))+"/"+EvenOdd(end-10)+"\n" + start+=EPCalc(voltage,i,tbonus) + flameCount+=voltage + document.getElementById("console").value+="Step "+(step++)+") Using "+voltage+" voltage w/"+Math.round(tbonus*100)+"% team, score between "+i+"~"+(i+interval-1)+" pts. EP +"+EPCalc(voltage,i,tbonus)+". Remaining:"+(end-start)+" EP \n" + return true + } + }*/ + for (var i = maxscore; i >= 0; i -= interval) { + if ( + EvenOdd(start + EPCalc(voltage, i, tbonus)) != EvenOdd(end - 10) && + start + EPCalc(voltage, i, tbonus) == end + ) { + //document.getElementById("console").value+="Ending value needs to be "+EvenOdd(end-10)+"\n" + //document.getElementById("console").value+=EvenOdd(start+EPCalc(voltage,i,tbonus))+"/"+EvenOdd(end-10)+"\n" + start += EPCalc(voltage, i, tbonus); + flameCount += voltage; + document.getElementById("console").value += + "Step " + + step++ + + ") Using " + + voltage + + " voltage w/" + + Math.round(tbonus * 100) + + "% team, score between " + + i + + "~" + + (i + interval - 1) + + " pts. EP +" + + EPCalc(voltage, i, tbonus) + + ". Remaining:" + + (end - start) + + " EP \n"; + return true; + } + } + return false; + } + + function TryEqualGain(voltage, tbonus) { + for (var i = maxscore; i >= 0; i -= interval) { + //document.getElementById("console").value+=(start+EPCalc(voltage,i,tbonus))+"/"+end+"\n" + if (start + EPCalc(voltage, i, tbonus) == end) { + //document.getElementById("console").value+="Ending value needs to be "+EvenOdd(end-10)+"\n" + //document.getElementById("console").value+=EvenOdd(start+EPCalc(voltage,i,tbonus))+"/"+EvenOdd(end-10)+"\n" + start += EPCalc(voltage, i, tbonus); + flameCount += voltage; + document.getElementById("console").value += + "Step " + + step++ + + ") Using " + + voltage + + " voltage w/" + + Math.round(tbonus * 100) + + "% team, score between " + + i + + "~" + + (i + interval - 1) + + " pts. EP +" + + EPCalc(voltage, i, tbonus) + + ". Remaining:" + + (end - start) + + " EP \n"; + return true; + } + } + if (end == start) { + return false; + } else { + return undefined; + } + } + + function TryMatchingRehearsal(tbonus) { + //document.getElementById("console").value+=(Math.round(tbonus*10))+10 + if (end - start == Math.round(tbonus * 10) + 10) { + var gain = Math.round(tbonus * 10) + 10; + start += gain; + document.getElementById("console").value += + "Step " + + step++ + + ") Use Rehearsal w/" + + Math.round(tbonus * 100) + + "% team. EP +" + + gain + + ". Remaining:" + + (end - start) + + " EP \n"; + return false; + } + return true; + } + + function TryRehearsal(tbonus) { + if (end == start) { + return false; + } + var voltage = 0; + if ((end - start) % 2 !== 0) { + return undefined; + } + + if (end - start > 10 + Math.round(tbonus * 10) + 10) { + var gain = 10 + Math.round(tbonus * 10); + start += gain; + document.getElementById("console").value += + "Step " + + step++ + + ") Use Rehearsal w/" + + tbonus * 100 + + "% team. EP +" + + gain + + ". Remaining:" + + (end - start) + + " EP \n"; + return true; + } else if (end - start >= 20) { + var gain = end - start - 10; + start += gain; + document.getElementById("console").value += + "Step " + + step++ + + ") Use Rehearsal w/" + + (gain - 10) * 10 + + "% team. EP +" + + gain + + ". Remaining:" + + (end - start) + + " EP \n"; + return true; + } else if ((end - start) % 10 == 0) { + var gain = 10; + start += gain; + document.getElementById("console").value += + "Step " + + step++ + + ") Use Rehearsal w/0% team. EP +" + + gain + + ". Remaining:" + + (end - start) + + " EP \n"; + return false; + } else { + var gain = end - start; + start += gain; + document.getElementById("console").value += + "Step " + + step++ + + ") Use Rehearsal w/" + + (gain - 10) * 10 + + "% team. EP +" + + gain + + ". Remaining:" + + (end - start) + + " EP \n"; + return false; + } + + return false; + /*var voltage=0 + if (end-start>36) { + start+=26 + document.getElementById("console").value+="Step "+(step++)+") Use Rehearsal w/"+(1.6*100)+"% team. EP +"+EPCalc(voltage,1,1.6)+". Remaining:"+(end-start)+" EP \n" + return true + } else + if (end-start>20) { + var bonus = (end-start-20)*10 + var gain = end-start-10 + start+=end-start-10 + document.getElementById("console").value+="Step "+(step++)+") Use Rehearsal w/"+(bonus)+"% team. EP +"+gain+". Remaining:"+(end-start)+" EP \n" + if ((bonus/10)%2!=0) { + return undefined + } else { + return true + } + } else { + if (end-start<10||(end-start)%2!=0) { + return undefined + } + var bonus = ((end-start-10)/20)*2 + start+=end-start + document.getElementById("console").value+="Step "+(step++)+") Use Rehearsal w/"+((bonus)*100)+"% team. EP +"+EPCalc(voltage,1,bonus)+". Remaining:"+(end-start)+" EP \n" + + return false + } + return true*/ + } + + if (end - start > 1000000) { + document.getElementById("console").value = + "Get closer to target score before using parking calculator!"; + } else { + var result = true; + while (start != end) { + if (flexible) { + for (var j = bonus; j >= 0; j -= 0.2) { + while (TryBiggestGain(j)) { + //document.getElementById("console").value+=+start+" EP"+"\n" + } + for (var i = 4; i > 0; i--) { + while (TrySmallerGain(i, j)) { + //document.getElementById("console").value+="Step "+(step++)+")"+start+" EP"+"\n" + } + } + for (var i = 5; i > 0; i--) { + while (TrySmolGain(i, j)) { + //document.getElementById("console").value+="Step "+(step++)+")"+start+" EP"+"\n" + } + } + } + } else { + while (TryBiggestGain(bonus)) { + //document.getElementById("console").value+=+start+" EP"+"\n" + } + for (var i = 4; i > 0; i--) { + while (TrySmallerGain(i, bonus)) { + //document.getElementById("console").value+="Step "+(step++)+")"+start+" EP"+"\n" + } + } + for (var i = 5; i > 0; i--) { + while (TrySmolGain(i, bonus)) { + //document.getElementById("console").value+="Step "+(step++)+")"+start+" EP"+"\n" + } + } + } + for (var j = bonus; j >= 0; j -= 0.2) { + result = TryMatchingRehearsal(j); + if (!result) { + break; + } + } + if (result) { + for (var j = 1.6; j >= 0; j -= 0.2) { + result = TryMatchingRehearsal(j); + if (!result) { + break; + } + } + } + if (result) { + do { + if (flexible) { + for (var j = bonus; j >= 0; j -= 0.2) { + result = TryRehearsal(j); + } + } else { + result = TryRehearsal(bonus); + } + } while (result); + } + + if (flexible) { + for (var i = 5; i > 0; i--) { + for (var j = bonus; j >= 0; j -= 0.2) { + while ((result = TryEqualGain(i, j))) { + //document.getElementById("console").value+="Step "+(step++)+")"+start+" EP"+"\n" + } + } + } + } else { + for (var i = 5; i > 0; i--) { + while ((result = TryEqualGain(i, bonus))) { + //document.getElementById("console").value+="Step "+(step++)+")"+start+" EP"+"\n" + } + } + } + + start = end; + if (result === undefined) { + document.getElementById("console").value = + "Impossible to park using this team!"; + } else { + document.getElementById("console").value = + "Calculating from " + + originalTarget + + " to " + + end + + " for event type " + + type + + "...\n\t(All games are done in Free Live)\n\nFound a park! " + + (step - 1) + + " steps and " + + flameCount + + " voltage required!\n\n" + + document.getElementById("console").value; + } + //document.getElementById("console").value+="Step "+(step++)+")"+start+" EP"+"\n" + step++; + } + } +} diff --git a/parkingcalc.html b/parkingcalc.html index 1617382..b2e8255 100644 --- a/parkingcalc.html +++ b/parkingcalc.html @@ -1,358 +1,76 @@ - + +
+