Muni Muni Formatting. Muni smarter

advanced
sigonasr2, Sig, Sigo 4 years ago committed by GitHub
parent f6a2299473
commit 02adc61f87
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 421
      muni.js

@ -1,186 +1,102 @@
const MAXSTEPS = 10000; const MAXSTEPS= 10000
function Plural(t) {
return t==1?"":"s"
}
function test(){ function test(){
var start = Math.abs(Number(document.getElementById("starting").value)); var start = Math.abs(Number(document.getElementById("starting").value))
var end = Math.abs(Number(document.getElementById("ending").value)); var end = Math.abs(Number(document.getElementById("ending").value))
var maxscore = Math.abs(Number(document.getElementById("maxscore").value)); var maxscore = Math.abs(Number(document.getElementById("maxscore").value))
var bonus = Number(document.getElementById("team").value); var bonus = Number(document.getElementById("team").value)
var type = document.getElementById("Bingo").checked var type = (document.getElementById("Bingo").checked?"Bingo":
? "Bingo" document.getElementById("Poker").checked?"Poker/Raid":
: document.getElementById("Poker").checked "Medley")
? "Poker/Raid" var flexible = document.getElementById("flexible").checked
: "Medley";
var flexible = document.getElementById("flexible").checked;
//document.getElementById("console").value=flexible+"...\n\n" //document.getElementById("console").value=flexible+"...\n\n"
var step = 1; var step=1
var flameCount = 0; var flameCount=0
var originalTarget = start; var originalTarget=start
document.getElementById("console").value = ""; document.getElementById("console").value=""
var interval = type == "Medley" ? 15000 : 10000;
maxscore = Math.floor(maxscore / interval) * interval; var interval = (type=="Medley")?15000:10000
function EPCalc(voltage,score,bonus) { function EPCalc(voltage,score,bonus) {
if (voltage>0) { if (voltage>0) {
switch (type) { switch (type) {
case "Bingo": case "Bingo":{
{ return voltage * Math.floor((1 + bonus)*Math.max(10,Math.floor(score/interval)))
return ( }break;
voltage * case "Medley":{
Math.floor( return voltage * Math.floor((1 + bonus)*(10+Math.floor(score/interval)))
(1 + bonus) * Math.max(10, Math.floor(score / interval)) }break;
) case "Poker/Raid":{
); return voltage * Math.floor((1 + bonus)*(50 + Math.floor(score/interval)))
} }break;
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 { } else {
return Math.round(bonus * 10) + 10; return Math.round(bonus*10)+10
} }
} }
function EvenOdd(val) { function EvenOdd(val) {
return val % 2 == 0 ? "even" : "odd"; return val%2==0?"even":"odd"
} }
function TryBiggestGain(tbonus) { function TryBiggestGain(tbonus) {
var voltage = 5; var voltage=5
for (var i=maxscore;i>=maxscore*0.8;i-=interval) { for (var i=maxscore;i>=maxscore*0.8;i-=interval) {
if (start + EPCalc(voltage, i, tbonus) < end - 10) { if (start+EPCalc(voltage,i,tbonus)<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+="Ending value needs to be "+EvenOdd(end-10)+"\n"
if (EvenOdd(start+EPCalc(voltage,i,tbonus))==EvenOdd(end-10)) { if (EvenOdd(start+EPCalc(voltage,i,tbonus))==EvenOdd(end-10)) {
//document.getElementById("console").value+=EvenOdd(start+EPCalc(voltage,i,tbonus))+"/"+EvenOdd(end-10)+"\n" //document.getElementById("console").value+=EvenOdd(start+EPCalc(voltage,i,tbonus))+"/"+EvenOdd(end-10)+"\n"
start += EPCalc(voltage, i, tbonus); start+=EPCalc(voltage,i,tbonus)
flameCount += voltage; flameCount+=voltage
document.getElementById("console").value += 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"
"Step " + return true
step++ + }
") Using " + }
voltage + }
" voltage w/" + return false
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) { function TrySmallerGain(voltage,tbonus) {
for (var i=maxscore;i>=maxscore*0.8;i-=interval) { for (var i=maxscore;i>=maxscore*0.8;i-=interval) {
if (start + EPCalc(voltage, i, tbonus) < end - 10) { if (start+EPCalc(voltage,i,tbonus)<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+="Ending value needs to be "+EvenOdd(end-10)+"\n"
if (EvenOdd(start + EPCalc(voltage, i, tbonus)) == EvenOdd(end - 10)) { if (EvenOdd(start+EPCalc(voltage,i,tbonus))==EvenOdd(end-10)||start+EPCalc(voltage,i,tbonus)==end) {
//document.getElementById("console").value+=EvenOdd(start+EPCalc(voltage,i,tbonus))+"/"+EvenOdd(end-10)+"\n" //document.getElementById("console").value+=EvenOdd(start+EPCalc(voltage,i,tbonus))+"/"+EvenOdd(end-10)+"\n"
start += EPCalc(voltage, i, tbonus); start+=EPCalc(voltage,i,tbonus)
flameCount += voltage; flameCount+=voltage
document.getElementById("console").value += 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"
"Step " + return true
step++ + }
") Using " + }
voltage + }
" voltage w/" + return false
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) { function TrySmolGain(voltage,tbonus) {
for (var i=maxscore;i>=0;i-=interval) { for (var i=maxscore;i>=0;i-=interval) {
if ( if ((EPCalc(voltage,i,tbonus)>=(10+Math.round(bonus*10))&&(start+EPCalc(voltage,i,tbonus)<=end-(10+Math.round(bonus*10))))||start+EPCalc(voltage,i,tbonus)==end) {
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" //document.getElementById("console").value+="Ending value needs to be "+EvenOdd(end-10)+"\n"
if (EvenOdd(start + EPCalc(voltage, i, tbonus)) == EvenOdd(end - 10)) { if (EvenOdd(start+EPCalc(voltage,i,tbonus))==EvenOdd(end-10)||start+EPCalc(voltage,i,tbonus)==end) {
//document.getElementById("console").value+=EvenOdd(start+EPCalc(voltage,i,tbonus))+"/"+EvenOdd(end-10)+"\n" //document.getElementById("console").value+=EvenOdd(start+EPCalc(voltage,i,tbonus))+"/"+EvenOdd(end-10)+"\n"
start += EPCalc(voltage, i, tbonus); start+=EPCalc(voltage,i,tbonus)
flameCount += voltage; flameCount+=voltage
document.getElementById("console").value += 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"
"Step " + return true
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) { for (var i=maxscore;i>=0;i-=interval) {
if ( if (EvenOdd(start+EPCalc(voltage,i,tbonus))!=EvenOdd(end-10)&&(start+EPCalc(voltage,i,tbonus))==end) {
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+="Ending value needs to be "+EvenOdd(end-10)+"\n"
//document.getElementById("console").value+=EvenOdd(start+EPCalc(voltage,i,tbonus))+"/"+EvenOdd(end-10)+"\n" //document.getElementById("console").value+=EvenOdd(start+EPCalc(voltage,i,tbonus))+"/"+EvenOdd(end-10)+"\n"
start += EPCalc(voltage, i, tbonus); start+=EPCalc(voltage,i,tbonus)
flameCount += voltage; flameCount+=voltage
document.getElementById("console").value += 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"
"Step " + return true
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) { /*for (var i=maxscore;i>=0;i-=interval) {
@ -194,156 +110,87 @@ function test() {
} }
}*/ }*/
for (var i=maxscore;i>=0;i-=interval) { for (var i=maxscore;i>=0;i-=interval) {
if ( if (EvenOdd(start+EPCalc(voltage,i,tbonus))!=EvenOdd(end-10)&&(start+EPCalc(voltage,i,tbonus))==end) {
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+="Ending value needs to be "+EvenOdd(end-10)+"\n"
//document.getElementById("console").value+=EvenOdd(start+EPCalc(voltage,i,tbonus))+"/"+EvenOdd(end-10)+"\n" //document.getElementById("console").value+=EvenOdd(start+EPCalc(voltage,i,tbonus))+"/"+EvenOdd(end-10)+"\n"
start += EPCalc(voltage, i, tbonus); start+=EPCalc(voltage,i,tbonus)
flameCount += voltage; flameCount+=voltage
document.getElementById("console").value += 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"
"Step " + return true
step++ + }
") Using " + }
voltage + return false
" 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) { function TryEqualGain(voltage,tbonus) {
for (var i=maxscore;i>=0;i-=interval) { for (var i=maxscore;i>=0;i-=interval) {
//document.getElementById("console").value+=(start+EPCalc(voltage,i,tbonus))+"/"+end+"\n" //document.getElementById("console").value+=(start+EPCalc(voltage,i,tbonus))+"/"+end+"\n"
if (start + EPCalc(voltage, i, tbonus) == end) { if ((start+EPCalc(voltage,i,tbonus))==end) {
//document.getElementById("console").value+="Ending value needs to be "+EvenOdd(end-10)+"\n" //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" //document.getElementById("console").value+=EvenOdd(start+EPCalc(voltage,i,tbonus))+"/"+EvenOdd(end-10)+"\n"
start += EPCalc(voltage, i, tbonus); start+=EPCalc(voltage,i,tbonus)
flameCount += voltage; flameCount+=voltage
document.getElementById("console").value += 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"
"Step " + return true
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) { if (end==start) {
return false; return false
} else { } else {
return undefined; return undefined
} }
} }
function TryMatchingRehearsal(tbonus) { function TryMatchingRehearsal(tbonus) {
//document.getElementById("console").value+=(Math.round(tbonus*10))+10 //document.getElementById("console").value+=(Math.round(tbonus*10))+10
if (end - start == Math.round(tbonus * 10) + 10) { if (end-start==(Math.round(tbonus*10))+10) {
var gain = Math.round(tbonus * 10) + 10; var gain=(Math.round(tbonus*10))+10
start += gain; start+=gain
document.getElementById("console").value += document.getElementById("console").value+="Step "+(step++)+") Use Rehearsal w/"+Math.round(tbonus*100)+"% team. EP +"+gain+". Remaining:"+(end-start)+" EP \n"
"Step " + return false
step++ + }
") Use Rehearsal w/" + return true
Math.round(tbonus * 100) +
"% team. EP +" +
gain +
". Remaining:" +
(end - start) +
" EP \n";
return false;
}
return true;
} }
function TryRehearsal(tbonus) { function TryRehearsal(tbonus) {
if (end==start) { if (end==start) {
return false; return false
} }
var voltage = 0; var voltage=0
if ((end-start)%2!==0) { if ((end-start)%2!==0) {
return undefined; return undefined
} }
if (end - start > 10 + Math.round(tbonus * 10) + 10) { if (end-start>(10+Math.round(tbonus*10))+10) {
var gain = 10 + Math.round(tbonus * 10); var gain=(10+Math.round(tbonus*10))
start += gain; start+=gain
document.getElementById("console").value += document.getElementById("console").value+="Step "+(step++)+") Use Rehearsal w/"+(tbonus*100)+"% team. EP +"+gain+". Remaining:"+(end-start)+" EP \n"
"Step " + return true
step++ + } else
") Use Rehearsal w/" + if (end-start>=20) {
tbonus * 100 + var gain=end-start-10
"% team. EP +" + start+=gain
gain + document.getElementById("console").value+="Step "+(step++)+") Use Rehearsal w/"+((gain-10)*10)+"% team. EP +"+gain+". Remaining:"+(end-start)+" EP \n"
". Remaining:" + return true
(end - start) + } else
" EP \n"; if ((end-start)%10==0) {
return true; var gain=10
} else if (end - start >= 20) { start+=gain
var gain = end - start - 10; document.getElementById("console").value+="Step "+(step++)+") Use Rehearsal w/0% team. EP +"+gain+". Remaining:"+(end-start)+" EP \n"
start += gain; return false
document.getElementById("console").value += } else
"Step " + {
step++ + var gain=end-start
") Use Rehearsal w/" + if (((gain-10)*10)>=0) {
(gain - 10) * 10 + start+=gain
"% team. EP +" + document.getElementById("console").value+="Step "+(step++)+") Use Rehearsal w/"+((gain-10)*10)+"% team. EP +"+(gain)+". Remaining:"+(end-start)+" EP \n"
gain + return false
". 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 { } else {
var gain = end - start; return undefined
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; return false
/*var voltage=0 /*var voltage=0
if (end-start>36) { if (end-start>36) {
start+=26 start+=26
@ -373,11 +220,11 @@ function test() {
return true*/ return true*/
} }
if (end - start > 1000000) { if ((end-start)>1000000) {
document.getElementById("console").value = document.getElementById("console").value="Get closer to target score before using parking calculator!"
"Get closer to target score before using parking calculator!"; }
} else { else {
var result = true; var result=true
while (start!=end) { while (start!=end) {
if (flexible) { if (flexible) {
for (var j=bonus;j>=0;j-=0.2) { for (var j=bonus;j>=0;j-=0.2) {
@ -411,14 +258,14 @@ function test() {
} }
} }
for (var j=bonus;j>=0;j-=0.2) { for (var j=bonus;j>=0;j-=0.2) {
result = TryMatchingRehearsal(j); result = TryMatchingRehearsal(j)
if (!result) { if (!result) {
break; break;
} }
} }
if (result) { if (result) {
for (var j=1.6;j>=0;j-=0.2) { for (var j=1.6;j>=0;j-=0.2) {
result = TryMatchingRehearsal(j); result = TryMatchingRehearsal(j)
if (!result) { if (!result) {
break; break;
} }
@ -428,51 +275,39 @@ function test() {
do { do {
if (flexible) { if (flexible) {
for (var j=bonus;j>=0;j-=0.2) { for (var j=bonus;j>=0;j-=0.2) {
result = TryRehearsal(j); result = TryRehearsal(j)
} }
} else { } else {
result = TryRehearsal(bonus); result = TryRehearsal(bonus)
} }
} while (result); } while (result);
} }
if (flexible) { if (flexible) {
for (var i=5;i>0;i--) { for (var i=5;i>0;i--) {
for (var j=bonus;j>=0;j-=0.2) { for (var j=bonus;j>=0;j-=0.2) {
while ((result = TryEqualGain(i, j))) { while (result = TryEqualGain(i,j)) {
//document.getElementById("console").value+="Step "+(step++)+")"+start+" EP"+"\n" //document.getElementById("console").value+="Step "+(step++)+")"+start+" EP"+"\n"
} }
} }
} }
} else { } else {
for (var i=5;i>0;i--) { for (var i=5;i>0;i--) {
while ((result = TryEqualGain(i, bonus))) { while (result = TryEqualGain(i,bonus)) {
//document.getElementById("console").value+="Step "+(step++)+")"+start+" EP"+"\n" //document.getElementById("console").value+="Step "+(step++)+")"+start+" EP"+"\n"
} }
} }
} }
start = end; start=end
if (result===undefined) { if (result===undefined) {
document.getElementById("console").value = document.getElementById("console").value="Impossible to park using this team!"
"Impossible to park using this team!";
} else { } else {
document.getElementById("console").value = 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)+" step"+Plural(step-1)+" and "+flameCount+" voltage required!\n\n"+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" //document.getElementById("console").value+="Step "+(step++)+")"+start+" EP"+"\n"
step++; step++
} }
} }
} }

Loading…
Cancel
Save