From 0f5dd6376757f32459f53589eaf62009d4b77741 Mon Sep 17 00:00:00 2001 From: "sigonasr2, Sig, Sigo" Date: Thu, 6 May 2021 15:19:12 +0900 Subject: [PATCH] MuniMuniMuniMuni --- english.js | 107 ++++++ japanese.js | 107 ++++++ muni.js | 924 ++++++++++++++++++++++------------------------------ 3 files changed, 611 insertions(+), 527 deletions(-) create mode 100644 english.js create mode 100644 japanese.js diff --git a/english.js b/english.js new file mode 100644 index 0000000..bfa4cb9 --- /dev/null +++ b/english.js @@ -0,0 +1,107 @@ +function English(str) { + switch (str) { + case 1:{ //Tab Title of Webpage + return "D4DJ Parkings Calculator | Powered by Muni" + }break; + case 2:{ //Header Title (Top) of Webpage + return "D4DJ Event Parking Calculator" + }break; + case 3:{ //Set up your options (Category Title) + return "Parking Configuration" + }break; + case 4:{ //Selection for event type: Poker/Raid + return "Poker/Raid" + }break; + case 5:{ //Selection for event type: Bingo + return "Bingo" + }break; + case 6:{ //Selection for event type: Medley + return "Medley" + }break; + case 7:{ //Label for team % selector (Include ":") + return "Event Team Bonus:" + }break; + case 17:{ //Label for whether to enable flexible team options. + return "Flexible Team?" + }break; + case 8:{ //Tooltip for flexible team options (mouseover) + return "If turned on, calculates scoring options using lower % teams also." + }break; + case 18:{ //Label for what the max score in free lives is. + return "Max Free Live Score:" + }break; + case 9:{ //Tooltip for what the max score in free lives is. (Setting it to 0 forces the calculator to use Rehearsal) + return "The maximum score you can get from playing a song using Free Live.
(Use 0 for Rehearsals Only)" + }break; + case 10:{ //Label for Advanced Settings toggle. + return "Advanced Options?" + }break; + case 11:{ //Tooltip for Advanced Settings toggle. + return "Enable voltage & EP limits." + }break; + case 12:{ //Label for setting the lowest EP where voltage is allowed. + return "Use voltage until: " + }break; + case 13:{ //Label for setting the total amount of voltage the calculator may consume. + return "Max Voltage to use:" + }break; + case 14:{ //Label for setting the Starting EP amount. + return "Starting EP:" + }break; + case 15:{ //Label for setting the final EP amount. + return "Target EP:" + }break; + case 16:{ //The text for the button users click to run the calculator. + return "Calculate" + }break; + case 19:{ //Tip: Here's the Light on EX or Synchrogazer on Hard/EX difficulty are some of the highest scoring songs you can pick. + return "Here's the Light on EX or Synchrogazer on Hard/EX difficulty are some of the highest scoring songs you can pick." + }break; + case 20:{ //Tip: When you get close to the score you need in Free Live, purposely fail the song. Notes are worth 10% their normal value when you have 0 health so you can finish easily. + return "When you get close to the score you need in Free Live, purposely fail the song. Notes are worth 10% their normal value when you have 0 health so you can finish easily." + }break; + case 21:{ //Tip: The "Flexible Team" option gives you the fastest park, but at the expense of more voltage. + return "The \"Flexible Team\" option gives you the fastest park, but at the expense of more voltage." + }break; + case "%INITIAL%":{ //This message is the first thing to display for a normal calculation. + //Sample message: + /* + Calculating from 100000 to 104000 for event type Poker/Raid... + (All games are done in Free Live) + + Found a park! 9 steps and 13 voltage required! + */ + //Variables for this message: + /* + Calculating from %START% to %TARGET% for event type %EVENT%... + (All games are done in Free Live) + + Found a park! %STEPS% step%PLURAL_STEPS% and %VOLTAGE% voltage required! + */ + return "Calculating from %START% to %TARGET% for event type %EVENT%...\n\t(All games are done in Free Live)\n\nFound a park! %STEPS% step%PLURAL_STEPS% and %VOLTAGE% voltage required!" + }break; + case "%STEP%":{ //This message is displayed for each normal voltage step in the process. + //Sample message: + /* + Step 1) Using 5 voltage w/160% team, score between 640000~649999 pts. EP +1480. Remaining:2520 EP + */ + //Variables for this message: + /* + Step %STEP%) Using %VOLTAGE% voltage w/%PERCENT%% team, score between %LOWSCORE%~%HIGHSCORE% pts. EP +%EPGAIN%. Remaining:%REMAINING% EP + */ + return "Step %STEP%) Using %VOLTAGE% voltage w/%PERCENT%% team, score between %LOWSCORE%~%HIGHSCORE% pts. EP +%EPGAIN%. Remaining:%REMAINING% EP" + }break; + case "%REHEARSAL%":{ //Similar to above, but for a rehearsal step instead. + return "Step %STEP%) Use Rehearsal w/%PERCENT%% team. EP +%EPGAIN%. Remaining:%REMAINING% EP" + }break; + case "%LARGEGAP%":{ //This message is displayed if the Starting EP and Final EP gap is too big for reasonable calculations. + return "Get closer to target score before using parking calculator!"; + }break; + case "%FAILED%":{ //This message is displayed if it's impossible to park. + return "Impossible to park using this team!" + }break; + default:{ + return "???" + } + } + } \ No newline at end of file diff --git a/japanese.js b/japanese.js new file mode 100644 index 0000000..f7228f3 --- /dev/null +++ b/japanese.js @@ -0,0 +1,107 @@ +function Japanese(str) { + switch (str) { + case 1:{ //Tab Title of Webpage + return "D4DJ Parking Calculator | Powered by Muni" + }break; + case 2:{ //Header Title (Top) of Webpage + return "D4DJ Event Parking Calculator" + }break; + case 3:{ //Set up your options (Category Title) + return "Parking Configuration" + }break; + case 4:{ //Selection for event type: Poker/Raid + return "Poker/Raid" + }break; + case 5:{ //Selection for event type: Bingo + return "Bingo" + }break; + case 6:{ //Selection for event type: Medley + return "Medley" + }break; + case 7:{ //Label for team % selector (Include ":") + return "Event Team Bonus:" + }break; + case 17:{ //Label for whether to enable flexible team options. + return "Flexible Team?" + }break; + case 8:{ //Tooltip for flexible team options (mouseover) + return "If turned on, calculates scoring options using lower % teams also." + }break; + case 18:{ //Label for what the max score in free lives is. + return "Max Free Live Score:" + }break; + case 9:{ //Tooltip for what the max score in free lives is. (Setting it to 0 forces the calculator to use Rehearsal) + return "The maximum score you can get from playing a song using Free Live.
(Use 0 for Rehearsals Only)" + }break; + case 10:{ //Label for Advanced Settings toggle. + return "Advanced Options?" + }break; + case 11:{ //Tooltip for Advanced Settings toggle. + return "Enable voltage & EP limits." + }break; + case 12:{ //Label for setting the lowest EP where voltage is allowed. + return "Use voltage until: " + }break; + case 13:{ //Label for setting the total amount of voltage the calculator may consume. + return "Max Voltage to use:" + }break; + case 14:{ //Label for setting the Starting EP amount. + return "Starting EP:" + }break; + case 15:{ //Label for setting the final EP amount. + return "Target EP:" + }break; + case 16:{ //The text for the button users click to run the calculator. + return "Calculate" + }break; + case 19:{ //Tip: Here's the Light on EX or Synchrogazer on Hard/EX difficulty are some of the highest scoring songs you can pick. + return "Here's the Light on EX or Synchrogazer on Hard/EX difficulty are some of the highest scoring songs you can pick." + }break; + case 20:{ //Tip: When you get close to the score you need in Free Live, purposely fail the song. Notes are worth 10% their normal value when you have 0 health so you can finish easily. + return "When you get close to the score you need in Free Live, purposely fail the song. Notes are worth 10% their normal value when you have 0 health so you can finish easily." + }break; + case 21:{ //Tip: The "Flexible Team" option gives you the fastest park, but at the expense of more voltage. + return "The \"Flexible Team\" option gives you the fastest park, but at the expense of more voltage." + }break; + case "%INITIAL%":{ //This message is the first thing to display for a normal calculation. + //Sample message: + /* + Calculating from 100000 to 104000 for event type Poker/Raid... + (All games are done in Free Live) + + Found a park! 9 steps and 13 voltage required! + */ + //Variables for this message: + /* + Calculating from %START% to %TARGET% for event type %EVENT%... + (All games are done in Free Live) + + Found a park! %STEPS% step%PLURAL_STEPS% and %VOLTAGE% voltage required! + */ + return "Calculating from %START% to %TARGET% for event type %EVENT%...\n\t(All games are done in Free Live)\n\nFound a park! %STEPS% step%PLURAL_STEPS% and %VOLTAGE% voltage required!" + }break; + case "%STEP%":{ //This message is displayed for each normal voltage step in the process. + //Sample message: + /* + Step 1) Using 5 voltage w/160% team, score between 640000~649999 pts. EP +1480. Remaining:2520 EP + */ + //Variables for this message: + /* + Step %STEP%) Using %VOLTAGE% voltage w/%PERCENT%% team, score between %LOWSCORE%~%HIGHSCORE% pts. EP +%EPGAIN%. Remaining:%REMAINING% EP + */ + return "Step %STEP%) Using %VOLTAGE% voltage w/%PERCENT%% team, score between %LOWSCORE%~%HIGHSCORE% pts. EP +%EPGAIN%. Remaining:%REMAINING% EP" + }break; + case "%REHEARSAL%":{ //Similar to above, but for a rehearsal step instead. + return "Step %STEP%) Use Rehearsal w/%PERCENT%% team. EP +%EPGAIN%. Remaining:%REMAINING% EP" + }break; + case "%LARGEGAP%":{ //This message is displayed if the Starting EP and Final EP gap is too big for reasonable calculations. + return "Get closer to target score before using parking calculator!"; + }break; + case "%FAILED%":{ //This message is displayed if it's impossible to park. + return "Impossible to park using this team!" + }break; + default:{ //Default to English when translation doesn't exist. + return English(str) + } + } + } \ No newline at end of file diff --git a/muni.js b/muni.js index d505a10..4f78bf8 100644 --- a/muni.js +++ b/muni.js @@ -1,527 +1,397 @@ -const MAXSTEPS= 10000 - - function Korean(str) { - switch (str) { - case "Hello":{ - return "안녕하세요" - }break; - default:{ - return English(str) - } - } - } - - function English(str) { - switch (str) { - case 1:{ //Tab Title of Webpage - return "D4DJ Parking Calculator | Powered by Muni" - }break; - case 2:{ //Header Title (Top) of Webpage - return "D4DJ Event Parking Calculator" - }break; - case 3:{ //Set up your options (Category Title) - return "Parking Configuration" - }break; - case 4:{ //Selection for event type: Poker/Raid - return "Poker/Raid" - }break; - case 5:{ //Selection for event type: Bingo - return "Bingo" - }break; - case 6:{ //Selection for event type: Medley - return "Medley" - }break; - case 7:{ //Label for team % selector (Include ":") - return "Event Team Bonus:" - }break; - case 17:{ //Label for whether to enable flexible team options. - return "Flexible Team?" - }break; - case 8:{ //Tooltip for flexible team options (mouseover) - return "If turned on, calculates scoring options using lower % teams also." - }break; - case 18:{ //Label for what the max score in free lives is. - return "Max Free Live Score:" - }break; - case 9:{ //Tooltip for what the max score in free lives is. (Setting it to 0 forces the calculator to use Rehearsal) - return "The maximum score you can get from playing a song using Free Live.
(Use 0 for Rehearsals Only)" - }break; - case 10:{ //Label for Advanced Settings toggle. - return "Advanced Options?" - }break; - case 11:{ //Tooltip for Advanced Settings toggle. - return "Enable voltage & EP limits." - }break; - case 12:{ //Label for setting the lowest EP where voltage is allowed. - return "Use voltage until: " - }break; - case 13:{ //Label for setting the total amount of voltage the calculator may consume. - return "Max Voltage to use:" - }break; - case 14:{ //Label for setting the Starting EP amount. - return "Starting EP:" - }break; - case 15:{ //Label for setting the final EP amount. - return "Target EP:" - }break; - case 16:{ //The text for the button users click to run the calculator. - return "Calculate" - }break; - case 19:{ //Tip: Here's the Light on EX or Synchrogazer on Hard/EX difficulty are some of the highest scoring songs you can pick. - return "Here's the Light on EX or Synchrogazer on Hard/EX difficulty are some of the highest scoring songs you can pick." - }break; - case 20:{ //Tip: When you get close to the score you need in Free Live, purposely fail the song. Notes are worth 10% their normal value when you have 0 health so you can finish easily. - return "When you get close to the score you need in Free Live, purposely fail the song. Notes are worth 10% their normal value when you have 0 health so you can finish easily." - }break; - case 21:{ //Tip: The "Flexible Team" option gives you the fastest park, but at the expense of more voltage. - return "The \"Flexible Team\" option gives you the fastest park, but at the expense of more voltage." - }break; - case "%INITIAL%":{ //This message is the first thing to display for a normal calculation. - //Sample message: - /* - Calculating from 100000 to 104000 for event type Poker/Raid... - (All games are done in Free Live) - - Found a park! 9 steps and 13 voltage required! - */ - //Variables for this message: - /* - Calculating from %START% to %TARGET% for event type %EVENT%... - (All games are done in Free Live) - - Found a park! %STEPS% step%PLURAL_STEPS% and %VOLTAGE% voltage required! - */ - return "Calculating from %START% to %TARGET% for event type %EVENT%...\n\t(All games are done in Free Live)\n\nFound a park! %STEPS% step%PLURAL_STEPS% and %VOLTAGE% voltage required!" - }break; - case "%STEP%":{ //This message is displayed for each normal voltage step in the process. - //Sample message: - /* - Step 1) Using 5 voltage w/160% team, score between 640000~649999 pts. EP +1480. Remaining:2520 EP - */ - //Variables for this message: - /* - Step %STEP%) Using %VOLTAGE% voltage w/%PERCENT%% team, score between %LOWSCORE%~%HIGHSCORE% pts. EP +%EPGAIN%. Remaining:%REMAINING% EP - */ - return "Step %STEP%) Using %VOLTAGE% voltage w/%PERCENT%% team, score between %LOWSCORE%~%HIGHSCORE% pts. EP +%EPGAIN%. Remaining:%REMAINING% EP" - }break; - case "%REHEARSAL%":{ //Similar to above, but for a rehearsal step instead. - return "Step %STEP%) Use Rehearsal w/%PERCENT%% team. EP +%EPGAIN%. Remaining:%REMAINING% EP" - }break; - case "%LARGEGAP%":{ //This message is displayed if the Starting EP and Final EP gap is too big for reasonable calculations. - return "Get closer to target score before using parking calculator!"; - }break; - case "%FAILED%":{ //This message is displayed if it's impossible to park. - return "Impossible to park using this team!" - }break; - default:{ - return "???" - } - } - } - - function Reveal(str) { - switch (str) { - case "Hello":{ - return "Hi" - }break; - default:{ - return English(str) - } - } - } - - function ConvertVariables(str,data) { - return str - .replaceAll("%START%",data.start) - .replaceAll("%TARGET%",data.target) - .replaceAll("%EVENT%",data.event) - .replaceAll("%STEPS%",data.steps) - .replaceAll("%PLURAL_STEPS%",Plural(data.steps)) - .replaceAll("%VOLTAGE%",data.voltage) - .replaceAll("%STEP%",data.step) - .replaceAll("%PERCENT%",data.percent) - .replaceAll("%LOWSCORE%",data.lowscore) - .replaceAll("%HIGHSCORE%",data.highscore) - .replaceAll("%EPGAIN%",data.epgain) - .replaceAll("%REMAINING%",data.remaining) - } - - var LANGUAGE=Reveal - var LANGUAGELIST={English:English,Korean:Korean} - var TRANSLATEELEMENTS=100 //Increase as number of translated elements increases. - - function Plural(t) { - return t==1?"":"s" - } - - function ConvertLanguage() { - for (var i=0;i0) { - 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)26))) { - //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+=ConvertVariables(LANGUAGE("%STEP%"),{step:step++,voltage:voltage,percent:Math.round(tbonus*100),lowscore:i,highscore:(i+interval-1),epgain:EPCalc(voltage,i,tbonus),remaining:end-start})+"\n" - /*"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)26))) { - //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+=ConvertVariables(LANGUAGE("%STEP%"),{step:step++,voltage:voltage,percent:Math.round(tbonus*100),lowscore:i,highscore:(i+interval-1),epgain:EPCalc(voltage,i,tbonus),remaining:end-start})+"\n" - /*"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)&&((end-start)%2==1||(end-start)>26))) { - //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+=ConvertVariables(LANGUAGE("%STEP%"),{step:step++,voltage:voltage,percent:Math.round(tbonus*100),lowscore:i,highscore:(i+interval-1),epgain:EPCalc(voltage,i,tbonus),remaining:end-start})+"\n" - /*"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)&&((end-start)%2==1||(end-start)>26))) { - //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+=ConvertVariables(LANGUAGE("%STEP%"),{step:step++,voltage:voltage,percent:Math.round(tbonus*100),lowscore:i,highscore:(i+interval-1),epgain:EPCalc(voltage,i,tbonus),remaining:end-start})+"\n" - /*"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)&&((end-start)%2==1||(end-start)>26))) { - //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+=ConvertVariables(LANGUAGE("%STEP%"),{step:step++,voltage:voltage,percent:Math.round(tbonus*100),lowscore:i,highscore:(i+interval-1),epgain:EPCalc(voltage,i,tbonus),remaining:end-start})+"\n" - /*"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)&&((end-start)%2==1||(end-start)>26)) { - //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+=ConvertVariables(LANGUAGE("%STEP%"),{step:step++,voltage:voltage,percent:Math.round(tbonus*100),lowscore:i,highscore:(i+interval-1),epgain:EPCalc(voltage,i,tbonus),remaining:end-start})+"\n" - /*"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+=ConvertVariables(LANGUAGE("%REHEARSAL%"),{step:step++,percent:Math.round(tbonus*100),epgain:gain,remaining:end-start})+"\n" - /*"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+=ConvertVariables(LANGUAGE("%REHEARSAL%"),{step:step++,percent:Math.round(tbonus*100),epgain:gain,remaining:end-start})+"\n" - /*"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+=ConvertVariables(LANGUAGE("%REHEARSAL%"),{step:step++,percent:((gain-10)*10),epgain:gain,remaining:end-start})+"\n" - /*"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+=ConvertVariables(LANGUAGE("%REHEARSAL%"),{step:step++,percent:0,epgain:gain,remaining:end-start})+"\n" - /*"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+=ConvertVariables(LANGUAGE("%REHEARSAL%"),{step:step++,percent:((gain-10)*10),epgain:gain,remaining:end-start})+"\n" - /*"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= - LANGUAGE("%LARGEGAP%") - //"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" - } - } - } - } - - function ConvertEvent(str) { - switch (str) { - case "Poker/Raid":{ - return LANGUAGE(4) - }break; - case "Bingo":{ - return LANGUAGE(5) - }break; - case "Medley":{ - return LANGUAGE(6) - }break; - } - } - - start=end - if (result===undefined) { - document.getElementById("console").value=LANGUAGE("%FAILED%") - //"Impossible to park using this team!" - } else { - document.getElementById("console").value=ConvertVariables(LANGUAGE("%INITIAL%"),{ - start:originalTarget,target:end,event:ConvertEvent(type),steps:(step-1),voltage:flameCount})+"\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)+" step"+Plural(step-1)+" and "+flameCount+" voltage required!\n\n"+document.getElementById("console").value*/ - } - //document.getElementById("console").value+="Step "+(step++)+")"+start+" EP"+"\n" - step++ - } - } +const MAXSTEPS= 10000 + + function ConvertVariables(str,data) { + return str + .replaceAll("%START%",data.start) + .replaceAll("%TARGET%",data.target) + .replaceAll("%EVENT%",data.event) + .replaceAll("%STEPS%",data.steps) + .replaceAll("%PLURAL_STEPS%",Plural(data.steps)) + .replaceAll("%VOLTAGE%",data.voltage) + .replaceAll("%STEP%",data.step) + .replaceAll("%PERCENT%",data.percent) + .replaceAll("%LOWSCORE%",data.lowscore) + .replaceAll("%HIGHSCORE%",data.highscore) + .replaceAll("%EPGAIN%",data.epgain) + .replaceAll("%REMAINING%",data.remaining) + } + + var LANGUAGE=English + var LANGUAGELIST={English:{name:"English",translation:English},Japanese:{name:"Japanese",translation:Japanese}/*,Korean:{name:"한국어",translation:Korean}*/} + var TRANSLATEELEMENTS=100 //Increase as number of translated elements increases. + + function Plural(t) { + return t==1?"":"s" + } + + function ConvertLanguage() { + for (var i=0;i0) { + 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)26))) { + //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+=ConvertVariables(LANGUAGE("%STEP%"),{step:step++,voltage:voltage,percent:Math.round(tbonus*100),lowscore:i,highscore:(i+interval-1),epgain:EPCalc(voltage,i,tbonus),remaining:end-start})+"\n" + /*"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)26))) { + //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+=ConvertVariables(LANGUAGE("%STEP%"),{step:step++,voltage:voltage,percent:Math.round(tbonus*100),lowscore:i,highscore:(i+interval-1),epgain:EPCalc(voltage,i,tbonus),remaining:end-start})+"\n" + /*"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)&&((end-start)%2==1||(end-start)>26))) { + //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+=ConvertVariables(LANGUAGE("%STEP%"),{step:step++,voltage:voltage,percent:Math.round(tbonus*100),lowscore:i,highscore:(i+interval-1),epgain:EPCalc(voltage,i,tbonus),remaining:end-start})+"\n" + /*"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)&&((end-start)%2==1||(end-start)>26))) { + //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+=ConvertVariables(LANGUAGE("%STEP%"),{step:step++,voltage:voltage,percent:Math.round(tbonus*100),lowscore:i,highscore:(i+interval-1),epgain:EPCalc(voltage,i,tbonus),remaining:end-start})+"\n" + /*"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)&&((end-start)%2==1||(end-start)>26))) { + //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+=ConvertVariables(LANGUAGE("%STEP%"),{step:step++,voltage:voltage,percent:Math.round(tbonus*100),lowscore:i,highscore:(i+interval-1),epgain:EPCalc(voltage,i,tbonus),remaining:end-start})+"\n" + /*"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)&&((end-start)%2==1||(end-start)>26)) { + //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+=ConvertVariables(LANGUAGE("%STEP%"),{step:step++,voltage:voltage,percent:Math.round(tbonus*100),lowscore:i,highscore:(i+interval-1),epgain:EPCalc(voltage,i,tbonus),remaining:end-start})+"\n" + /*"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+=ConvertVariables(LANGUAGE("%REHEARSAL%"),{step:step++,percent:Math.round(tbonus*100),epgain:gain,remaining:end-start})+"\n" + /*"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+=ConvertVariables(LANGUAGE("%REHEARSAL%"),{step:step++,percent:Math.round(tbonus*100),epgain:gain,remaining:end-start})+"\n" + /*"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+=ConvertVariables(LANGUAGE("%REHEARSAL%"),{step:step++,percent:((gain-10)*10),epgain:gain,remaining:end-start})+"\n" + /*"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+=ConvertVariables(LANGUAGE("%REHEARSAL%"),{step:step++,percent:0,epgain:gain,remaining:end-start})+"\n" + /*"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+=ConvertVariables(LANGUAGE("%REHEARSAL%"),{step:step++,percent:((gain-10)*10),epgain:gain,remaining:end-start})+"\n" + /*"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= + LANGUAGE("%LARGEGAP%") + //"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" + } + } + } + } + + function ConvertEvent(str) { + switch (str) { + case "Poker/Raid":{ + return LANGUAGE(4) + }break; + case "Bingo":{ + return LANGUAGE(5) + }break; + case "Medley":{ + return LANGUAGE(6) + }break; + } + } + + start=end + if (result===undefined) { + document.getElementById("console").value=LANGUAGE("%FAILED%") + //"Impossible to park using this team!" + } else { + document.getElementById("console").value=ConvertVariables(LANGUAGE("%INITIAL%"),{ + start:originalTarget,target:end,event:ConvertEvent(type),steps:(step-1),voltage:flameCount})+"\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)+" step"+Plural(step-1)+" and "+flameCount+" voltage required!\n\n"+document.getElementById("console").value*/ + } + //document.getElementById("console").value+="Step "+(step++)+")"+start+" EP"+"\n" + step++ + } + }