From 2e0b60e37ba8f12deb30c85f76699d4438af08c4 Mon Sep 17 00:00:00 2001 From: Christopher Hunter <8398225+crhntr@users.noreply.github.com> Date: Tue, 20 Feb 2024 11:12:00 -0800 Subject: [PATCH] add exp --- spreadsheet/main.go | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/spreadsheet/main.go b/spreadsheet/main.go index 5320aa2..761d2bd 100644 --- a/spreadsheet/main.go +++ b/spreadsheet/main.go @@ -449,6 +449,7 @@ const ( TokenSubtract TokenMultiply TokenDivide + TokenExponent TokenExclamation TokenLeftParenthesis TokenRightParenthesis @@ -482,6 +483,8 @@ func tokenize(input string) ([]Token, error) { tokens = append(tokens, Token{Index: i, Type: TokenMultiply, Value: "*"}) } else if c == '/' { tokens = append(tokens, Token{Index: i, Type: TokenDivide, Value: "/"}) + } else if c == '^' { + tokens = append(tokens, Token{Index: i, Type: TokenExponent, Value: "^"}) } else if c == '(' { tokens = append(tokens, Token{Index: i, Type: TokenLeftParenthesis, Value: "("}) } else if c == ')' { @@ -670,7 +673,7 @@ func parseNodes(stack []ExpressionNode, tokens []Token, i, maxColumn, maxRow int Expression: top, }) return stack, 1, nil - case TokenAdd, TokenSubtract, TokenMultiply, TokenDivide: + case TokenAdd, TokenSubtract, TokenMultiply, TokenDivide, TokenExponent: node := BinaryExpressionNode{ Op: token, } @@ -801,6 +804,12 @@ func evaluate(table *Table, cell *Cell, visited visitSet, expressionNode Express return leftResult - rightResult, nil case TokenMultiply: return leftResult * rightResult, nil + case TokenExponent: + res := 1 + for i := 0; i < rightResult; i++ { + res *= leftResult + } + return res, nil case TokenDivide: if rightResult == 0 { return 0, fmt.Errorf("could not divide by zero")