{"version":3,"sources":["numberSolver.js","Board.js","Calculations.js","arithemetic.js","Options.js","SetNumbers.js","Game.js","index.js"],"names":["NumberPuzzle","target","numBigOnes","numSelections","bigOnes","littleOnes","this","random","standardBigOnes","standardLittleOnes","shuffle","reverse","values","i","push","pop","numLittleOnes","littles","n","Math","floor","a","length","j","t","map","Value","solns","best","all","forEach","v","consider","solveImpl","sort","v1","v2","compareTo","join","lhs","rhs","operator","steps","number","Number","isInteger","Error","lDist","abs","rDist","lSteps","rSteps","toString","String","toExpression","Function","replace","fn","trim","expr","plusReduce","minusReduce","multReduce","divReduce","value","operations","op","result","combine","reduce","skipIndex1","skipIndex2","combined","copy","module","exports","Command","props","className","onClick","style","color","CalculationCommand","NormalButton","NoClickButton","DisabledButton","Solution","Success","SummaryLines","listItems","summaryLines","line","index","Board","symbolExpr","isAvailable","itemValue","onSymbolClick","itemIndex","isUsed","symbol","command","onCommandClick","text1","lines","difference","renderCommand","renderSymbol","expressionItems","renderCalulationCommand","renderSolution","solution","renderSummaryLines","calculatedLines","renderSummary","targetNumber","calculatedTotal","renderResult","React","Component","getNumbers","largeCount","smallCount","results","largeNumbers","numberRands","Array","fill","numberIndexs","maxValue","maxIndex","expressionItem","arithmeticExpression","formulaHistory","bracketCount","calculatedErrors","newNumbers","setNumbers","newNumber","getTargetNumber","calculateTotal","setCalculatedTotal","setAvailableItems","exprs","soln","index1","value1","calculateFormula","numberArray","clearFormula","isNumbersAvailable","isSymbolsAvailable","isLeftBracketAvailable","isRightBracketAvailable","lastItem","isNumber","isRightBracket","formulaArray","isBaseLevel","isError","levelResult","newFormulaArray","isBracketsRemoved","newElement","tempArray","slice","num","parseInt","splice","divisor","dividend","quotient","toFixed","isCalculation","element","isNaN","parmIndex","parmSymbol","solnArray","solve","split","expr1","x","includes","concat","leftBracketIndex","getOperator","rightBracketIndex","multiplyIndex","prevIndex","s","thisIndex","e","Options","handleLargeNumberChange","parm1","numberCount","state","largeNumberCount","setState","handleTotalNumberChange","totalNumberCount","id","Modal","show","onHide","handleClose","Header","Title","Body","Container","Row","type","size","readOnly","Footer","Button","variant","onCloseClick","onSaveClick","SetNumbers","handleNumberClick","clickedNumber","selectedNums","selectedNumbers","targetNum","is25Available","is50Available","is75Available","is100Available","is10Available","is0Available","isNumsAvailable","isComplete","numberExpr","DisplayButton","AcceptButton","onAcceptClick","renderSelected","renderNumber","renderAcceptButton","Game","isOptions","smallNumberCount","isSetNumbers","newGame","setStateFromArithmeticExpression","parmText","window","confirm","removeItemFromFormula","alert","solvePuzzle","addItemToFormula","setLargeSmall","changeNumbers","numbers","setGame","parms","handleCommandClick","handleSymbolClick","handleCloseModalClick","parm2","handleSaveModalClick","closeModal","handleSetNumbersModalClick","ReactDOM","render","document","getElementById"],"mappings":"gNAIcA,EAAb,WAgBG,WAAYC,EAAQC,EAAYC,EAAeC,EAASC,GAAa,oBACnD,MAAVJ,IAAgBA,EAAS,IAAMK,KAAKC,OAAO,MAC7B,MAAdL,IAAoBA,EAAa,GAChB,MAAjBC,IAAuBA,EAAgB,GAC5B,MAAXC,IAAiBA,EAAUE,KAAKE,mBAClB,MAAdH,IAAoBA,EAAaC,KAAKG,sBAE1CL,EAAO,YAAOA,GACdC,EAAU,YAAOA,GAEbH,IAAeC,GACfG,KAAKI,QAAQN,GACbE,KAAKI,QAAQL,IAIbD,EAAQO,UAGZL,KAAKM,OAAS,GACd,IAAK,IAAIC,EAAI,EAAGA,EAAIX,IAAcW,EAC9BP,KAAKM,OAAOE,KAAKV,EAAQW,OAG7B,IADA,IAAMC,EAAgBb,EAAgBD,EAC7BW,EAAI,EAAGA,EAAIG,IAAiBH,EACjCP,KAAKM,OAAOE,KAAKT,EAAWU,OAGhCT,KAAKL,OAASA,EA5CrB,mDAgDG,WACI,MAAO,CAAC,IAAK,GAAI,GAAI,MAjD5B,gCAqDG,WAEI,IADA,IAAMgB,EAAU,GACPJ,EAAI,EAAGA,GAAK,KAAMA,EACvBI,EAAQH,KAAKD,EAAGA,GAEpB,OAAOI,IA1Dd,oBA8DG,SAAOC,GACH,OAAOC,KAAKC,MAAMD,KAAKZ,SAAWY,KAAKC,MAAMF,MA/DpD,qBAmEG,SAAQG,GACJ,IAAK,IAAIR,EAAI,EAAGA,EAAIQ,EAAEC,SAAUT,EAAG,CAC/B,IAAMU,EAAIjB,KAAKC,OAAOc,EAAEC,QAClBE,EAAIH,EAAER,GACZQ,EAAER,GAAKQ,EAAEE,GACTF,EAAEE,GAAKC,KAxElB,mBAiFG,WAAS,IAAD,OACAZ,EAASN,KAAKM,OAAOa,KAAI,SAAAP,GAAC,OAAI,IAAIQ,EAAMR,MACxCS,EAAQ,CACRC,KAAMhB,EAAO,GACbiB,IAAK,IAKT,OAHAjB,EAAOkB,SAAQ,SAAAC,GAAC,OAAIC,EAASD,EAAG,EAAK9B,OAAQ0B,MAC7CM,EAAUrB,EAAQN,KAAKL,OAAQ0B,GAC/BA,EAAME,IAAIK,MAAK,SAACC,EAAIC,GAAL,OAAYD,EAAGE,UAAUD,EAAI,EAAKnC,WAC1C0B,IA1Fd,sBA6FG,WACI,MAAM,eAAN,OAAsBrB,KAAKL,OAA3B,kBAA2CK,KAAKM,OAAO0B,KAAK,MAA5D,SA9FP,K,kCAsGKZ,E,WAaF,WAAYR,GAAI,yBAXhBqB,IAAM,KAWS,KAVfC,IAAM,KAUS,KATfC,SAAW,KASI,KARfC,MAAQ,EAQO,gDAiIK,OAhIhBpC,KAAKqC,OAASzB,E,2CAalB,SAAQsB,EAAKC,GACT,IAAIvB,EACJ,OAAQuB,GACJ,IAAK,IACDvB,EAAIZ,KAAKqC,OAASH,EAAIG,OACtB,MACJ,IAAK,OACDzB,EAAIZ,KAAKqC,OAASH,EAAIG,OACtB,MACJ,IAAK,IAED,IADAzB,EAAIZ,KAAKqC,OAASH,EAAIG,QACd,EAAG,OAAO,KAClB,MACJ,IAAK,IAED,GADAzB,EAAIZ,KAAKqC,OAASH,EAAIG,QACjBC,OAAOC,UAAU3B,GAAI,OAAO,KACjC,MACJ,QAAS,MAAM,IAAI4B,MAAJ,2BAA8BL,IAGjD,IAAIV,EAAI,IAAIL,EAAMR,GAKlB,OAJAa,EAAEQ,IAAMjC,KACRyB,EAAES,IAAMA,EACRT,EAAEU,SAAWA,EACbV,EAAEW,MAAQpC,KAAKoC,MAAQF,EAAIE,MAAQ,EAC5BX,I,uBAWX,SAAUS,EAAKvC,GAEX,IAAM8C,EAAQ5B,KAAK6B,IAAI1C,KAAKqC,OAAS1C,GAC/BgD,EAAQ9B,KAAK6B,IAAIR,EAAIG,OAAS1C,GACpC,GAAI8C,IAAUE,EAAO,OAAOF,EAAQE,EAGpC,IAAMC,EAAS5C,KAAKoC,MACdS,EAASX,EAAIE,MACnB,OAAIQ,IAAWC,EAAeD,EAASC,EAGhC7C,KAAK8C,WAAW9B,OAASkB,EAAIY,WAAW9B,S,0BAMnD,WACI,OAAgB,MAAZhB,KAAKiC,IACEc,OAAO/C,KAAKqC,QAEjB,IAAN,OAAWrC,KAAKiC,IAAIe,eAApB,aAAuChD,KAAKmC,SAA5C,aAAyDnC,KAAKkC,IAAIc,eAAlE,O,oBAMJ,WAEI,OADS,IAAIC,SAAJ,iBAAuBjD,KAAKqC,OAA5B,gBAA0CrC,KAAK8C,WAAWI,QAAQ,QAAM,MAC1EC,K,2BAOX,WAGI,GAAgB,MAAZnD,KAAKiC,IACL,MAAM,GAAN,OAAUjC,KAAKqC,OAAf,cAA2BrC,KAAKqC,QAapC,OARA,SAASD,EAAMX,GAEX,OAAa,MAATA,EAAEQ,IAAoB,GAGRG,EAAMX,EAAEQ,KAAOG,EAAMX,EAAES,KACzB,UAAMT,EAAEQ,IAAII,OAAZ,YAAsBZ,EAAEU,SAAxB,YAAoCV,EAAES,IAAIG,OAA1C,cAAsDZ,EAAEY,OAAxD,MAEbD,CAAMpC,MAAMoD,S,sBAGvB,WACI,GAA8B,MAA1B,YAAApD,KAAA,MAAgC,CAChC,IAAIqD,EAAOrD,KAAKgD,eAEhBK,EAAOA,EAAKH,QAAQ,gBAAe,MAMnC,IAJA,IAAMI,EAAa,2DACbC,EAAc,iEACdC,EAAa,iEACbC,EAAY,6DACR,CAMN,GALcJ,KAIdA,GADAA,GADAA,GADAA,EAAOA,EAAKH,QAAQI,EAAY,mBACpBJ,QAAQK,EAAa,mBACrBL,QAAQM,EAAY,yBACpBN,QAAQO,EAAW,mBACT,MAE1B,YAAAzD,KAAA,MAAyBqD,EAE7B,OAAO,YAAArD,KAAP,U,KAYR,SAAS0B,EAASgC,EAAO/D,EAAQ0B,GACzBqC,EAAM3B,UAAUV,EAAMC,KAAM3B,GAAU,IACtC0B,EAAMC,KAAOoC,GAEbA,EAAMrB,SAAW1C,GACjB0B,EAAME,IAAIf,KAAKkD,GAIvB,IAAMC,EAAa,CAAC,IAAK,IAAK,OAAK,KASnC,SAAShC,EAAUrB,EAAQX,EAAQ0B,GAC/B,IAAK,IAAId,EAAI,EAAGA,EAAID,EAAOU,OAAS,IAAKT,EACrC,IAAK,IAAIU,EAAIV,EAAI,EAAGU,EAAIX,EAAOU,SAAUC,EAAG,CAExC,IAAIgB,EAAM3B,EAAOC,GAAI2B,EAAM5B,EAAOW,GAClC,GAAIgB,EAAII,OAASH,EAAIG,OAAQ,CAAC,IAAD,EACZ,CAACH,EAAKD,GAAlBA,EADwB,KACnBC,EADmB,KAHW,oBAQzByB,GARyB,IAQxC,2BAA2B,CAAC,IAAnBC,EAAkB,QACjBC,EAAS5B,EAAI6B,QAAQ5B,EAAK0B,GAChC,GAAc,MAAVC,EAMJ,GAJAnC,EAASmC,EAAQlE,EAAQ0B,GAIrBf,EAAOU,OAAS,EAEhBW,EADsBoC,EAAOzD,EAAQC,EAAGU,EAAG4C,GAClBlE,EAAQ0B,IAlBD,gCA6BpD,SAAS0C,EAAOzD,EAAQ0D,EAAYC,EAAYC,GAC5C,GAAgB,MAAZA,EAAkB,OAAO,KAE7B,IADA,IAAMC,EAAO,CAACD,GACL3D,EAAI,EAAGA,EAAID,EAAOU,SAAUT,EAC7BA,IAAMyD,GAAczD,IAAM0D,GAC9BE,EAAK3D,KAAKF,EAAOC,IAErB,OAAO4D,EAIiD,kBAAnBC,EAAOC,UAC5CA,QAAQ3E,aAAeA,EACvB2E,QAAQjD,MAAQA,K,yJC9TpB,SAASkD,EAAQC,GACf,OACE,wBAAQC,UAAU,gBAAgBC,QAAS,kBAAMF,EAAME,WAAWC,MAAO,CAACC,MAAM,YAAhF,SACGJ,EAAMb,QAKb,SAASkB,EAAmBL,GAC1B,OACE,wBAAQC,UAAU,aAAaC,QAAS,kBAAMF,EAAME,WAApD,SACGF,EAAMb,QAKb,SAASmB,EAAaN,GACpB,OACE,wBAAQC,UAAU,oBAAoBC,QAAS,kBAAMF,EAAME,WAA3D,SACGF,EAAMb,QAIb,SAASoB,EAAcP,GACrB,OACE,wBAAQC,UAAU,oBAAlB,SACGD,EAAMb,QAMb,SAASqB,EAAeR,GACtB,OACE,wBAAQC,UAAU,iBAAlB,SACGD,EAAMb,QAKb,SAASsB,EAAST,GAChB,OACE,mBAAGC,UAAU,WAAb,SACGD,EAAMb,QAKb,SAASuB,IACP,OACE,mBAAGT,UAAU,mBAAb,qCAMJ,SAASU,EAAaX,GACpB,IACMY,EADQZ,EAAMa,aACIjE,KAAI,SAACkE,EAAMC,GAAP,OAC5B,mBAAGd,UAAU,WAAb,SAAgDa,GAAnBC,EAAMxC,eAEnC,OACI,8BAAMqC,IAIL,IAAMI,EAAb,kDAEE,WAAYhB,GAAQ,uCACZA,GAHV,gDAME,SAAaiB,GAAa,IAAD,OACvB,OAAIA,EAAWC,YAEX,cAACZ,EAAD,CACEnB,MAAO8B,EAAWE,UAClBjB,QAAS,kBAAM,EAAKF,MAAMoB,cAAcH,EAAWI,cAIrDJ,EAAWK,OAEX,cAACd,EAAD,CACArB,MAAO8B,EAAWE,YAKpB,cAACZ,EAAD,CACEpB,MAAO8B,EAAWE,cAxB1B,yBA4BE,SAAYhC,GACV,OACE,cAACqB,EAAD,CACErB,MAAOA,MA/Bf,2BAmCE,SAAcoC,EAAQC,GAAU,IAAD,OAC7B,OACE,cAACzB,EAAD,CACEZ,MAAOoC,EACPrB,QAAS,kBAAM,EAAKF,MAAMyB,eAAeD,QAvCjD,qCA2CE,SAAwBD,EAAQC,GAAU,IAAD,OACvC,OACE,cAACnB,EAAD,CACElB,MAAOoC,EACPrB,QAAS,kBAAM,EAAKF,MAAMyB,eAAeD,QA/CjD,4BAmDE,SAAeE,GACb,OACE,cAACjB,EAAD,CACEtB,MAAOuC,MAtDf,gCA2DE,SAAmBC,GACjB,OACE,cAAChB,EAAD,CACAE,aAAcc,MA9DpB,2BAkEE,SAAcD,GACZ,OACE,cAACjB,EAAD,CACEtB,MAAOuC,MArEf,0BAyEE,SAAaE,GAEX,OAAmB,IAAfA,EAEA,cAAClB,EAAD,IAKF,cAACD,EAAD,CACEtB,MAAO,gBAAkByC,MAnFjC,oBAuFE,WA4EF,OAzEM,sBAAK3B,UAAU,YAAf,UACE,qBAAKA,UAAU,MAAf,SACE,sBAAKA,UAAU,wBAAf,UACE,sBAAKA,UAAU,MAAf,UACE,qBAAKA,UAAU,yBAAf,SAAyCxE,KAAKoG,cAAc,MAAO,SACnE,qBAAK5B,UAAU,yBAAf,SAAyCxE,KAAKoG,cAAc,OAAQ,aACpE,qBAAK5B,UAAU,yBAAf,SAAyCxE,KAAKoG,cAAc,QAAS,WACrE,qBAAK5B,UAAU,yBAAf,SAAyCxE,KAAKoG,cAAc,SAAU,gBAExE,sBAAK5B,UAAU,MAAf,UACE,qBAAKA,UAAU,yBAAf,SAAyCxE,KAAKqG,aAAarG,KAAKuE,MAAM+B,gBAAgB,MACtF,qBAAK9B,UAAU,yBAAf,SAAyCxE,KAAKqG,aAAarG,KAAKuE,MAAM+B,gBAAgB,MACtF,qBAAK9B,UAAU,yBAAf,SAAyCxE,KAAKqG,aAAarG,KAAKuE,MAAM+B,gBAAgB,MACtF,qBAAK9B,UAAU,yBAAf,SAAyCxE,KAAKqG,aAAarG,KAAKuE,MAAM+B,gBAAgB,SAExF,sBAAK9B,UAAU,MAAf,UACE,qBAAKA,UAAU,yBAAf,SAAyCxE,KAAKqG,aAAarG,KAAKuE,MAAM+B,gBAAgB,MACtF,qBAAK9B,UAAU,yBAAf,SAAyCxE,KAAKqG,aAAarG,KAAKuE,MAAM+B,gBAAgB,MACtF,qBAAK9B,UAAU,yBAAf,SAAyCxE,KAAKqG,aAAarG,KAAKuE,MAAM+B,gBAAgB,MACvF,qBAAK9B,UAAU,yBAAf,SAAyCxE,KAAKqG,aAAarG,KAAKuE,MAAM+B,gBAAgB,SAEvF,sBAAK9B,UAAU,MAAf,UACA,qBAAKA,UAAU,yBAAf,SAAyCxE,KAAKqG,aAAarG,KAAKuE,MAAM+B,gBAAgB,MACpF,qBAAK9B,UAAU,yBAAf,SAAyCxE,KAAKqG,aAAarG,KAAKuE,MAAM+B,gBAAgB,MACtF,qBAAK9B,UAAU,yBAAf,SAAyCxE,KAAKqG,aAAarG,KAAKuE,MAAM+B,gBAAgB,OACvF,qBAAK9B,UAAU,yBAAf,SAAyCxE,KAAKqG,aAAarG,KAAKuE,MAAM+B,gBAAgB,UAErF,sBAAK9B,UAAU,MAAf,UACA,qBAAKA,UAAU,yBAAf,SAAyCxE,KAAKuG,wBAAwB,QAAS,WAC/E,qBAAK/B,UAAU,yBAAf,SAAyCxE,KAAKuG,wBAAwB,OAAQ,UAC9E,qBAAK/B,UAAU,yBAAf,SAAyCxE,KAAKqG,aAAarG,KAAKuE,MAAM+B,gBAAgB,OACtF,qBAAK9B,UAAU,yBAAf,SAAyCxE,KAAKqG,aAAarG,KAAKuE,MAAM+B,gBAAgB,UAExF,qBAAK9B,UAAU,MAAf,SACE,qBAAKA,UAAU,SAAf,SACGxE,KAAKwG,eAAexG,KAAKuE,MAAMkC,cAGpC,qBAAKjC,UAAU,MAAf,SACE,yBAEF,qBAAKA,UAAU,MAAf,SACE,qBAAKA,UAAU,SAAf,SACGxE,KAAK0G,mBAAmB1G,KAAKuE,MAAMoC,qBAGxC,qBAAKnC,UAAU,MAAf,SACE,yBAEF,qBAAKA,UAAU,MAAf,SACE,sBAAKA,UAAU,SAAf,UACGxE,KAAK4G,cAAc,YAAc5G,KAAKuE,MAAMsC,cAC5C7G,KAAK4G,cAAc,iBAAmB5G,KAAKuE,MAAMuC,sBAGtD,qBAAKtC,UAAU,MAAf,SACE,yBAEF,qBAAKA,UAAU,MAAf,SACE,qBAAKA,UAAU,SAAf,SACGxE,KAAK+G,aAAc/G,KAAKuE,MAAMsC,aAAe7G,KAAKuE,MAAMuC,qBAG7D,qBAAKtC,UAAU,MAAf,SACE,8BAIN,qBAAKA,UAAU,SAAf,gCA9JR,GAA2BwC,IAAMC,WCnE1B,SAASC,EAAWC,EAAYC,GAOnC,IANA,IAAIC,EAAU,GAEVC,EAAe,CAAC,GAAG,GAAG,GAAG,KACzBC,EAAcC,MAAM,GAAGC,KAAK,GAC5BC,EAAeF,MAAM,GAAGC,KAAK,GAExBlH,EAAI,EAAGA,EAAI,EAAGA,IACnBgH,EAAYhH,GAAKM,KAAKZ,SAG1B,IAAK,IAAIM,EAAI,EAAGA,EAAI,EAAGA,IAAK,CAGxB,IAFA,IAAIoH,GAAY,EACZC,EAAW,EACN3G,EAAI,EAAGA,EAAI,EAAGA,IACf0G,EAAWJ,EAAYtG,KACvB0G,EAAWJ,EAAYtG,GACvB2G,EAAW3G,GAGnByG,EAAanH,GAAKqH,EAClBL,EAAYK,IAAa,EAG7B,IAAK,IAAIrH,EAAI,EAAGA,EAAI4G,EAAY5G,IAC5B8G,EAAQ7G,KAAK8G,EAAaI,EAAanH,KAG3C,IAAK,IAAIA,EAAI4G,EAAY5G,EAAI4G,EAAaC,EAAY7G,IAClD8G,EAAQ7G,KAAKK,KAAKC,MAAuB,GAAhBD,KAAKZ,SAAiB,IAGnD,OAAOoH,E,YC5BEQ,EAAb,WAMI,WAAYnC,EAAWE,GAAY,yBALnCF,UAAY,IAKsB,KAJlCE,UAAY,EAIsB,KAHlCH,aAAc,EAGoB,KAFlCI,QAAS,EAGL7F,KAAK0F,UAAYA,EACjB1F,KAAK4F,UAAYA,EACjB5F,KAAKyF,aAAc,EACnBzF,KAAK6F,QAAS,EAVtB,4CAaI,WACI,OAAO7F,KAAK4F,UAAY,IAdhC,4BAgBI,WACI,OAA0B,IAAnB5F,KAAK4F,YAjBpB,2BAmBI,WACI,OAA0B,IAAnB5F,KAAK4F,cApBpB,KAyBakC,EAAb,kDAkBI,WAAYvD,GAAQ,IAAD,8BACf,cAAMA,IAjBVkC,SAAW,GAgBQ,EAfnBI,aAAe,EAeI,EAdnBC,gBAAkB,EAcC,EAbnBR,gBAAkB,GAaC,EAZnByB,eAAiB,GAYE,EAXnBC,aAAe,EAWI,EAVnBb,WAAa,EAUM,EATnBC,WAAa,EASM,EARnBT,gBAAkB,GAQC,EAPnBsB,iBAAmB,GAUf,EAAK3B,gBAAgB9F,KAAK,IAAIqH,EAAe,IAAK,IAClD,EAAKvB,gBAAgB9F,KAAK,IAAIqH,EAAe,IAAK,IAClD,EAAKvB,gBAAgB9F,KAAK,IAAIqH,EAAe,IAAK,IAClD,EAAKvB,gBAAgB9F,KAAK,IAAIqH,EAAe,IAAK,IAClD,EAAKvB,gBAAgB9F,KAAK,IAAIqH,EAAe,IAAK,IAClD,EAAKvB,gBAAgB9F,KAAK,IAAIqH,EAAe,IAAK,IAElD,EAAKvB,gBAAgB9F,KAAK,IAAIqH,EAAe,IAAK,IAClD,EAAKvB,gBAAgB9F,KAAK,IAAIqH,EAAe,IAAK,IAClD,EAAKvB,gBAAgB9F,KAAK,IAAIqH,EAAe,IAAK,IAClD,EAAKvB,gBAAgB9F,KAAK,IAAIqH,EAAe,IAAK,IAClD,EAAKvB,gBAAgB9F,KAAK,IAAIqH,EAAe,IAAK,KAClD,EAAKvB,gBAAgB9F,KAAK,IAAIqH,EAAe,IAAK,KAClD,EAAKvB,gBAAgB9F,KAAK,IAAIqH,EAAe,IAAK,KAClD,EAAKvB,gBAAgB9F,KAAK,IAAIqH,EAAe,IAAK,KAjBnC,EAlBvB,6CAcI,WACI,OAAO7H,KAAKmH,WAAanH,KAAKoH,aAftC,qBAsCI,WACI,IAAIc,EAAahB,EAAWlH,KAAKmH,WAAYnH,KAAKoH,YAClDpH,KAAKmI,WAAWD,GAChBlI,KAAK6G,aDnCN,WAGH,IAFA,IAAIhD,EAAS,EAEK,IAAXA,GAAc,CACjB,IAGIuE,EAAY,IAHCvH,KAAKC,MAAsB,GAAhBD,KAAKZ,UACoB,GAAjCY,KAAKC,MAAsB,GAAhBD,KAAKZ,UACgB,IAAhCY,KAAKC,MAAsB,EAAhBD,KAAKZ,UAEhCmI,EAAY,IAAMA,EAAY,MAC9BvE,EAASuE,GAGjB,OAAOvE,ECuBiBwE,GACpBrI,KAAKsI,eAAiB,EACtBtI,KAAKyG,SAAW,GAChBzG,KAAKgI,aAAe,EACpBhI,KAAKuI,qBACLvI,KAAKwI,sBA9Cb,qBAiDI,SAAQN,EAAYvI,GAChBK,KAAKmI,WAAWD,GAChBlI,KAAK6G,aAAelH,EACpBK,KAAKsI,eAAiB,EACtBtI,KAAKyG,SAAW,GAChBzG,KAAKgI,aAAe,EACpBhI,KAAKuI,qBACLvI,KAAKwI,sBAxDb,2BA2DI,SAAcrB,EAAYC,GACtBpH,KAAKmH,WAAaA,EAClBnH,KAAKoH,WAAaA,IA7D1B,2BAgEI,WACI,IAAIc,EAAahB,EAAWlH,KAAKmH,WAAYnH,KAAKoH,YAClDpH,KAAKmI,WAAWD,GAChBlI,KAAKsI,eAAiB,EACtBtI,KAAKyG,SAAW,GAChBzG,KAAKgI,aAAe,EACpBhI,KAAKuI,qBACLvI,KAAKwI,sBAvEb,gCA0EI,WAGI,IAFA,IAAIC,EAAQ,GACRC,EAAO,GACFnI,EAAI,EAAGA,EAAIP,KAAK+H,eAAe/G,OAAQT,IAAK,CACjD,IAAIoI,EAAS3I,KAAK+H,eAAexH,GAC7BqI,EAAS5I,KAAKsG,gBAAgBqC,GAAQjD,UAEtCgD,EAAK1H,OAAS,IAAG0H,GAAc,KACnCA,GAAcE,EAEdH,EAAMjI,KAAKoI,GAGf5I,KAAK8G,gBAAkB9G,KAAK6I,iBAAiBJ,GAAO,GACpDzI,KAAKyG,SAAWiC,IAxFxB,wBA2FI,SAAWI,GACP9I,KAAKsG,gBAAgBtF,OAAS,EAC9B,IAAK,IAAIT,EAAI,EAAGA,EAAIuI,EAAY9H,OAAQT,IACpCP,KAAKsG,gBAAgB9F,KAAK,IAAIqH,EAAeiB,EAAYvI,GAAIP,KAAKsG,gBAAgBtF,SAEtF,IAAK,IAAIT,EAAIP,KAAKsG,gBAAgBtF,OAAQT,EAAI,GAAIA,IAC9CP,KAAKsG,gBAAgB9F,KAAK,IAAIqH,EAAe,IAAK7H,KAAKsG,gBAAgBtF,SAE1EhB,KAAK+I,iBAnGd,+BAsGI,WACI,IAAIC,GAAqB,EACrBC,GAAqB,EACrBC,GAAyB,EACzBC,GAA0B,EAE9B,GAAmC,IAA/BnJ,KAAK+H,eAAe/G,OACpBgI,GAAqB,EACrBE,GAAyB,MACtB,CACH,IAAIE,EAAWpJ,KAAKsG,gBAAgBtG,KAAK+H,eAAe/H,KAAK+H,eAAe/G,OAAO,IAE/EoI,EAASC,YACTJ,GAAqB,EACrBE,EAA2BnJ,KAAKgI,aAAe,GAE3CoB,EAASE,iBACTL,GAAqB,GAErBD,GAAqB,EACrBE,GAAyB,GAKrClJ,KAAKsG,gBAAgB,GAAGb,YAAcyD,EACtClJ,KAAKsG,gBAAgB,GAAGb,YAAc0D,EAEtC,IAAK,IAAI5I,EAAI,EAAGA,EAAI,EAAGA,IACnBP,KAAKsG,gBAAgB/F,GAAGkF,YAAcwD,EAE1C,IAAK,IAAI1I,EAAI,EAAGA,EAAIP,KAAKsG,gBAAgBtF,OAAQT,IAC7CP,KAAKsG,gBAAgB/F,GAAGkF,YAAcuD,IAAuBhJ,KAAKsG,gBAAgB/F,GAAGsF,QAAgD,IAAtC7F,KAAKsG,gBAAgB/F,GAAGmF,YAtInI,8BA0II,SAAiB6D,EAAcC,GAGvBA,IACAxJ,KAAK2G,gBAAkB,GACvB3G,KAAKiI,iBAAmB,GACxBjI,KAAKyG,SAAW,GAChBzG,KAAK8G,gBAAkB,GAU3B,IAPA,IAAI2C,GAAU,EACVC,EAAc,EACdC,EAAkB,GAClBC,GAAoB,EAGpB5B,EAAe,EACVzH,EAAI,EAAGA,EAAIgJ,EAAavI,OAAQT,IAAK,CAC1C,IAAIsJ,EAAaN,EAAahJ,GAE9B,GAAwB,MAApBgJ,EAAahJ,GAAY,CACzBqJ,GAAoB,EACpB5B,IAEA,IADA,IAAI/G,EAAIV,EAAI,EACLU,EAAIsI,EAAavI,QAAQ,CAI5B,GAHwB,MAApBuI,EAAatI,IAAY+G,IACL,MAApBuB,EAAatI,IAAY+G,IAER,IAAjBA,EAAoB,CACpB,IAAI8B,EAAYP,EAAaQ,MAAMxJ,EAAE,EAAGU,GACxC4I,EAAa7J,KAAK6I,iBAAiBiB,GAAW,GAC9CvJ,EAAIU,EACJA,EAAIsI,EAAavI,OAErBC,KAGR0I,EAAgBnJ,KAAKqJ,GAIrBL,GACII,GACA5J,KAAK2G,gBAAgBnG,KAAK,KAAOmJ,EAAgB3H,KAAK,MAM9D,IADA,IAAIgI,EAAM,EACHA,EAAML,EAAgB3I,OAAS,GAAG,CASrC,GARiC,MAA7B2I,EAAgBK,EAAM,KACtBL,EAAgBK,EAAM,GAAKC,SAASN,EAAgBK,IAAQC,SAASN,EAAgBK,EAAM,IAC3FL,EAAgBO,OAAOF,EAAK,GAC5BA,GAAO,EACHR,GACAxJ,KAAK2G,gBAAgBnG,KAAK,KAAOmJ,EAAgB3H,KAAK,OAG7B,MAA7B2H,EAAgBK,EAAM,GAAY,CAClC,IAAIG,EAAUF,SAASN,EAAgBK,EAAM,IACzCI,EAAWH,SAASN,EAAgBK,IACpCK,EAAWD,EAAWD,EAGR,IAFFC,EAAWD,IAGvBV,GAAU,EACVzJ,KAAK2G,gBAAgBnG,KAAK,UAAYmJ,EAAgBI,MAAMC,EAAKA,EAAM,GAAGhI,KAAK,KAAO,MAAQqI,EAASC,QAAQ,GAAK,2CAExHX,EAAgBK,EAAM,GAAKC,SAASI,GACpCV,EAAgBO,OAAOF,EAAK,GAC5BA,GAAO,EAEHR,IAA2B,IAAZC,GACfzJ,KAAK2G,gBAAgBnG,KAAK,KAAOmJ,EAAgB3H,KAAK,MAI9DgI,GAAO,EACHP,IAASO,EAAML,EAAgB3I,QAIvC,IAAgB,IAAZyI,EAAmB,CACnB,IAAIc,GAAgB,EAEpB,IADAP,EAAM,EACCA,EAAML,EAAgB3I,OAAS,GACD,MAA7B2I,EAAgBK,EAAM,KACtBL,EAAgBK,EAAM,GAAKC,SAASN,EAAgBK,IAAQC,SAASN,EAAgBK,EAAM,IAC3FL,EAAgBO,OAAOF,EAAK,GAC5BA,GAAO,EACHR,IACAe,GAAgB,IAGS,MAA7BZ,EAAgBK,EAAM,KACtBL,EAAgBK,EAAM,GAAKC,SAASN,EAAgBK,IAAQC,SAASN,EAAgBK,EAAM,IAC3FL,EAAgBO,OAAOF,EAAK,GAC5BA,GAAO,EACHR,IACAe,GAAgB,IAGxBP,GAAO,EAGPO,GACAvK,KAAK2G,gBAAgBnG,KAAK,KAAOmJ,EAAgB3H,KAAK,MAE1DhC,KAAK2G,gBAAgBnF,SAAQ,SAAAgJ,GACrBC,MAAMD,KAAUA,EAAU,UAG9Bb,EAAgB3I,OAAS,IAErB0I,EADAe,MAAMd,EAAgB,IACR,MAEAM,SAASN,EAAgB,KAInD,OAAOD,IAlQf,8BAsQI,SAAiBgB,GAEqC,MAA9C1K,KAAKsG,gBAAgBoE,GAAWhF,UAChC1F,KAAKgI,eAE8C,MAA9ChI,KAAKsG,gBAAgBoE,GAAWhF,UACrC1F,KAAKgI,eAEAhI,KAAKsG,gBAAgBoE,GAAWrB,aACrCrJ,KAAKsG,gBAAgBoE,GAAW7E,QAAS,GAG7C7F,KAAK+H,eAAevH,KAAKkK,GACzB1K,KAAKuI,qBACLvI,KAAKwI,sBApRb,mCAuRI,WACI,GAAIxI,KAAK+H,eAAe/G,OAAS,EAAG,CAEhC,IAAI4E,EAAY5F,KAAK+H,eAAe/H,KAAK+H,eAAe/G,OAAO,GACb,MAA9ChB,KAAKsG,gBAAgBV,GAAWF,UAChC1F,KAAKgI,eAE8C,MAA9ChI,KAAKsG,gBAAgBV,GAAWF,UACrC1F,KAAKgI,eAEAhI,KAAKsG,gBAAgBV,GAAWyD,aACrCrJ,KAAKsG,gBAAgBV,GAAWC,QAAS,GAG7C7F,KAAK+H,eAAetH,MACpBT,KAAKuI,qBACLvI,KAAKwI,uBAvSjB,yBA2SI,SAAYmC,GACR,OAAOA,GACH,IAAK,IACD,OAAO3K,KAAKsG,gBAAgB,GAChC,IAAK,IACD,OAAOtG,KAAKsG,gBAAgB,GAChC,IAAK,IACD,OAAOtG,KAAKsG,gBAAgB,GAChC,IAAK,IACD,OAAOtG,KAAKsG,gBAAgB,GAChC,IAAK,IACD,OAAOtG,KAAKsG,gBAAgB,GAChC,IAAK,IACD,OAAOtG,KAAKsG,gBAAgB,GAIpC,OAAO,IAAIuB,EAAe,IAAK,KA5TvC,uBA+TI,SAAU6C,GACN,OAAIA,GAAa,IACbA,GAAwB,GACR1K,KAAKsG,gBAAgBtF,OAC1BhB,KAAKsG,gBAAgBoE,GAI7B,IAAI7C,GAAgB,EAAE,KAvUrC,0BA0UI,WACI7H,KAAK+H,eAAe/G,OAAS,EAC7BhB,KAAKgI,aAAe,EACpB,IAAK,IAAIzH,EAAI,EAAGA,EAAIP,KAAKsG,gBAAgBtF,OAAQT,IAC7CP,KAAKsG,gBAAgB/F,GAAGsF,QAAS,EAErC7F,KAAKuI,qBACLvI,KAAKwI,sBAjVb,yBAoVI,WAII,IADA,IAAI1I,EAAU,GACLS,EAAI,EAAGA,EAAK,EAAIP,KAAKmH,WAAa5G,IACvCT,EAAQU,KAAKR,KAAKsG,gBAAgB/F,GAAGmF,WAGzC,IADA,IAAI3F,EAAa,GACRQ,EAAK,EAAIP,KAAKmH,WAAa5G,EAAK,EAAIP,KAAKmH,WAAanH,KAAKoH,WAAa7G,IAC7ER,EAAWS,KAAKR,KAAKsG,gBAAgB/F,GAAGmF,WAI5C,IAIIkF,EAAY,GACZd,EALe,IAAIpK,IAAaM,KAAK6G,aAAc7G,KAAKmH,WAAYnH,KAAKmH,WAAanH,KAAKoH,WAAYtH,EAASC,GAC3F8K,QAIHvJ,KAAKwB,WAAWgI,MAAM,IACxCC,EAAQ,GACZ,IAAK,IAAIxK,KAAKuJ,EAAW,CACrB,IAAIkB,EAAIlB,EAAUvJ,GACd,aAAa0K,SAASD,GACtBD,EAAQA,EAAMG,OAAOF,GAEhB,UAAUC,SAASD,KACpBD,EAAM/J,OAAS,IACf4J,EAAUpK,KAAKuK,GACfA,EAAQ,IAEF,MAANC,GACAJ,EAAUpK,KAAKwK,IAIvBD,EAAM/J,OAAS,GACf4J,EAAUpK,KAAKuK,GAInB/K,KAAK+H,eAAe/G,OAAS,EAC7B,IAAK,IAAIT,EAAI,EAAGA,EAAIP,KAAKsG,gBAAgBtF,OAAQT,IAC7CP,KAAKsG,gBAAgB/F,GAAGsF,QAAS,EASrC,IALA,IAAIsF,EAAmBnL,KAAKoL,YAAY,KAAKxF,UACzCyF,EAAoBrL,KAAKoL,YAAY,KAAKxF,UAC1C0F,EAAgBtL,KAAKoL,YAAY,KAAKxF,UAEtC2F,GAAa,EACRC,EAAI,EAAGA,EAAIZ,EAAU5J,OAAQwK,IAAK,CAGvC,IAFA,IAAIC,GAAa,EACbC,EAAI,EACDA,EAAI1L,KAAKsG,gBAAgBtF,QACxB4J,EAAUY,IAAMxL,KAAKsG,gBAAgBoF,GAAGhG,YAAgD,IAAnC1F,KAAKsG,gBAAgBoF,GAAG7F,SAC7E4F,EAAYC,EACZA,EAAI1L,KAAKsG,gBAAgBtF,QAE7B0K,IAIAD,GAAa,KAGTF,EAAY,GAAKE,EAAY,GAGxBF,IAAcF,GAAqBI,IAAcN,GAGjDI,EAAY,GAAKE,IAAcN,GAG/BI,IAAcF,GAAqBI,EAAY,IARpDzL,KAAK+H,eAAevH,KAAK8K,GAY7BtL,KAAK+H,eAAevH,KAAKiL,GACrBA,EAAY,IACZzL,KAAKsG,gBAAgBmF,GAAW5F,QAAS,IAGjD0F,EAAYE,EAGhBzL,KAAKuI,qBACLvI,KAAKwI,wBA5ab,GAA0CxB,IAAMC,W,gCCxBnC0E,EAAb,kDAEE,WAAYpH,GAAQ,IAAD,8BACjB,cAAMA,IAQRqH,wBAA0B,SAACC,GACzB,IAAIC,EAAc,EAAKC,MAAMC,iBAAmBH,EAC5CC,GAAe,GAAKA,GAAe,GACvC,EAAKG,SAAS,CACXD,iBAAkBF,KAbJ,EAiBpBI,wBAA0B,SAACL,GAC1B,IAAIC,EAAc,EAAKC,MAAMI,iBAAmBN,EAC5CC,GAAe,GAAKA,GAAe,GACvC,EAAKG,SAAS,CACXE,iBAAkBL,KAlBnB,EAAKC,MAAQ,CACXC,iBAAkBzH,EAAMyH,iBACxBG,iBAAkB5H,EAAM4H,kBALT,EAFrB,0CA2BC,WAAU,IAAD,OACN,OACE,qBAAKC,GAAG,UAAR,SACE,eAACC,EAAA,EAAD,CAAOC,MAAM,EAAMC,OAAQvM,KAAKwM,YAAhC,UACE,cAACH,EAAA,EAAMI,OAAP,UACE,cAACJ,EAAA,EAAMK,MAAP,wBAEF,cAACL,EAAA,EAAMM,KAAP,CAAYnI,UAAU,YAAtB,SACF,eAACoI,EAAA,EAAD,WACE,eAACC,EAAA,EAAD,WACA,qBAAKrI,UAAU,QAAf,SACE,uBAAOA,UAAU,eAAjB,8BAEA,sBAAKA,UAAU,QAAf,UACA,wBAAQA,UAAU,6BAA6BC,QAAS,kBAAM,EAAKmH,yBAAyB,IAA5F,eADA,OAGA,uBAAOpH,UAAU,eAAesI,KAAK,OAAOC,KAAK,IAAIC,UAAQ,EACrDtJ,MAAO1D,KAAK+L,MAAMC,mBAJ1B,OAMA,wBAAQxH,UAAU,6BAA6BC,QAAS,kBAAM,EAAKmH,wBAAwB,IAA3F,qBAGF,uBACA,eAACiB,EAAA,EAAD,WACA,qBAAKrI,UAAU,QAAf,SACE,uBAAOA,UAAU,eAAjB,8BAEA,sBAAKA,UAAU,QAAf,UACA,wBAAQA,UAAU,6BAA6BC,QAAS,kBAAM,EAAKyH,yBAAyB,IAA5F,eADA,OAGA,uBAAO1H,UAAU,eAAesI,KAAK,OAAOC,KAAK,IAAIC,UAAQ,EACrDtJ,MAAO1D,KAAK+L,MAAMI,mBAJ1B,OAMA,wBAAQ3H,UAAU,6BAA6BC,QAAS,kBAAM,EAAKyH,wBAAwB,IAA3F,0BAKF,eAACG,EAAA,EAAMY,OAAP,WACE,cAACC,EAAA,EAAD,CAAQC,QAAQ,YAAY1I,QAAS,kBAAM,EAAKF,MAAM6I,gBAAtD,mBAGA,cAACF,EAAA,EAAD,CAAQC,QAAQ,UAAU1I,QAAS,kBAAM,EAAKF,MAAM8I,YAAY,EAAKtB,MAAMC,iBAAkB,EAAKD,MAAMI,mBAAxG,sCArEZ,GAA6BnF,IAAMC,WCAtBqG,EAAb,kDAEE,WAAY/I,GAAQ,IAAD,8BACjB,cAAMA,IAgBRgJ,kBAAoB,SAACC,GACnB,IAAIC,EAAe,EAAK1B,MAAM2B,gBAC1BC,EAAY,EAAK5B,MAAMlF,aAEvB4G,EAAazM,OAAS,GAExByM,EAAajN,KAAKgN,GAClB,EAAKvB,SAAS,CAAEyB,gBAAiBD,IAEX,KAAlBD,GAAsB,EAAKvB,SAAS,CAAE2B,eAAe,IACnC,KAAlBJ,GAAsB,EAAKvB,SAAS,CAAE4B,eAAe,IACnC,KAAlBL,GAAsB,EAAKvB,SAAS,CAAE6B,eAAe,IACnC,MAAlBN,GAAuB,EAAKvB,SAAS,CAAE8B,gBAAgB,IAE/B,IAAxBN,EAAazM,QACf,EAAKiL,SAAS,CACZ+B,eAAe,EACfJ,eAAe,EACfC,eAAe,EACfC,eAAe,EACfC,gBAAgB,EAChBE,cAAc,EACdpH,aAAc,MAMlB8G,EAAwB,GAAZA,EAAiBH,EAC7B,EAAKvB,SAAS,CAAEpF,aAAc8G,IAE1B,KAAOA,GAAaA,GAAa,KACnC,EAAK1B,SAAS,CACZgC,cAAc,EACdC,iBAAiB,EACjBC,YAAY,MAjDlB,EAAKpC,MAAQ,CACX2B,gBAAiB,GACjB7G,aAAc,GACdoH,cAAc,EACdD,eAAe,EACfJ,eAAe,EACfC,eAAe,EACfC,eAAe,EACfC,gBAAgB,EAChBG,iBAAiB,EACjBC,YAAY,GAbG,EAFrB,kDA4DE,SAAeC,GACb,OACE,cAACC,EAAD,CACE3K,MAAO0K,MA/Df,0BAmEE,SAAaA,EAAY3I,GAAc,IAAD,OACpC,OAAIA,EAEA,cAAC,EAAD,CACE/B,MAAO0K,EACP3J,QAAS,kBAAM,EAAK8I,kBAAkBa,MAI1C,cAAC,EAAD,CACE1K,MAAO0K,MA7Ef,gCAiFE,WAAsB,IAAD,OACnB,GAAIpO,KAAK+L,MAAMoC,WACb,OACE,cAACG,EAAD,CACE7J,QAAS,kBAAM,EAAKF,MAAMgK,cAAc,EAAKxC,MAAM2B,gBAAiB,EAAK3B,MAAMlF,mBArFzF,oBA0FE,WAAU,IAAD,OA4DP,OAzDE,qBAAKuF,GAAG,aAAR,SACE,eAACC,EAAA,EAAD,CAAOC,MAAM,EAAMC,OAAQvM,KAAKwM,YAAhC,UACE,cAACH,EAAA,EAAMI,OAAP,UACE,cAACJ,EAAA,EAAMK,MAAP,uCAEF,cAACL,EAAA,EAAMM,KAAP,CAAYnI,UAAU,YAAtB,SACE,sBAAKA,UAAU,YAAf,UACE,sBAAKA,UAAU,MAAf,UACE,qBAAKA,UAAU,yBAAf,SAAyCxE,KAAKwO,eAAexO,KAAK+L,MAAM2B,gBAAgB,MACxF,qBAAKlJ,UAAU,yBAAf,SAAyCxE,KAAKwO,eAAexO,KAAK+L,MAAM2B,gBAAgB,MACxF,qBAAKlJ,UAAU,yBAAf,SAAyCxE,KAAKwO,eAAexO,KAAK+L,MAAM2B,gBAAgB,MACxF,qBAAKlJ,UAAU,yBAAf,SAAyCxE,KAAKwO,eAAexO,KAAK+L,MAAM2B,gBAAgB,SAE1F,sBAAKlJ,UAAU,MAAf,UACE,qBAAKA,UAAU,yBAAf,SAAyCxE,KAAKwO,eAAexO,KAAK+L,MAAM2B,gBAAgB,MACxF,qBAAKlJ,UAAU,yBAAf,SAAyCxE,KAAKwO,eAAexO,KAAK+L,MAAM2B,gBAAgB,MACxF,qBAAKlJ,UAAU,yBAAf,SAAyCxE,KAAKwO,eAAexO,KAAK+L,MAAMlF,mBAE1E,qBAAKrC,UAAU,MAAf,SACE,yBAEF,sBAAKA,UAAU,MAAf,UACE,qBAAKA,UAAU,yBAAf,SAAyCxE,KAAKyO,aAAa,EAAGzO,KAAK+L,MAAMmC,mBACzE,qBAAK1J,UAAU,yBAAf,SAAyCxE,KAAKyO,aAAa,EAAGzO,KAAK+L,MAAMmC,mBACzE,qBAAK1J,UAAU,yBAAf,SAAyCxE,KAAKyO,aAAa,EAAGzO,KAAK+L,MAAMmC,sBAE3E,sBAAK1J,UAAU,MAAf,UACE,qBAAKA,UAAU,yBAAf,SAAyCxE,KAAKyO,aAAa,EAAGzO,KAAK+L,MAAMmC,mBACzE,qBAAK1J,UAAU,yBAAf,SAAyCxE,KAAKyO,aAAa,EAAGzO,KAAK+L,MAAMmC,mBACzE,qBAAK1J,UAAU,yBAAf,SAAyCxE,KAAKyO,aAAa,EAAGzO,KAAK+L,MAAMmC,sBAE3E,sBAAK1J,UAAU,MAAf,UACE,qBAAKA,UAAU,yBAAf,SAAyCxE,KAAKyO,aAAa,EAAGzO,KAAK+L,MAAMmC,mBACzE,qBAAK1J,UAAU,yBAAf,SAAyCxE,KAAKyO,aAAa,EAAGzO,KAAK+L,MAAMmC,mBACzE,qBAAK1J,UAAU,yBAAf,SAAyCxE,KAAKyO,aAAa,EAAGzO,KAAK+L,MAAMmC,sBAE3E,sBAAK1J,UAAU,MAAf,UACE,qBAAKA,UAAU,yBAAf,SAAyCxE,KAAKyO,aAAa,GAAIzO,KAAK+L,MAAMiC,iBAC1E,qBAAKxJ,UAAU,yBAAf,SAAyCxE,KAAKyO,aAAa,EAAGzO,KAAK+L,MAAMkC,mBAE3E,sBAAKzJ,UAAU,MAAf,UACE,qBAAKA,UAAU,yBAAf,SAAyCxE,KAAKyO,aAAa,GAAIzO,KAAK+L,MAAM6B,iBAC1E,qBAAKpJ,UAAU,yBAAf,SAAyCxE,KAAKyO,aAAa,GAAIzO,KAAK+L,MAAM8B,iBAC1E,qBAAKrJ,UAAU,yBAAf,SAAyCxE,KAAKyO,aAAa,GAAIzO,KAAK+L,MAAM+B,iBAC1E,qBAAKtJ,UAAU,yBAAf,SAAyCxE,KAAKyO,aAAa,IAAKzO,KAAK+L,MAAMgC,0BAIjF,eAAC1B,EAAA,EAAMY,OAAP,WACE,cAACC,EAAA,EAAD,CAAQC,QAAQ,YAAY1I,QAAS,kBAAM,EAAKF,MAAM6I,gBAAtD,mBAGCpN,KAAK0O,iCAjJlB,GAAgC1H,IAAMC,WA0JtC,SAASlC,EAAeR,GACtB,OACE,wBAAQC,UAAU,iBAAlB,SACGD,EAAMb,QAKb,SAAS2K,EAAc9J,GACrB,OACE,wBAAQC,UAAU,gBAAlB,SACGD,EAAMb,QAKb,SAASmB,EAAaN,GACpB,OACE,wBAAQC,UAAU,oBAAoBC,QAAS,kBAAMF,EAAME,WAA3D,SACGF,EAAMb,QAKb,SAAS4K,EAAa/J,GACpB,OACE,cAAC2I,EAAA,EAAD,CAAQC,QAAQ,UAAU1I,QAAS,kBAAMF,EAAME,WAA/C,oBCpLG,IAAMkK,EAAb,kDACE,WAAYpK,GAAQ,IAAD,8BACjB,cAAMA,IACDwH,MAAQ,CACXjE,qBAAsB,IAAIA,EAAqBvD,GAC/C+B,gBAAiB,CACf,IAAIuB,EAAe,IAAK,GACxB,IAAIA,EAAe,IAAK,GACxB,IAAIA,EAAe,IAAK,GACxB,IAAIA,EAAe,IAAK,GACxB,IAAIA,EAAe,IAAK,GACxB,IAAIA,EAAe,IAAK,GACxB,IAAIA,EAAe,IAAK,GACxB,IAAIA,EAAe,IAAK,GACxB,IAAIA,EAAe,IAAK,GACxB,IAAIA,EAAe,IAAK,GACxB,IAAIA,EAAe,IAAK,IACxB,IAAIA,EAAe,IAAK,IACxB,IAAIA,EAAe,IAAK,IACxB,IAAIA,EAAe,IAAK,KAE1BhB,aAAc,EACdC,gBAAiB,EACjBL,SAAU,GACVE,gBAAiB,GACjBsB,iBAAkB,GAClB2G,WAAW,EACX5C,iBAAkB,EAClB6C,iBAAkB,EAClBC,cAAc,GA5BC,EADrB,qDAiCE,WACE9O,KAAK+L,MAAMjE,qBAAqBiH,UAChC/O,KAAKgP,qCAnCT,gCAsCE,SAAmBC,GACjB,OAAQA,GACN,IAAK,MACH,GAAIjP,KAAK+L,MAAMjF,kBAAoB9G,KAAK+L,MAAMlF,eACuB,IAA/DqI,OAAOC,QAAQ,4CACjB,MAGJnP,KAAK+L,MAAMjE,qBAAqBiH,UAChC/O,KAAKgP,mCACL,MACF,IAAK,QACHhP,KAAK+L,MAAMjE,qBAAqBiB,eAChC/I,KAAKgP,mCACL,MACF,IAAK,OACHhP,KAAK+L,MAAMjE,qBAAqBsH,wBAChCpP,KAAKgP,mCACL,MACF,IAAK,UACHhP,KAAKiM,SAAS,CACZ2C,WAAW,IAEb,MACF,IAAK,UACH,GAAI5O,KAAK+L,MAAMjF,kBAAoB9G,KAAK+L,MAAMlF,eAC4B,IAApEqI,OAAOC,QAAQ,iDACjB,MAGJnP,KAAKiM,SAAS,CACZ6C,cAAc,IAEhB,MACF,IAAK,QACH,GAAI9O,KAAK+L,MAAMC,iBAAmBhM,KAAK+L,MAAM8C,iBAAmB,EAAG,CACjEK,OAAOG,MAAM,sDACb,MAEF,IAAwD,IAApDH,OAAOC,QAAQ,iCACjB,MAEFnP,KAAK+L,MAAMjE,qBAAqBwH,cAChCtP,KAAKgP,sCAjFb,8CAwFE,WAEE,IAAI1I,EAAkBtG,KAAK+L,MAAMjE,qBAAqBxB,gBAClDQ,EAAkB9G,KAAK+L,MAAMjE,qBAAqBhB,gBAClDL,EAAWzG,KAAK+L,MAAMjE,qBAAqBrB,SAC3CE,EAAkB3G,KAAK+L,MAAMjE,qBAAqBnB,gBAClDqF,EAAmBhM,KAAK+L,MAAMjE,qBAAqBX,WACnD0H,EAAmB7O,KAAK+L,MAAMjE,qBAAqBV,WAEvDpH,KAAKiM,SAAS,CACZ3F,gBAAiBA,EACjBO,aAAc7G,KAAK+L,MAAMjE,qBAAqBjB,aAC9CC,gBAAiB9G,KAAK+L,MAAMjE,qBAAqBhB,gBACjDL,SAAUA,EACVE,gBAAiBA,EACjBsB,iBAAkBnB,EAClBkF,iBAAkBA,EAClB6C,iBAAkBA,MAzGxB,+BA6GE,SAAkBnE,GAChB1K,KAAK+L,MAAMjE,qBAAqByH,iBAAiB7E,GACjD1K,KAAKgP,qCA/GT,mCAkHE,WACEhP,KAAKiM,SAAS,CACZ2C,WAAW,EACXE,cAAc,MArHpB,kCAyHE,SAAqB9C,EAAkBG,GAErCnM,KAAK+L,MAAMjE,qBAAqB0H,cAAcxD,EAAkBG,EAAmBH,GACnFhM,KAAK+L,MAAMjE,qBAAqB2H,gBAChCzP,KAAKgP,mCACLhP,KAAKiM,SAAS,CAAE2C,WAAW,MA9H/B,wCAiIE,SAA2Bc,EAAS7I,GAClC7G,KAAK+L,MAAMjE,qBAAqB6H,QAAQD,EAAS7I,GACjD7G,KAAKgP,mCACLhP,KAAKiM,SAAS,CAAE6C,cAAc,MApIlC,oBAuIE,WAAU,IAAD,OAEDxI,EAAkBtG,KAAK+L,MAAMzF,gBAC7BO,EAAe7G,KAAK+L,MAAMlF,aAC1BC,EAAkB9G,KAAK+L,MAAMjF,gBAC7BL,EAAWzG,KAAK+L,MAAMtF,SACtBE,EAAkB3G,KAAK+L,MAAMpF,gBAC7BsB,EAAmBjI,KAAK+L,MAAM9D,iBAC9B2G,EAAY5O,KAAK+L,MAAM6C,UACvBE,EAAe9O,KAAK+L,MAAM+C,aAC1B9C,EAAmBhM,KAAK+L,MAAMC,iBAC9BG,EAAmBnM,KAAK+L,MAAM8C,iBAAmB7O,KAAK+L,MAAMC,iBAElE,OACE,sBAAKxH,UAAU,OAAf,UACE,cAAC,EAAD,CACE8B,gBAAiBA,EACjBO,aAAcA,EACdC,gBAAiBA,EACjBL,SAAUA,EACVE,gBAAiBA,EACjBsB,iBAAkBA,EAClBjC,eAAgB,SAAC4J,GAAD,OAAW,EAAKC,mBAAmBD,IACnDjK,cAAe,SAACiK,GAAD,OAAW,EAAKE,kBAAkBF,MAGlD5P,KAAK+L,MAAM6C,UACV,cAAC,EAAD,CACE5C,iBAAkBA,EAClBG,iBAAkBA,EAClBiB,aAAc,SAACwC,GAAD,OAAW,EAAKG,sBAAsBH,IACpDvC,YAAa,SAACxB,EAAOmE,GAAR,OAAkB,EAAKC,qBAAqBpE,EAAOmE,IAChEE,WAAY,kBAAM,EAAKA,cACvBtB,UAAWA,IAEX,KAEH5O,KAAK+L,MAAM+C,aACV,cAAC,EAAD,CACE1B,aAAc,SAACwC,GAAD,OAAW,EAAKG,sBAAsBH,IACpDrB,cAAe,SAAC1C,EAAOmE,GAAR,OAAkB,EAAKG,2BAA2BtE,EAAOmE,IACxEE,WAAY,kBAAM,EAAKA,cACvBpB,aAAcA,IAEd,YAnLZ,GAA0B9H,IAAMC,W,YCGhCmJ,IAASC,OACP,cAAC,EAAD,IACAC,SAASC,eAAe,W","file":"static/js/main.c465b3cf.chunk.js","sourcesContent":["/**\r\n * The input for a numbers round: a target number and a list of values\r\n * that can be used to compute the target.\r\n */\r\n export class NumberPuzzle {\r\n /** The target number to reach. */\r\n target;\r\n /** @type {number[]} The numbers to combine to reach the target. */\r\n values;\r\n\r\n /**\r\n * Create a new numbers round. All arguments are optional; any that are\r\n * omitted will use the standard rules.\r\n * \r\n * @param {number} target The target to solve for.\r\n * @param {number} numBigOnes The number of random \"big numbers\" to select.\r\n * @param {number} numSelections The total number of numbers to select (big and little).\r\n * @param {number[]} bigOnes Array of the big numbers to choose from.\r\n * @param {number[]} littleOnes Array of the little numbers to choose from.\r\n */\r\n constructor(target, numBigOnes, numSelections, bigOnes, littleOnes) {\r\n if (target == null) target = 100 + this.random(900);\r\n if (numBigOnes == null) numBigOnes = 2;\r\n if (numSelections == null) numSelections = 6;\r\n if (bigOnes == null) bigOnes = this.standardBigOnes();\r\n if (littleOnes == null) littleOnes = this.standardLittleOnes();\r\n\r\n bigOnes = [...bigOnes];\r\n littleOnes = [...littleOnes];\r\n\r\n if (numBigOnes !== numSelections) {\r\n this.shuffle(bigOnes);\r\n this.shuffle(littleOnes);\r\n } else {\r\n // if given a list of the exact numbers to use, reverse\r\n // them to preserve their order after popping\r\n bigOnes.reverse();\r\n }\r\n\r\n this.values = [];\r\n for (let i = 0; i < numBigOnes; ++i) {\r\n this.values.push(bigOnes.pop());\r\n }\r\n const numLittleOnes = numSelections - numBigOnes;\r\n for (let i = 0; i < numLittleOnes; ++i) {\r\n this.values.push(littleOnes.pop());\r\n }\r\n\r\n this.target = target;\r\n }\r\n\r\n /** Return an array of the standard big numbers. */\r\n standardBigOnes() {\r\n return [100, 75, 50, 25];\r\n }\r\n\r\n /** Return an array of the standard little numbers. */\r\n standardLittleOnes() {\r\n const littles = [];\r\n for (let i = 1; i <= 10; ++i) {\r\n littles.push(i, i);\r\n }\r\n return littles;\r\n }\r\n\r\n /** Choose a random integer from 0 to n-1. */\r\n random(n) {\r\n return Math.floor(Math.random() * Math.floor(n));\r\n }\r\n\r\n /** Randomize the elements in an array. */\r\n shuffle(a) {\r\n for (let i = 0; i < a.length; ++i) {\r\n const j = this.random(a.length);\r\n const t = a[i];\r\n a[i] = a[j];\r\n a[j] = t;\r\n }\r\n }\r\n\r\n /**\r\n * Returns solutions for the puzzle, if any.\r\n * @returns {{best: Value, all: Value[]}} The best (or closest) solution,\r\n * and all exact solutions.\r\n */\r\n solve() {\r\n let values = this.values.map(n => new Value(n));\r\n let solns = {\r\n best: values[0],\r\n all: []\r\n }\r\n values.forEach(v => consider(v, this.target, solns));\r\n solveImpl(values, this.target, solns);\r\n solns.all.sort((v1, v2) => v1.compareTo(v2, this.target));\r\n return solns;\r\n }\r\n\r\n toString() {\r\n return `Try to make ${this.target} using ${this.values.join(\", \")}.`;\r\n }\r\n}\r\n\r\n/**\r\n * Describes one value that may be part of a solution, including a description\r\n * of all the steps that led up to this value.\r\n */\r\nclass Value {\r\n number;\r\n lhs = null;\r\n rhs = null;\r\n operator = null;\r\n steps = 0;\r\n\r\n /**\r\n * Creates a new Value. The constructor is used to create the starting\r\n * values that act as inputs to the problem.\r\n * \r\n * @param {number} n The input value.\r\n */\r\n constructor(n) {\r\n this.number = n;\r\n }\r\n\r\n /**\r\n * Returns a new value that combines this value with the specified value\r\n * using the given operand. This value must be greater than\r\n * or equal to the rhs value.\r\n * \r\n * @param {Value} rhs The value to combine with this value.\r\n * @param {\"+\"|\"-\"|\"×\"|\"/\"} operator The arithmetic operation to apply.\r\n * @returns {Value} The derived value, or null if the result is not allowed\r\n * (a fraction or number less than one).\r\n */\r\n combine(rhs, operator) {\r\n let n;\r\n switch (operator) {\r\n case \"+\":\r\n n = this.number + rhs.number;\r\n break;\r\n case \"×\":\r\n n = this.number * rhs.number;\r\n break;\r\n case \"-\":\r\n n = this.number - rhs.number;\r\n if (n < 1) return null;\r\n break;\r\n case \"/\":\r\n n = this.number / rhs.number;\r\n if (!Number.isInteger(n)) return null;\r\n break;\r\n default: throw new Error(`unknown operator ${operator}`);\r\n }\r\n\r\n let v = new Value(n);\r\n v.lhs = this;\r\n v.rhs = rhs;\r\n v.operator = operator;\r\n v.steps = this.steps + rhs.steps + 1;\r\n return v;\r\n }\r\n\r\n /**\r\n * Compares this value to another value, returning zero if the values are equal,\r\n * a negative number if this value precedes the other value, or a positive number\r\n * otherwise.\r\n * \r\n * @param {Value} rhs The value to compare this value to.\r\n * @param {number} target The round's target number.\r\n */\r\n compareTo(rhs, target) {\r\n // pick value closest to target\r\n const lDist = Math.abs(this.number - target);\r\n const rDist = Math.abs(rhs.number - target);\r\n if (lDist !== rDist) return lDist - rDist;\r\n\r\n // pick value that requires the fewest steps\r\n const lSteps = this.steps;\r\n const rSteps = rhs.steps;\r\n if (lSteps !== rSteps) return lSteps - rSteps;\r\n\r\n // pick value with shortest string representation\r\n return this.toString().length - rhs.toString().length;\r\n }\r\n\r\n /**\r\n * Returns a string that reprents the steps used to create this value as a JavaScript expression.\r\n */\r\n toExpression() {\r\n if (this.lhs == null) {\r\n return String(this.number);\r\n }\r\n return `(${this.lhs.toExpression()}) ${this.operator} (${this.rhs.toExpression()})`;\r\n }\r\n\r\n /**\r\n * Returns whether the string expression for this Value actually matches its number value.\r\n */\r\n verify() {\r\n let fn = new Function(`return ${this.number} === ${this.toString().replace(/×/g, \"*\")}`);\r\n return fn();\r\n }\r\n\r\n /**\r\n * Returns a string that describes the steps needed to reproduce\r\n * this value from the starting input.\r\n */\r\n toListOfSteps() {\r\n // if this is a starting value, then the only \"step\"\r\n // involved is that the number itself matches the target\r\n if (this.lhs == null) {\r\n return `${this.number} = ${this.number}`;\r\n }\r\n\r\n // recursive helper function that walks the history tree,\r\n // capturing the calculations performed in reverse order\r\n function steps(v) {\r\n // ignore starting values\r\n if (v.lhs == null) return \"\";\r\n // first gather up the steps from deeper in the tree,\r\n // then append this step to the end\r\n const prevSteps = steps(v.lhs) + steps(v.rhs);\r\n return prevSteps + `${v.lhs.number} ${v.operator} ${v.rhs.number} = ${v.number}\\n`;\r\n };\r\n return steps(this).trim();\r\n }\r\n\r\n toString() {\r\n if (this.#simpleExpression == null) {\r\n let expr = this.toExpression();\r\n // replace lone numbers in brackets with just the number\r\n expr = expr.replace(/\\((\\d+)\\)/ug, \"$1\");\r\n\r\n const plusReduce = /\\(\\((\\d+) \\+ (\\d+(?: \\+ \\d+)*)\\) \\+ (\\d+)\\)/ug;\r\n const minusReduce = /\\(\\((\\d+) - (\\d+(?: - \\d+)*)\\) - (\\d+)\\)/ug;\r\n const multReduce = /\\(\\((\\d+) × (\\d+(?: × \\d+)*)\\) × (\\d+)\\)/ug;\r\n const divReduce = /\\(\\((\\d+) \\/ (\\d+(?: \\/ \\d+)*)\\) \\/ (\\d+)\\)/ug;\r\n for (; ;) {\r\n let oldExpr = expr;\r\n expr = expr.replace(plusReduce, \"($1 + $2 + $3)\");\r\n expr = expr.replace(minusReduce, \"($1 - $2 - $3)\");\r\n expr = expr.replace(multReduce, \"($1 × $2 × $3)\");\r\n expr = expr.replace(divReduce, \"($1 / $2 / $3)\");\r\n if (oldExpr === expr) break;\r\n }\r\n this.#simpleExpression = expr;\r\n }\r\n return this.#simpleExpression;\r\n }\r\n #simpleExpression = null;\r\n}\r\n\r\n/**\r\n * Consider a potential solution, adding it to the list if relevant.\r\n * \r\n * @param {Value} value The potential solution to consider.\r\n * @param {number} target The target number.\r\n * @param {{best: Value, all: Value[]}} solns The collection of solutions found so far.\r\n */\r\nfunction consider(value, target, solns) {\r\n if (value.compareTo(solns.best, target) < 0) {\r\n solns.best = value;\r\n }\r\n if (value.number === target) {\r\n solns.all.push(value);\r\n }\r\n}\r\n\r\nconst operations = [\"+\", \"-\", \"×\", \"/\"];\r\n\r\n/**\r\n * Implementation of the puzzle solver.\r\n * \r\n * @param {Value[]} values The number values to use to make the target.\r\n * @param {number} target The target number to reach.\r\n * @param {{best: Value, all: Value[]}} solns Discovered solutions.\r\n */\r\nfunction solveImpl(values, target, solns) {\r\n for (let i = 0; i < values.length - 1; ++i) {\r\n for (let j = i + 1; j < values.length; ++j) {\r\n // get pair of values to combine and ensure they are in sorted order\r\n let lhs = values[i], rhs = values[j];\r\n if (lhs.number < rhs.number) {\r\n [lhs, rhs] = [rhs, lhs];\r\n }\r\n\r\n // try combining the values with each operation\r\n for (let op of operations) {\r\n const result = lhs.combine(rhs, op);\r\n if (result == null) continue;\r\n\r\n consider(result, target, solns);\r\n\r\n // if there are more than two values left in the list,\r\n // we can still make more pairs from the shorter list\r\n if (values.length > 2) {\r\n const reducedValues = reduce(values, i, j, result);\r\n solveImpl(reducedValues, target, solns);\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Returns a copy of a value array with the specified elements\r\n * merged into a single new entry. The indices must be different.\r\n */\r\nfunction reduce(values, skipIndex1, skipIndex2, combined) {\r\n if (combined == null) return null;\r\n const copy = [combined];\r\n for (let i = 0; i < values.length; ++i) {\r\n if (i === skipIndex1 || i === skipIndex2) continue;\r\n copy.push(values[i]);\r\n }\r\n return copy;\r\n}\r\n\r\n\r\nif (typeof module === \"object\" && typeof module.exports === \"object\") {\r\n exports.NumberPuzzle = NumberPuzzle;\r\n exports.Value = Value;\r\n}","import React from 'react';\r\n\r\nfunction Command(props) {\r\n return (\r\n \r\n );\r\n}\r\n\r\nfunction CalculationCommand(props) {\r\n return (\r\n \r\n );\r\n}\r\n\r\nfunction NormalButton(props) {\r\n return (\r\n \r\n );\r\n}\r\nfunction NoClickButton(props) {\r\n return (\r\n \r\n );\r\n}\r\n\r\n\r\nfunction DisabledButton(props) {\r\n return (\r\n \r\n );\r\n}\r\n\r\nfunction Solution(props) {\r\n return (\r\n

\r\n {props.value}\r\n

\r\n );\r\n}\r\n\r\nfunction Success() {\r\n return (\r\n

\r\n Success, difference = 0\r\n

\r\n );\r\n}\r\n\r\nfunction SummaryLines(props) {\r\n const lines = props.summaryLines;\r\n const listItems = lines.map((line, index) =>\r\n

{line}

\r\n );\r\n return (\r\n
{listItems}
\r\n );\r\n}\r\n \r\nexport class Board extends React.Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n }\r\n\r\n renderSymbol(symbolExpr) {\r\n if (symbolExpr.isAvailable) {\r\n return (\r\n this.props.onSymbolClick(symbolExpr.itemIndex)} />\r\n );\r\n }\r\n\r\n if (symbolExpr.isUsed) {\r\n return (\r\n \r\n );\r\n }\r\n\r\n return (\r\n \r\n );\r\n }\r\n\r\n renderBlank(value) {\r\n return (\r\n \r\n );\r\n}\r\n\r\n renderCommand(symbol, command) {\r\n return (\r\n this.props.onCommandClick(command)} />\r\n );\r\n }\r\n\r\n renderCalulationCommand(symbol, command) {\r\n return (\r\n this.props.onCommandClick(command)} />\r\n );\r\n }\r\n\r\n renderSolution(text1) {\r\n return (\r\n \r\n );\r\n }\r\n\r\n\r\n renderSummaryLines(lines) {\r\n return (\r\n \r\n );\r\n }\r\n\r\n renderSummary(text1) {\r\n return (\r\n \r\n );\r\n }\r\n\r\n renderResult(difference) {\r\n\r\n if (difference === 0) {\r\n return (\r\n \r\n );\r\n \r\n }\r\n return (\r\n \r\n );\r\n }\r\n\r\n render() {\r\n\r\n let result = \r\n
\r\n
\r\n
\r\n
\r\n
{this.renderCommand('New', 'New')}
\r\n
{this.renderCommand('Nums', 'Numbers')}
\r\n
{this.renderCommand('Solve', 'Solve')}
\r\n
{this.renderCommand('Option', 'Options')}
\r\n
\r\n
\r\n
{this.renderSymbol(this.props.expressionItems[0])}
\r\n
{this.renderSymbol(this.props.expressionItems[1])}
\r\n
{this.renderSymbol(this.props.expressionItems[6])}
\r\n
{this.renderSymbol(this.props.expressionItems[7])}
\r\n
\r\n
\r\n
{this.renderSymbol(this.props.expressionItems[2])}
\r\n
{this.renderSymbol(this.props.expressionItems[3])}
\r\n
{this.renderSymbol(this.props.expressionItems[8])}
\r\n
{this.renderSymbol(this.props.expressionItems[9])}
\r\n
\r\n
\r\n
{this.renderSymbol(this.props.expressionItems[4])}
\r\n
{this.renderSymbol(this.props.expressionItems[5])}
\r\n
{this.renderSymbol(this.props.expressionItems[10])}
\r\n
{this.renderSymbol(this.props.expressionItems[11])}
\r\n
\r\n
\r\n
{this.renderCalulationCommand('Clear', 'Clear')}
\r\n
{this.renderCalulationCommand('Undo', 'Undo')}
\r\n
{this.renderSymbol(this.props.expressionItems[12])}
\r\n
{this.renderSymbol(this.props.expressionItems[13])}
\r\n
\r\n
\r\n
\r\n {this.renderSolution(this.props.solution)}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {this.renderSummaryLines(this.props.calculatedLines)}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {this.renderSummary('Target = ' + this.props.targetNumber)}\r\n {this.renderSummary('Calculation = ' + this.props.calculatedTotal)}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {this.renderResult((this.props.targetNumber - this.props.calculatedTotal))}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n by MickBraz\r\n
\r\n
;\r\n\r\nreturn result;\r\n }\r\n}\r\n","\r\nexport function getNumbers(largeCount, smallCount) {\r\n let results = [];\r\n\r\n let largeNumbers = [25,50,75,100];\r\n let numberRands = Array(4).fill(0);\r\n let numberIndexs = Array(4).fill(0);\r\n\r\n for (let i = 0; i < 4; i++) {\r\n numberRands[i] = Math.random();\r\n }\r\n \r\n for (let i = 0; i < 4; i++) {\r\n let maxValue = -1;\r\n let maxIndex = 0;\r\n for (let j = 0; j < 4; j++) {\r\n if (maxValue < numberRands[j]) {\r\n maxValue = numberRands[j];\r\n maxIndex = j;\r\n }\r\n }\r\n numberIndexs[i] = maxIndex;\r\n numberRands[maxIndex] = -1;\r\n }\r\n\r\n for (let i = 0; i < largeCount; i++) {\r\n results.push(largeNumbers[numberIndexs[i]]);\r\n }\r\n \r\n for (let i = largeCount; i < largeCount + smallCount; i++) {\r\n results.push(Math.floor((Math.random() * 10) + 1));\r\n }\r\n\r\n return results;\r\n}\r\n\r\nexport function getTargetNumber() {\r\n let result = 0;\r\n\r\n while (result === 0) {\r\n let newNumber1 =(Math.floor(Math.random() * 10));\r\n let newNumber10 = (Math.floor(Math.random() * 10) * 10);\r\n let newNumber100 = (Math.floor(Math.random() * 9) * 100);\r\n let newNumber = 100 + newNumber1 + newNumber10 + newNumber100;\r\n if (newNumber > 99 && newNumber < 1000) {\r\n result = newNumber;\r\n }\r\n }\r\n return result;\r\n}\r\n\r\n","import React from 'react';\r\nimport { getNumbers, getTargetNumber } from './Calculations';\r\nimport { NumberPuzzle } from './numberSolver';\r\n\r\n\r\nexport class expressionItem {\r\n itemValue = ' ';\r\n itemIndex = 0;\r\n isAvailable = false;\r\n isUsed = false;\r\n\r\n constructor(itemValue, itemIndex) {\r\n this.itemValue = itemValue;\r\n this.itemIndex = itemIndex;\r\n this.isAvailable = false;\r\n this.isUsed = false;\r\n }\r\n\r\n isNumber() {\r\n return this.itemIndex > 5;\r\n }\r\n isRightBracket() {\r\n return this.itemIndex === 1;\r\n }\r\n isLeftBracket() {\r\n return this.itemIndex === 0;\r\n }\r\n\r\n}\r\n\r\nexport class arithmeticExpression extends React.Component {\r\n \r\n solution = '';\r\n targetNumber = 0;\r\n calculatedTotal = 0;\r\n expressionItems = [];\r\n formulaHistory = [];\r\n bracketCount = 0;\r\n largeCount = 2;\r\n smallCount = 4;\r\n calculatedLines = [];\r\n calculatedErrors = '';\r\n\r\n \r\n get numberCount() {\r\n return this.largeCount + this.smallCount;\r\n }\r\n\r\n constructor(props) {\r\n super(props);\r\n\r\n this.expressionItems.push(new expressionItem('(', 0));\r\n this.expressionItems.push(new expressionItem(')', 1));\r\n this.expressionItems.push(new expressionItem('x', 2));\r\n this.expressionItems.push(new expressionItem('/', 3));\r\n this.expressionItems.push(new expressionItem('+', 4));\r\n this.expressionItems.push(new expressionItem('-', 5));\r\n\r\n this.expressionItems.push(new expressionItem('0', 6));\r\n this.expressionItems.push(new expressionItem('0', 7));\r\n this.expressionItems.push(new expressionItem('0', 8));\r\n this.expressionItems.push(new expressionItem('0', 9));\r\n this.expressionItems.push(new expressionItem('0', 10));\r\n this.expressionItems.push(new expressionItem('0', 11));\r\n this.expressionItems.push(new expressionItem(' ', 12));\r\n this.expressionItems.push(new expressionItem(' ', 13));\r\n }\r\n\r\n newGame() {\r\n let newNumbers = getNumbers(this.largeCount, this.smallCount);\r\n this.setNumbers(newNumbers);\r\n this.targetNumber = getTargetNumber();\r\n this.calculateTotal = 0;\r\n this.solution = '';\r\n this.bracketCount = 0;\r\n this.setCalculatedTotal();\r\n this.setAvailableItems();\r\n }\r\n\r\n setGame(newNumbers, target) {\r\n this.setNumbers(newNumbers);\r\n this.targetNumber = target;\r\n this.calculateTotal = 0;\r\n this.solution = '';\r\n this.bracketCount = 0;\r\n this.setCalculatedTotal();\r\n this.setAvailableItems();\r\n }\r\n\r\n setLargeSmall(largeCount, smallCount) {\r\n this.largeCount = largeCount;\r\n this.smallCount = smallCount;\r\n }\r\n\r\n changeNumbers() {\r\n let newNumbers = getNumbers(this.largeCount, this.smallCount);\r\n this.setNumbers(newNumbers);\r\n this.calculateTotal = 0;\r\n this.solution = '';\r\n this.bracketCount = 0;\r\n this.setCalculatedTotal();\r\n this.setAvailableItems();\r\n }\r\n \r\n setCalculatedTotal() {\r\n let exprs = [];\r\n let soln = '';\r\n for (let i = 0; i < this.formulaHistory.length; i++) {\r\n let index1 = this.formulaHistory[i];\r\n let value1 = this.expressionItems[index1].itemValue;\r\n\r\n if (soln.length > 0) soln = soln + ' ';\r\n soln = soln + value1;\r\n\r\n exprs.push(value1);\r\n }\r\n\r\n this.calculatedTotal = this.calculateFormula(exprs, true);\r\n this.solution = soln;\r\n }\r\n \r\n setNumbers(numberArray) {\r\n this.expressionItems.length = 6;\r\n for (let i = 0; i < numberArray.length; i++) {\r\n this.expressionItems.push(new expressionItem(numberArray[i], this.expressionItems.length));\r\n }\r\n for (let i = this.expressionItems.length; i < 14; i++) {\r\n this.expressionItems.push(new expressionItem(' ', this.expressionItems.length));\r\n }\r\n this.clearFormula();\r\n }\r\n\r\n setAvailableItems() {\r\n let isNumbersAvailable = false;\r\n let isSymbolsAvailable = false;\r\n let isLeftBracketAvailable = false;\r\n let isRightBracketAvailable = false;\r\n\r\n if (this.formulaHistory.length === 0) {\r\n isNumbersAvailable = true;\r\n isLeftBracketAvailable = true;\r\n } else {\r\n let lastItem = this.expressionItems[this.formulaHistory[this.formulaHistory.length-1]];\r\n\r\n if (lastItem.isNumber()) {\r\n isSymbolsAvailable = true;\r\n isRightBracketAvailable = (this.bracketCount > 0);\r\n } else {\r\n if (lastItem.isRightBracket()) {\r\n isSymbolsAvailable = true;\r\n } else {\r\n isNumbersAvailable = true;\r\n isLeftBracketAvailable = true;\r\n }\r\n }\r\n }\r\n\r\n this.expressionItems[0].isAvailable = isLeftBracketAvailable;\r\n this.expressionItems[1].isAvailable = isRightBracketAvailable;\r\n\r\n for (let i = 2; i < 6; i++) {\r\n this.expressionItems[i].isAvailable = isSymbolsAvailable;\r\n }\r\n for (let i = 6; i < this.expressionItems.length; i++) {\r\n this.expressionItems[i].isAvailable = isNumbersAvailable && !this.expressionItems[i].isUsed && this.expressionItems[i].itemValue !== 0;\r\n }\r\n }\r\n\r\n calculateFormula(formulaArray, isBaseLevel) {\r\n\r\n // this is called recursively, track via levelNumber\r\n if (isBaseLevel) {\r\n this.calculatedLines = [];\r\n this.calculatedErrors = '';\r\n this.solution = '';\r\n this.calculatedTotal = 0;\r\n }\r\n\r\n let isError = false;\r\n let levelResult = 0;\r\n let newFormulaArray = []; \r\n let isBracketsRemoved = false;\r\n \r\n // do the brackets ()\r\n let bracketCount = 0;\r\n for (let i = 0; i < formulaArray.length; i++) {\r\n let newElement = formulaArray[i];\r\n \r\n if (formulaArray[i] === '(') {\r\n isBracketsRemoved = true;\r\n bracketCount++;\r\n let j = i + 1;\r\n while (j < formulaArray.length) {\r\n if (formulaArray[j] === ')') bracketCount--;\r\n if (formulaArray[j] === '(') bracketCount++;\r\n \r\n if (bracketCount === 0) {\r\n let tempArray = formulaArray.slice(i+1, j);\r\n newElement = this.calculateFormula(tempArray, false);\r\n i = j;\r\n j = formulaArray.length;\r\n }\r\n j++;\r\n }\r\n }\r\n newFormulaArray.push(newElement);\r\n }\r\n \r\n // newFormulaArray has brackets removed\r\n if (isBaseLevel) {\r\n if (isBracketsRemoved) {\r\n this.calculatedLines.push('= ' + newFormulaArray.join(' '));\r\n }\r\n }\r\n\r\n // do the multiplications and divisions from left to right\r\n let num = 0;\r\n while (num < newFormulaArray.length - 2) {\r\n if (newFormulaArray[num + 1] === \"x\") {\r\n newFormulaArray[num + 2] = parseInt(newFormulaArray[num]) * parseInt(newFormulaArray[num + 2]);\r\n newFormulaArray.splice(num, 2);\r\n num -= 1;\r\n if (isBaseLevel) {\r\n this.calculatedLines.push('= ' + newFormulaArray.join(' '));\r\n }\r\n } \r\n if (newFormulaArray[num + 1] === \"/\") {\r\n let divisor = parseInt(newFormulaArray[num + 2]);\r\n let dividend = parseInt(newFormulaArray[num]);\r\n let quotient = dividend / divisor;\r\n let remainder = dividend % divisor;\r\n\r\n if (remainder !== 0) {\r\n isError = true;\r\n this.calculatedLines.push('Error: ' + newFormulaArray.slice(num, num + 3).join(' ') + ' = ' + quotient.toFixed(2) + ', division must result in whole number');\r\n }\r\n newFormulaArray[num + 2] = parseInt(quotient);\r\n newFormulaArray.splice(num, 2);\r\n num -= 1;\r\n\r\n if (isBaseLevel && isError === false) {\r\n this.calculatedLines.push('= ' + newFormulaArray.join(' '));\r\n }\r\n }\r\n\r\n num += 1;\r\n if (isError) num = newFormulaArray.length;\r\n }\r\n \r\n // do the additions and subtractions from left to right\r\n if (isError === false) {\r\n let isCalculation = false;\r\n num = 0;\r\n while (num < newFormulaArray.length - 2) {\r\n if (newFormulaArray[num + 1] === \"+\") {\r\n newFormulaArray[num + 2] = parseInt(newFormulaArray[num]) + parseInt(newFormulaArray[num + 2]);\r\n newFormulaArray.splice(num, 2);\r\n num -= 1;\r\n if (isBaseLevel) {\r\n isCalculation = true;\r\n }\r\n }\r\n if (newFormulaArray[num + 1] === \"-\") {\r\n newFormulaArray[num + 2] = parseInt(newFormulaArray[num]) - parseInt(newFormulaArray[num + 2]);\r\n newFormulaArray.splice(num, 2);\r\n num -= 1;\r\n if (isBaseLevel) {\r\n isCalculation = true;\r\n }\r\n }\r\n num += 1;\r\n }\r\n\r\n if (isCalculation)\r\n this.calculatedLines.push('= ' + newFormulaArray.join(' '));\r\n\r\n this.calculatedLines.forEach(element => {\r\n if (isNaN(element)) element = '...';\r\n });\r\n \r\n if (newFormulaArray.length > 0) {\r\n if (isNaN(newFormulaArray[0])) {\r\n levelResult = '...';\r\n } else {\r\n levelResult = parseInt(newFormulaArray[0]);\r\n }\r\n }\r\n }\r\n return levelResult;\r\n }\r\n \r\n\r\n addItemToFormula(parmIndex) {\r\n\r\n if (this.expressionItems[parmIndex].itemValue === '(') {\r\n this.bracketCount++;\r\n }\r\n else if (this.expressionItems[parmIndex].itemValue === ')') {\r\n this.bracketCount--;\r\n }\r\n else if (this.expressionItems[parmIndex].isNumber()) {\r\n this.expressionItems[parmIndex].isUsed = true;\r\n }\r\n \r\n this.formulaHistory.push(parmIndex);\r\n this.setCalculatedTotal();\r\n this.setAvailableItems();\r\n }\r\n\r\n removeItemFromFormula() {\r\n if (this.formulaHistory.length > 0) {\r\n\r\n let itemIndex = this.formulaHistory[this.formulaHistory.length-1];\r\n if (this.expressionItems[itemIndex].itemValue === '(') {\r\n this.bracketCount--;\r\n }\r\n else if (this.expressionItems[itemIndex].itemValue === ')') {\r\n this.bracketCount++;\r\n }\r\n else if (this.expressionItems[itemIndex].isNumber()) {\r\n this.expressionItems[itemIndex].isUsed = false;\r\n }\r\n \r\n this.formulaHistory.pop();\r\n this.setCalculatedTotal();\r\n this.setAvailableItems();\r\n }\r\n }\r\n\r\n getOperator(parmSymbol) {\r\n switch(parmSymbol) {\r\n case '(':\r\n return this.expressionItems[0];\r\n case ')':\r\n return this.expressionItems[1];\r\n case 'x':\r\n return this.expressionItems[2];\r\n case '/':\r\n return this.expressionItems[3];\r\n case '+':\r\n return this.expressionItems[4];\r\n case '-':\r\n return this.expressionItems[5];\r\n default:\r\n break;\r\n }\r\n return new expressionItem('', -1);\r\n }\r\n\r\n getNumber(parmIndex) {\r\n if (parmIndex >= 0) {\r\n parmIndex = parmIndex + 6; \r\n if (parmIndex < this.expressionItems.length) {\r\n return this.expressionItems[parmIndex];\r\n }\r\n }\r\n\r\n return new expressionItem(-1,0);\r\n }\r\n\r\n clearFormula() {\r\n this.formulaHistory.length = 0;\r\n this.bracketCount = 0;\r\n for (let i = 6; i < this.expressionItems.length; i++) {\r\n this.expressionItems[i].isUsed = false;\r\n }\r\n this.setCalculatedTotal();\r\n this.setAvailableItems();\r\n }\r\n\r\n solvePuzzle() {\r\n\r\n /** prepare parameters for the numberSolver */\r\n let bigOnes = [];\r\n for (let i = 6; i < (6 + this.largeCount); i++) {\r\n bigOnes.push(this.expressionItems[i].itemValue);\r\n }\r\n let littleOnes = [];\r\n for (let i = (6 + this.largeCount); i < (6 + this.largeCount + this.smallCount); i++) {\r\n littleOnes.push(this.expressionItems[i].itemValue);\r\n }\r\n\r\n /** get solution */\r\n let puzzleSolver = new NumberPuzzle(this.targetNumber, this.largeCount, this.largeCount + this.smallCount, bigOnes, littleOnes);\r\n let solns = puzzleSolver.solve();\r\n\r\n /** set temp formula from solution, join numerics into numbers */\r\n let solnArray = [];\r\n let tempArray = solns.best.toString().split('');\r\n let expr1 = '';\r\n for (let i in tempArray) {\r\n let x = tempArray[i];\r\n if ('0123456789'.includes(x)) {\r\n expr1 = expr1.concat(x);\r\n }\r\n else if ('()x/+- '.includes(x)) {\r\n if (expr1.length > 0) {\r\n solnArray.push(expr1);\r\n expr1 = '';\r\n }\r\n if (x !== ' ') {\r\n solnArray.push(x);\r\n }\r\n }\r\n }\r\n if (expr1.length > 0) {\r\n solnArray.push(expr1);\r\n }\r\n\r\n /** clear formula and clear usage for numbers */\r\n this.formulaHistory.length = 0;\r\n for (let i = 6; i < this.expressionItems.length; i++) {\r\n this.expressionItems[i].isUsed = false;\r\n }\r\n \r\n /** move solution to formula history, add x for implied multiplication */\r\n let leftBracketIndex = this.getOperator('(').itemIndex;\r\n let rightBracketIndex = this.getOperator(')').itemIndex;\r\n let multiplyIndex = this.getOperator('x').itemIndex;\r\n\r\n let prevIndex = -1;\r\n for (let s = 0; s < solnArray.length; s++) {\r\n let thisIndex = -1\r\n let e = 0;\r\n while (e < this.expressionItems.length) {\r\n if (solnArray[s] == this.expressionItems[e].itemValue && this.expressionItems[e].isUsed === false) {\r\n thisIndex = e;\r\n e = this.expressionItems.length;\r\n }\r\n e++;\r\n }\r\n \r\n\r\n if (thisIndex >= 0) {\r\n\r\n /** add x for implied multiplication */\r\n if (prevIndex > 5 && thisIndex > 5) {\r\n this.formulaHistory.push(multiplyIndex);\r\n }\r\n else if (prevIndex === rightBracketIndex && thisIndex === leftBracketIndex) {\r\n this.formulaHistory.push(multiplyIndex);\r\n }\r\n else if (prevIndex > 5 && thisIndex === leftBracketIndex) {\r\n this.formulaHistory.push(multiplyIndex);\r\n }\r\n else if (prevIndex === rightBracketIndex && thisIndex > 5) {\r\n this.formulaHistory.push(multiplyIndex);\r\n }\r\n\r\n this.formulaHistory.push(thisIndex);\r\n if (thisIndex > 5) {\r\n this.expressionItems[thisIndex].isUsed = true;\r\n }\r\n }\r\n prevIndex = thisIndex;\r\n }\r\n\r\n this.setCalculatedTotal();\r\n this.setAvailableItems();\r\n \r\n }\r\n\r\n}\r\n\r\n\r\n\r\n","import React from 'react';\r\nimport Button from 'react-bootstrap/Button';\r\nimport Modal from 'react-bootstrap/Modal';\r\nimport { Container } from 'react-bootstrap';\r\nimport { Row } from 'react-bootstrap';\r\n\r\nexport class Options extends React.Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n \r\n this.state = {\r\n largeNumberCount: props.largeNumberCount,\r\n totalNumberCount: props.totalNumberCount,\r\n };\r\n }\r\n \r\n handleLargeNumberChange = (parm1) => {\r\n let numberCount = this.state.largeNumberCount + parm1;\r\n if (numberCount >= 0 && numberCount <= 4)\r\n this.setState({\r\n largeNumberCount: numberCount,\r\n }); \r\n }\r\n\r\n handleTotalNumberChange = (parm1) => {\r\n let numberCount = this.state.totalNumberCount + parm1;\r\n if (numberCount >= 6 && numberCount <= 8)\r\n this.setState({\r\n totalNumberCount: numberCount,\r\n }); \r\n}\r\n\r\n render() {\r\n return (\r\n
\r\n \r\n \r\n Options\r\n \r\n \r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n  \r\n \r\n  \r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n  \r\n \r\n  \r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\n","import React from 'react';\r\nimport Button from 'react-bootstrap/Button';\r\nimport Modal from 'react-bootstrap/Modal';\r\nimport { Container } from 'react-bootstrap';\r\nimport { Row } from 'react-bootstrap';\r\n\r\nexport class SetNumbers extends React.Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n selectedNumbers: [],\r\n targetNumber: '',\r\n is0Available: false,\r\n is10Available: true,\r\n is25Available: true,\r\n is50Available: true,\r\n is75Available: true,\r\n is100Available: true,\r\n isNumsAvailable: true,\r\n isComplete: false,\r\n };\r\n }\r\n\r\n handleNumberClick = (clickedNumber) => {\r\n let selectedNums = this.state.selectedNumbers;\r\n let targetNum = this.state.targetNumber;\r\n\r\n if (selectedNums.length < 6) {\r\n\r\n selectedNums.push(clickedNumber);\r\n this.setState({ selectedNumbers: selectedNums });\r\n\r\n if (clickedNumber === 25) this.setState({ is25Available: false });\r\n if (clickedNumber === 50) this.setState({ is50Available: false });\r\n if (clickedNumber === 75) this.setState({ is75Available: false });\r\n if (clickedNumber === 100) this.setState({ is100Available: false });\r\n\r\n if (selectedNums.length === 6) {\r\n this.setState({\r\n is10Available: false,\r\n is25Available: false,\r\n is50Available: false,\r\n is75Available: false,\r\n is100Available: false,\r\n is0Available: true,\r\n targetNumber: 0,\r\n });\r\n }\r\n\r\n } else {\r\n\r\n targetNum = targetNum * 10 + clickedNumber;\r\n this.setState({ targetNumber: targetNum });\r\n\r\n if (100 <= targetNum && targetNum <= 999) {\r\n this.setState({\r\n is0Available: false,\r\n isNumsAvailable: false,\r\n isComplete: true,\r\n });\r\n }\r\n }\r\n }\r\n\r\n renderSelected(numberExpr) {\r\n return (\r\n \r\n );\r\n }\r\n\r\n renderNumber(numberExpr, isAvailable) {\r\n if (isAvailable) {\r\n return (\r\n this.handleNumberClick(numberExpr)} />\r\n );\r\n }\r\n return (\r\n \r\n );\r\n }\r\n\r\n renderAcceptButton() {\r\n if (this.state.isComplete) {\r\n return (\r\n this.props.onAcceptClick(this.state.selectedNumbers, this.state.targetNumber)} />\r\n );\r\n }\r\n }\r\n\r\n render() {\r\n\r\n let result =\r\n
\r\n \r\n \r\n Set Numbers and Target\r\n \r\n \r\n
\r\n
\r\n
{this.renderSelected(this.state.selectedNumbers[0])}
\r\n
{this.renderSelected(this.state.selectedNumbers[1])}
\r\n
{this.renderSelected(this.state.selectedNumbers[2])}
\r\n
{this.renderSelected(this.state.selectedNumbers[3])}
\r\n
\r\n
\r\n
{this.renderSelected(this.state.selectedNumbers[4])}
\r\n
{this.renderSelected(this.state.selectedNumbers[5])}
\r\n
{this.renderSelected(this.state.targetNumber)}
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
{this.renderNumber(1, this.state.isNumsAvailable)}
\r\n
{this.renderNumber(2, this.state.isNumsAvailable)}
\r\n
{this.renderNumber(3, this.state.isNumsAvailable)}
\r\n
\r\n
\r\n
{this.renderNumber(4, this.state.isNumsAvailable)}
\r\n
{this.renderNumber(5, this.state.isNumsAvailable)}
\r\n
{this.renderNumber(6, this.state.isNumsAvailable)}
\r\n
\r\n
\r\n
{this.renderNumber(7, this.state.isNumsAvailable)}
\r\n
{this.renderNumber(8, this.state.isNumsAvailable)}
\r\n
{this.renderNumber(9, this.state.isNumsAvailable)}
\r\n
\r\n
\r\n
{this.renderNumber(10, this.state.is10Available)}
\r\n
{this.renderNumber(0, this.state.is0Available)}
\r\n
\r\n
\r\n
{this.renderNumber(25, this.state.is25Available)}
\r\n
{this.renderNumber(50, this.state.is50Available)}
\r\n
{this.renderNumber(75, this.state.is75Available)}
\r\n
{this.renderNumber(100, this.state.is100Available)}
\r\n
\r\n
\r\n
\r\n \r\n \r\n {this.renderAcceptButton()}\r\n \r\n
\r\n
\r\n\r\n return result;\r\n }\r\n}\r\n\r\nfunction DisabledButton(props) {\r\n return (\r\n \r\n );\r\n}\r\n\r\nfunction DisplayButton(props) {\r\n return (\r\n \r\n );\r\n}\r\n\r\nfunction NormalButton(props) {\r\n return (\r\n \r\n );\r\n}\r\n\r\nfunction AcceptButton(props) {\r\n return (\r\n \r\n );\r\n}\r\n\r\n","import React from 'react';\r\nimport { Board } from './Board';\r\nimport { arithmeticExpression, expressionItem } from './arithemetic';\r\nimport { Options } from './Options';\r\nimport { SetNumbers} from './SetNumbers';\r\n\r\nexport class Game extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n arithmeticExpression: new arithmeticExpression(props),\r\n expressionItems: [\r\n new expressionItem('(', 0),\r\n new expressionItem(')', 1),\r\n new expressionItem('x', 2),\r\n new expressionItem('/', 3),\r\n new expressionItem('+', 4),\r\n new expressionItem('-', 5),\r\n new expressionItem('0', 6),\r\n new expressionItem('0', 7),\r\n new expressionItem('0', 8),\r\n new expressionItem('0', 9),\r\n new expressionItem('0', 10),\r\n new expressionItem('0', 11),\r\n new expressionItem(' ', 12),\r\n new expressionItem(' ', 13),\r\n ],\r\n targetNumber: 0,\r\n calculatedTotal: 0,\r\n solution: '',\r\n calculatedLines: [],\r\n calculatedErrors: '',\r\n isOptions: false,\r\n largeNumberCount: 2,\r\n smallNumberCount: 4,\r\n isSetNumbers: false,\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n this.state.arithmeticExpression.newGame();\r\n this.setStateFromArithmeticExpression();\r\n }\r\n\r\n handleCommandClick(parmText) {\r\n switch (parmText) {\r\n case 'New':\r\n if (this.state.calculatedTotal !== this.state.targetNumber) {\r\n if (window.confirm('Do you wish to start a new calculation ?') === false) {\r\n break;\r\n }\r\n }\r\n this.state.arithmeticExpression.newGame();\r\n this.setStateFromArithmeticExpression();\r\n break;\r\n case 'Clear':\r\n this.state.arithmeticExpression.clearFormula();\r\n this.setStateFromArithmeticExpression();\r\n break;\r\n case 'Undo':\r\n this.state.arithmeticExpression.removeItemFromFormula();\r\n this.setStateFromArithmeticExpression();\r\n break;\r\n case 'Options':\r\n this.setState({\r\n isOptions: true,\r\n });\r\n break;\r\n case 'Numbers':\r\n if (this.state.calculatedTotal !== this.state.targetNumber) {\r\n if (window.confirm('Do you wish to enter the numbers and target ?') === false) {\r\n break;\r\n }\r\n }\r\n this.setState({\r\n isSetNumbers: true,\r\n });\r\n break;\r\n case 'Solve':\r\n if (this.state.largeNumberCount + this.state.smallNumberCount > 6) {\r\n window.alert('Solution is not available for more than 6 numbers.');\r\n break;\r\n }\r\n if (window.confirm('Do you wish to see solution ?') === false) {\r\n break;\r\n }\r\n this.state.arithmeticExpression.solvePuzzle();\r\n this.setStateFromArithmeticExpression();\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n setStateFromArithmeticExpression() {\r\n\r\n let expressionItems = this.state.arithmeticExpression.expressionItems;\r\n let calculatedTotal = this.state.arithmeticExpression.calculatedTotal;\r\n let solution = this.state.arithmeticExpression.solution;\r\n let calculatedLines = this.state.arithmeticExpression.calculatedLines;\r\n let largeNumberCount = this.state.arithmeticExpression.largeCount;\r\n let smallNumberCount = this.state.arithmeticExpression.smallCount;\r\n\r\n this.setState({\r\n expressionItems: expressionItems,\r\n targetNumber: this.state.arithmeticExpression.targetNumber,\r\n calculatedTotal: this.state.arithmeticExpression.calculatedTotal,\r\n solution: solution,\r\n calculatedLines: calculatedLines,\r\n calculatedErrors: calculatedTotal,\r\n largeNumberCount: largeNumberCount,\r\n smallNumberCount: smallNumberCount,\r\n });\r\n }\r\n\r\n handleSymbolClick(parmIndex) {\r\n this.state.arithmeticExpression.addItemToFormula(parmIndex);\r\n this.setStateFromArithmeticExpression();\r\n }\r\n\r\n handleCloseModalClick() {\r\n this.setState({ \r\n isOptions: false,\r\n isSetNumbers: false \r\n });\r\n };\r\n\r\n handleSaveModalClick(largeNumberCount, totalNumberCount) {\r\n\r\n this.state.arithmeticExpression.setLargeSmall(largeNumberCount, totalNumberCount - largeNumberCount);\r\n this.state.arithmeticExpression.changeNumbers();\r\n this.setStateFromArithmeticExpression();\r\n this.setState({ isOptions: false });\r\n };\r\n\r\n handleSetNumbersModalClick(numbers, targetNumber) {\r\n this.state.arithmeticExpression.setGame(numbers, targetNumber);\r\n this.setStateFromArithmeticExpression();\r\n this.setState({ isSetNumbers: false });\r\n };\r\n\r\n render() {\r\n // const expressionItems = this.state.arithmeticExpression.expressionItems;\r\n const expressionItems = this.state.expressionItems;\r\n const targetNumber = this.state.targetNumber;\r\n const calculatedTotal = this.state.calculatedTotal;\r\n const solution = this.state.solution;\r\n const calculatedLines = this.state.calculatedLines;\r\n const calculatedErrors = this.state.calculatedErrors;\r\n const isOptions = this.state.isOptions;\r\n const isSetNumbers = this.state.isSetNumbers;\r\n const largeNumberCount = this.state.largeNumberCount;\r\n const totalNumberCount = this.state.smallNumberCount + this.state.largeNumberCount;\r\n\r\n return (\r\n
\r\n this.handleCommandClick(parms)}\r\n onSymbolClick={(parms) => this.handleSymbolClick(parms)}\r\n />\r\n\r\n {this.state.isOptions ? (\r\n this.handleCloseModalClick(parms)}\r\n onSaveClick={(parm1, parm2) => this.handleSaveModalClick(parm1, parm2)}\r\n closeModal={() => this.closeModal()}\r\n isOptions={isOptions}\r\n />\r\n ) : null}\r\n\r\n {this.state.isSetNumbers ? (\r\n this.handleCloseModalClick(parms)}\r\n onAcceptClick={(parm1, parm2) => this.handleSetNumbersModalClick(parm1, parm2)}\r\n closeModal={() => this.closeModal()}\r\n isSetNumbers={isSetNumbers}\r\n />\r\n ) : null}\r\n\r\n
\r\n );\r\n }\r\n}\r\n\r\n\r\n","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport { Game } from './Game';\r\nimport '../node_modules/bootstrap/dist/css/bootstrap.min.css';\r\n\r\n\r\n\r\nimport './index.css';\r\n\r\nReactDOM.render(\r\n ,\r\n document.getElementById('root')\r\n);\r\n"],"sourceRoot":""}