Add ** as an option for x^y
This commit is contained in:
		
							parent
							
								
									c9772d3ccf
								
							
						
					
					
						commit
						f0ea31edf3
					
				| 
						 | 
				
			
			@ -17,7 +17,7 @@ import { getMatchingParenIdx } from 'artigen/utils/parenBalance.ts';
 | 
			
		|||
// mathSolver is a function that recursively solves the full roll and math
 | 
			
		||||
export const mathSolver = (conf: MathConf[], wrapDetails = false): SolvedStep => {
 | 
			
		||||
  // Initialize PEMDAS
 | 
			
		||||
  const signs = ['^', '*', '/', '%', '+', '-'];
 | 
			
		||||
  const signs = ['^', '**', '*', '/', '%', '+', '-'];
 | 
			
		||||
  const stepSolve: SolvedStep = {
 | 
			
		||||
    total: 0,
 | 
			
		||||
    details: '',
 | 
			
		||||
| 
						 | 
				
			
			@ -88,7 +88,11 @@ export const mathSolver = (conf: MathConf[], wrapDetails = false): SolvedStep =>
 | 
			
		|||
  // At this point, conf should be [num, op, num, op, num, op, num, etc]
 | 
			
		||||
 | 
			
		||||
  // Evaluate all EMDAS by looping thru each tier of operators (exponential is the highest tier, addition/subtraction the lowest)
 | 
			
		||||
  const allCurOps = [['^'], ['*', '/', '%'], ['+', '-']];
 | 
			
		||||
  const allCurOps = [
 | 
			
		||||
    ['^', '**'],
 | 
			
		||||
    ['*', '/', '%'],
 | 
			
		||||
    ['+', '-'],
 | 
			
		||||
  ];
 | 
			
		||||
  allCurOps.forEach((curOps) => {
 | 
			
		||||
    loggingEnabled && log(LT.LOG, `Evaluating roll ${JSON.stringify(conf)} | Evaluating ${JSON.stringify(curOps)}`);
 | 
			
		||||
    // Iterate thru all operators/operands in the conf
 | 
			
		||||
| 
						 | 
				
			
			@ -150,6 +154,7 @@ export const mathSolver = (conf: MathConf[], wrapDetails = false): SolvedStep =>
 | 
			
		|||
          // Finally do the operator on the operands, throw an error if the operator is not found
 | 
			
		||||
          switch (conf[i]) {
 | 
			
		||||
            case '^':
 | 
			
		||||
            case '**':
 | 
			
		||||
              subStepSolve.total = Math.pow(oper1, oper2);
 | 
			
		||||
              break;
 | 
			
		||||
            case '*':
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -17,7 +17,7 @@ import { loggingEnabled } from 'artigen/utils/logFlag.ts';
 | 
			
		|||
import { assertParenBalance } from 'artigen/utils/parenBalance.ts';
 | 
			
		||||
 | 
			
		||||
// minusOps are operators that will cause a negative sign to collapse into a number (in cases like + - 1)
 | 
			
		||||
const minusOps = ['(', '^', '*', '/', '%', '+', '-'];
 | 
			
		||||
const minusOps = ['(', '^', '**', '*', '/', '%', '+', '-'];
 | 
			
		||||
const allOps = [...minusOps, ')'];
 | 
			
		||||
 | 
			
		||||
export const tokenizeMath = (cmd: string, modifiers: RollModifiers, previousResults: number[]): [ReturnData[], CountDetails[], RollDistributionMap[]] => {
 | 
			
		||||
| 
						 | 
				
			
			@ -31,7 +31,7 @@ export const tokenizeMath = (cmd: string, modifiers: RollModifiers, previousResu
 | 
			
		|||
    .replace(cmdSplitRegex, '')
 | 
			
		||||
    .replace(internalWrapRegex, '')
 | 
			
		||||
    .replace(/ /g, '')
 | 
			
		||||
    .split(/([-+()*/^]|(?<![d%])%)|(x\d+(\.\d*)?)/g)
 | 
			
		||||
    .split(/(\*\*)|([-+()*/^]|(?<![d%])%)|(x\d+(\.\d*)?)/g)
 | 
			
		||||
    .filter((x) => x);
 | 
			
		||||
  loggingEnabled && log(LT.LOG, `Split roll into mathConf ${JSON.stringify(mathConf)}`);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue