You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
330 lines
12 KiB
330 lines
12 KiB
const MAXSTEPS= 10000
|
|
|
|
function Plural(t) {
|
|
return t==1?"":"s"
|
|
}
|
|
|
|
function test(){
|
|
var start = Math.abs(Math.max(0,Number(document.getElementById("starting").value)))
|
|
var end = Math.abs(Math.max(0,Number(document.getElementById("ending").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
|
|
|
|
var maxscore = Math.floor(Math.abs(Math.max(0,Number(document.getElementById("maxscore").value)))/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||start+EPCalc(voltage,i,tbonus)==end) {
|
|
//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||start+EPCalc(voltage,i,tbonus)==end) {
|
|
//document.getElementById("console").value+="Ending value needs to be "+EvenOdd(end-10)+"\n"
|
|
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"
|
|
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))))||start+EPCalc(voltage,i,tbonus)==end) {
|
|
//document.getElementById("console").value+="Ending value needs to be "+EvenOdd(end-10)+"\n"
|
|
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"
|
|
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+="1)"
|
|
document.getElementById("console").value+="Step "+(step++)+") Use Rehearsal w/"+Math.round(tbonus*100)+"% team. EP +"+gain+". Remaining:"+(end-start)+" EP \n"
|
|
return true
|
|
} else
|
|
for (var j=tbonus;j>=0;j-=0.2) {
|
|
result = TryMatchingRehearsal(j)
|
|
if (!result) {
|
|
return false
|
|
}
|
|
}
|
|
if (end-start>=20) {
|
|
var gain=end-start-10
|
|
start+=gain
|
|
//document.getElementById("console").value+="2)"
|
|
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+="3)"
|
|
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
|
|
if (((gain-10)*10)>=0) {
|
|
start+=gain
|
|
//document.getElementById("console").value+="4)"
|
|
document.getElementById("console").value+="Step "+(step++)+") Use Rehearsal w/"+((gain-10)*10)+"% team. EP +"+(gain)+". Remaining:"+(end-start)+" EP \n"
|
|
return false
|
|
} else {
|
|
return undefined
|
|
}
|
|
}
|
|
|
|
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
|
|
if (maxscore>0) {
|
|
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) {
|
|
var prevstart = 0
|
|
result = TryRehearsal(j)
|
|
if (start!==prevstart) {
|
|
break;
|
|
}
|
|
}
|
|
} else {
|
|
result = TryRehearsal(bonus)
|
|
}
|
|
} while (result);
|
|
}
|
|
|
|
|
|
if (maxscore>0) {
|
|
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)+" step"+Plural(step-1)+" and "+flameCount+" voltage required!\n\n"+document.getElementById("console").value
|
|
}
|
|
//document.getElementById("console").value+="Step "+(step++)+")"+start+" EP"+"\n"
|
|
step++
|
|
}
|
|
}
|
|
|