Simplified version of Reverse Polish Notation (RPN) – The math operator will come at the end of the Text and you need to evaluate the expression. 8, 2, + = 8+2 = 10 21, 7, 3 / = 21/7/3 = 1 12, 5, 3, 2, – = 12-5-3-2 = 2 3, 4, 5, * = 3*4*5 = 60
📌 Challenge Details and Links
ExcelBI Excel Challenge Number: 297
Challenge Difficulty: ⭐️
📥Download Sample File
📥Link to the solutions on LinkedIn
Solving the challenge of Evaluate Reverse Polish Notation with Power Query
Power Query solution 1 for Evaluate Reverse Polish Notation, proposed by Bo Rydobon 🇹🇭:
let
Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content],
Ans = Table.TransformRows(
Source,
each
let
b = Text.Split([Text], ", ")
in
Expression.Evaluate(Text.Combine(List.RemoveLastN(b, 1), List.Last(b)))
)
in
Ans
Power Query solution 2 for Evaluate Reverse Polish Notation, proposed by Zoran Milokanović:
let
Source = Excel.CurrentWorkbook(){[Name = "Input"]}[Content],
S = Table.TransformRows(
Source,
each
let
o = Text.End([Text], 1)
in
Expression.Evaluate(Text.TrimEnd(Text.Replace([Text], ", ", o), o))
)
in
S
Power Query solution 3 for Evaluate Reverse Polish Notation, proposed by Zoran Milokanović:
let
Source = Excel.CurrentWorkbook(){[Name = "Input"]}[Content],
S = Table.TransformRows(
Source,
each
let
a = Text.Split([Text], ", ")
in
Expression.Evaluate(Text.Combine(List.RemoveLastN(a), List.Last(a)))
)
in
S
Power Query solution 4 for Evaluate Reverse Polish Notation, proposed by Aditya Kumar Darak 🇮🇳:
let
Source = Excel.CurrentWorkbook(){[Name = "data"]}[Content],
Return = Table.AddColumn(
Source,
"Answer",
each [
S = Text.End([Text], 1),
F = Text.Start([Text], Text.Length([Text]) - 3),
R = Text.Replace(F, ", ", S),
A = Expression.Evaluate(R)
][A]
)
in
Return
Power Query solution 5 for Evaluate Reverse Polish Notation, proposed by Alejandro Simón 🇵🇦 🇪🇸:
let
Origen = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content],
Sol = Table.AddColumn(
Origen,
"Answer",
each
let
a = Text.Split([Text], ", "),
b = List.Last(a),
c = List.Transform(List.RemoveLastN(a), Number.From),
d = List.Count(c),
e = List.Accumulate(
{1 .. d - 1},
c{0},
(s, k) =>
if b = "-" then
s - c{k}
else if b = "+" then
s + c{k}
else if b = "/" then
s / c{k}
else
s * c{k}
)
in
e
)[[Answer]]
in
Sol
Power Query solution 6 for Evaluate Reverse Polish Notation, proposed by Alejandro Simón 🇵🇦 🇪🇸:
let
Origen = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content],
Sol = Table.AddColumn(
Origen,
"Answer",
each
let
a = Text.Split([Text], ", "),
b = List.Last(a),
c = List.Transform(List.RemoveLastN(a), Number.From),
d = List.Count(c),
e = (f, g) =>
let
h =
if b = "-" then
f - c{g}
else if b = "+" then
f + c{g}
else if b = "/" then
f / c{g}
else
f * c{g},
i = g + 1
in
if i = d then h else @e(h, i),
h = e(c{0}, 1)
in
h
)[[Answer]]
in
Sol
Power Query solution 7 for Evaluate Reverse Polish Notation, proposed by Alejandro Simón 🇵🇦 🇪🇸:
let
Origen = Excel.CurrentWorkbook(){[Name = "Tabla1"]}[Content],
Signo = Table.AddColumn(
Origen,
"Answer",
each
let
a = Text.Split([Text], ", "),
b = List.Last(a),
c = List.Transform(List.RemoveLastN(a), Number.From),
d = List.Count(c),
e = List.Last(
List.Generate(
() => [x = 0, y = c{0}],
each [x] < d,
each [
y =
if b = "-" then
[y] - c{[x] + 1}
else if b = "+" then
[y] + c{[x] + 1}
else if b = "/" then
[y] / c{[x] + 1}
else
[y] * c{[x] + 1},
x = [x] + 1
],
each [y]
)
)
in
e,
Number.Type
)[[Answer]]
in
Signo
Power Query solution 8 for Evaluate Reverse Polish Notation, proposed by Alejandro Simón 🇵🇦 🇪🇸:
let
Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content],
Sol = Table.AddColumn(
Source,
"Answer",
each
let
a = Text.Split([Text], ", "),
b = List.Last(a),
c = Expression.Evaluate(
Text.TrimEnd(Text.Combine(List.Transform(List.RemoveLastN(a), each _ & b)), b)
)
in
c
)[[Answer]]
in
Sol
Power Query solution 9 for Evaluate Reverse Polish Notation, proposed by Luan Rodrigues:
let
Fonte = Tabela1,
res = Table.AddColumn(
Fonte,
"Personalizar",
each [
a = List.Select(Text.ToList([Text]), each _ <> " "),
b = Expression.Evaluate(
Text.Combine(List.ReplaceMatchingItems(List.RemoveLastN(a, 2), {{",", List.Last(a)}}))
)
][b]
)
in
res
Power Query solution 10 for Evaluate Reverse Polish Notation, proposed by Ramiro Ayala Chávez:
let
Origen = Excel.CurrentWorkbook(){[Name = "Tabla1"]}[Content],
a = Table.AddColumn(Origen, "a", each Text.Start([Text], Text.Length([Text]) - 3)),
b = Table.AddColumn(a, "b", each Text.Remove(Text.End([Text], 3), ",")),
c = Table.AddColumn(b, "c", each Text.Replace([a], ",", [b])),
Sol = Table.AddColumn(c, "Expected Answer", each Expression.Evaluate([c]))[[Expected Answer]]
in
Sol
Power Query solution 11 for Evaluate Reverse Polish Notation, proposed by Rafael González B.:
let
Source = Excel.CurrentWorkbook(){0}[Content],
Ope = Table.AddColumn(
Source,
"Answer",
each
let
a = Text.Split([Text], ", "),
b = List.Last(a),
c = List.RemoveLastN(a),
d = List.Transform(c, each Text.Combine({_, b})),
e = Text.Combine(d),
f = Text.Length(e) - 1,
g = Text.RemoveRange(e, f),
h = Expression.Evaluate(g)
in
h
)
in
Ope[[Answer]]
Power Query solution 12 for Evaluate Reverse Polish Notation, proposed by Luke Jarych:
let
Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content],
Eval = Expression.Evaluate("3,2 +"),
#"Added Custom" = Table.AddColumn(Source, "Split", each Text.Split([Text], ", ")),
#"Added Custom1" = Table.AddColumn(#"Added Custom", "Sign", each List.Last([Split])),
#"Added Custom2" = Table.AddColumn(
#"Added Custom1",
"Replace",
each Text.Replace([Text], ", ", [Sign])
),
#"Added Custom3" = Table.AddColumn(
#"Added Custom2",
"CutLast",
each Text.Start([Replace], Text.Length([Replace]) - 2)
),
#"Added Custom4" = Table.AddColumn(
#"Added Custom3",
"Evaluate",
each Expression.Evaluate([CutLast])
),
#"Renamed Columns" = Table.RenameColumns(#"Added Custom4", {{"Evaluate", "Expected Answer"}}),
#"Removed Other Columns" = Table.SelectColumns(#"Renamed Columns", {"Expected Answer"})
in
#"Removed Other Columns"
Power Query solution 13 for Evaluate Reverse Polish Notation, proposed by Szabolcs Phraner:
let
Source = Excel.CurrentWorkbook(){[Name = "nr"]}[Content],
RPN = Table.AddColumn(
Forrás,
"RPN",
each [
split = Text.Split([Text], ","),
op = List.Last(split),
nrs = List.RemoveLastN(split),
equation = Expression.Evaluate(Text.Combine(nrs, op))
][equation]
)
in
RPN
Power Query solution 14 for Evaluate Reverse Polish Notation, proposed by Kalyan Kumar Reddy Kethireddy:
let
Source = Table.FromRows(
Json.Document(
Binary.Decompress(
Binary.FromText(
"TYxRCoAwDEOvEvapEdc6pzvL2P2v4YhUhH7kJY/2ng7CiTUN9lSIk6jEFU0jprAoz1CEHs0t3JTNBfurVlkt2L63Hr5nwrIK+90cxwM=",
BinaryEncoding.Base64
),
Compression.Deflate
)
),
let
_t = ((type nullable text) meta [Serialized.Text = true])
in
type table [Text = _t]
),
#"Changed Type" = Table.TransformColumnTypes(Source, {{"Text", type text}}),
#"Expected Answer" = Table.AddColumn(
#"Changed Type",
"Answer",
each [
a = Text.Select([Text], {"+", "-", "*", "/", "%"}),
b = Text.Replace([Text], ", ", a),
c = Text.Replace(b, a & a, ""),
d = Expression.Evaluate(c)
][d],
Int64.Type
)
in
#"Expected Answer"
Solving the challenge of Evaluate Reverse Polish Notation with Excel
Excel solution 1 for Evaluate Reverse Polish Notation, proposed by Bo Rydobon 🇹🇭:
=MAP(
A2:A10,
LAMBDA(
a,
REDUCE(
,
DROP(
TEXTSPLIT(
a,
,
", "
),
-1
),
LAMBDA(
c,
v,
SWITCH(
RIGHT(
a
),
"+",
c+v,
"-",
c-v,
"*",
c*v,
c/v
)
)
)
)
)
Excel solution 2 for Evaluate Reverse Polish Notation, proposed by Rick Rothstein:
=MAP(
A2:A10,
LAMBDA(
n,
REDUCE(
,
DROP(
TEXTSPLIT(
n,
", "
),
,
-1
),
LAMBDA(
a,
x,
LET(
r,
RIGHT(
n
),
IF(
r="+",
a+x,
IF(
r="-",
a-x,
IF(
r="*",
a*x,
a/x
)
)
)
)
)
)
)
)
Excel solution 3 for Evaluate Reverse Polish Notation, proposed by John V.:
=LAMBDA(
x;EVALUATE(
x
)
)
And then:
✅=LET(
t,
A2:A10,
e(
SUBSTITUTE(
LEFT(
t,
LEN(
t
)-3
),
",",
RIGHT(
t
)
)
)
)
Excel solution 4 for Evaluate Reverse Polish Notation, proposed by محمد حلمي:
=MAP(
A2:A10,
LAMBDA(
c,
REDUCE(
,
DROP(
TEXTSPLIT(
c,
","
),
,
-1
),
LAMBDA(
a,
d,
SWITCH(
RIGHT(
c
),
"*",
a*d,
"+",
a+d,
"-",
a-d,
a/d
)
)
)
)
)
Excel solution 5 for Evaluate Reverse Polish Notation, proposed by محمد حلمي:
=MAP(
A2:A10,
LAMBDA(
c,
REDUCE(
,
DROP(
TEXTSPLIT(
c,
","
),
,
-1
),
LAMBDA(
a,
d,
SWITCH(
CODE(
RIGHT(
c
)
),
42,
a*d,
43,
a+d,
45,
a-d,
a/d
)
)
)
)
)
Excel solution 6 for Evaluate Reverse Polish Notation, proposed by Kris Jaganah:
=MAP(A2:A10,
LAMBDA(x,
LET(a,
TEXTSPLIT(
x,
,
", "
),
b,
TAKE(
a,
-1
),
c,
--DROP(
a,
-1
),
d,
DROP(
c,
1
),
IFS(b="/",
@c*(1/(PRODUCT(
d
))),
b="+",
SUM(
c
),
b="-",
SUM(
@c,
-d
),
b="*",
PRODUCT(
c
)))))
Excel solution 7 for Evaluate Reverse Polish Notation, proposed by Timothée BLIOT:
=MAP(
A2:A10,
LAMBDA(
z,
LET(
A,
TEXTSPLIT(
z,
,
", "
),
B,
XLOOKUP(
TRUE,
A<>"",
A ,
,
,
-1
),
REDUCE(
,
DROP(
A,
-1
),
LAMBDA(
a,
v,
SWITCH(
B,
"+",
a+v,
"-",
a-v,
"*",
a*v,
a/v
)
)
)
)
)
)
Excel solution 8 for Evaluate Reverse Polish Notation, proposed by Hussein SATOUR:
=MAP(
A2:A10,
LAMBDA(
x,
LET(
& a,
TEXTSPLIT(
x,
,
", "
),
o,
TAKE(
a,
-1
),
f,
--TAKE(
a,
1
),
r,
--DROP(
DROP(
a,
1
),
-1
),
IFS(
o="+",
SUM(
f,
r
),
o="-",
f-SUM(
r
),
o="*",
PRODUCT(
f,
r
),
1,
f/PRODUCT(
r
)
)
)
)
)
Excel solution 9 for Evaluate Reverse Polish Notation, proposed by Oscar Mendez Roca Farell:
=MAP(A2:A10,
LAMBDA(a,
LET(_n,
TEXTSPLIT(
a,
", "
),
_f,
FIND(
TAKE(
_n,
,
-1
),
"/*-+"
),
_v,
(-1)^MOD(
_f,
2
),
_m,
DROP(
_n,
,
-1
),
IF(INT((_f-1)/2),
TAKE(
_m,
,
1
)+SUM(
_v*DROP(
_m,
,
1
)
),
TAKE(
_m,
,
1
)* PRODUCT(
DROP(
_m,
,
1
)^_v
)))))
Excel solution 10 for Evaluate Reverse Polish Notation, proposed by Duy Tùng:
=MAP(
A2:A10,
LAMBDA(
s,
LET(
a,
TEXTSPLIT(
s,
,
","
),
n,
COUNTA(
a
),
REDUCE(
INDEX(
a,
1
),
CHOOSEROWS(
a,
SEQUENCE(
n-2,
,
2
)
),
LAMBDA(
u,
v,
SWITCH(
RIGHT(
s
),
"+",
u+v,
"-",
u-v,
"*",
u*v,
"/",
u/v
)
)
)
)
)
)
Excel solution 11 for Evaluate Reverse Polish Notation, proposed by Sunny Baggu:
=MAP(
A2:A10,
LAMBDA(
x,
LET(
_delim,
TEXTAFTER(
x,
", ",
-1
),
_text,
TEXTBEFORE(
x,
_delim
),
_num,
TEXTSPLIT(
_text,
,
", ",
1
),
_oper,
REDUCE(
_num,
SEQUENCE(
ROWS(
_num
)
),
LAMBDA(
a,
v,
LET(
_r,
INDEX(
_num,
v,
),
IF(
v > 1,
IFS(
_delim = "/",
a / _r,
_delim = "+",
a + _r,
_delim = "-",
a - _r,
_delim = "*",
a * _r
),
a
)
)
)
),
TAKE(
_oper,
1
)
)
)
)
Excel solution 12 for Evaluate Reverse Polish Notation, proposed by LEONARD OCHEA 🇷🇴:
=MAP(
A2:A10,
LAMBDA(
a,
LET(
d,
TEXTSPLIT(
a,
", "
),
s,
TAKE(
d,
,
-1
),
p,
TAKE(
d,
,
1
),
n,
--DROP(
DROP(
d,
,
-1
),
,
1
),
IFS(
s="+",
p+SUM(
n
),
s="-",
p+SUM(
-n
),
s="*",
p*PRODUCT(
n
),
s="/",
p*PRODUCT(
1/n
)
)
)
)
)
Excel solution 13 for Evaluate Reverse Polish Notation, proposed by Abdallah Ally:
=MAP(
A2:A10,
LAMBDA(
u,
LET(
a,
TEXTSPLIT(
u,
", "
),
b,
TAKE(
a,
,
1
),
c,
TAKE(
a,
,
-1
),
d,
DROP(
DROP(
a,
,
1
),
,
-1
),
REDUCE(
b,
d,
LAMBDA(
x,
y,
IFS(
c="+",
x+y,
c="-",
x-y,
c="/",
x/y,
c="*",
x*y
)
)
)
)
)
)
Excel solution 14 for Evaluate Reverse Polish Notation, proposed by 🇵🇪 Ned Navarrete C.:
=MAP(
A2:A10,
LAMBDA(_fil,
LET(
str, TEXTSPLIT(_fil,", "),
rng, DROP(str,,-1),
SWITCH(TAKE(str,,-1),
"+", SUM(--rng),
"*", PRODUCT(--rng),
"-", REDUCE(, rng, LAMBDA(x,y, x-y ) ),
"/", REDUCE(, rng, LAMBDA(x,y, x/y ) )
)
)
)
)
Excel solution 15 for Evaluate Reverse Polish Notation, proposed by Charles Roldan:
=MAP(
A2:A10,
LAMBDA(
x,
LET(
f,
LAMBDA(
k,
LAMBDA(
a,
b,
CHOOSE(
XMATCH(
k,
{"+",
"-",
"*",
"/"}
),
a + b,
a - b,
a * b,
a / b
)
)
),
y,
TEXTSPLIT(
x,
,
", "
),
REDUCE(
,
DROP(
y,
-1
),
f(
TAKE(
y,
-1
)
)
)
)
)
)
Excel solution 16 for Evaluate Reverse Polish Notation, proposed by Charles Roldan:
=LAMBDA(
x,
EVALUATE(
x
)
) trick:
=LET(
c,
LAMBDA(
s,
REPLACE(
s,
LEN(
s
),
1,
)
),
MAP(
A2:A10,
LAMBDA(
x,
EVAL(
c(
SUBSTITUTE(
c(
x
),
", ",
RIGHT(
x
)
)
)
)
)
)
)
Excel solution 17 for Evaluate Reverse Polish Notation, proposed by Charles Roldan:
=LET(
Oper,
LAMBDA(
k,
LAMBDA(
a,
b,
CHOOSE(
XMATCH(
k,
{"+",
"-",
"*",
"/"}
),
a + b,
a - b,
a * b,
a / b
)
)
),
Spl,
LAMBDA(
x,
TEXTSPLIT(
x,
,
", "
)
),
RPN,
LAMBDA(
y,
REDUCE(
,
DROP(
y,
-1
),
Oper(
TAKE(
y,
-1
)
)
)
),
B,
LAMBDA(
f,
LAMBDA(
g,
LAMBDA(
x,
f(
g(
x
)
)
)
)
),
Mp,
LAMBDA(
f,
LAMBDA(
x,
MAP(
x,
f
)
)
),
Mp(B(
RPN
)(Spl))
)(A2:A10)
Excel solution 18 for Evaluate Reverse Polish Notation, proposed by Pieter de Bruijn:
=EVAL(A2:A10)
To make this work, in the name manager create name EVAL with:
=LAMBDA(t,EVALUATE(SUBSTITUTE(LEFT(t,LEN(t)-3),",",RIGHT(t))))
Otherwise this:
=MAP(A2:A10,LAMBDA(t,REDUCE(,DROP(TEXTSPLIT(t,","),,-1),LAMBDA(a,b,CHOOSE(FIND(RIGHT(t),"+-*/"),a+b,a-b,a*b,a/b)))))
(Thanks Rick Rothstein for the first argument tip https://www.linkedin.com/feed/update/urn:li:activity:7115546145208045568?commentUrn=urn%3Ali%3Acomment%3A%28activity%3A7115546145208045568%2C7115548318239264769%29&replyUrn=urn%3Ali%3Acomment%3A%28activity%3A7115546145208045568%2C7115554292509331456%29&dashCommentUrn=urn%3Ali%3Afsd_comment%3A%287115548318239264769%2Curn%3Ali%3Aactivity%3A7115546145208045568%29&dashReplyUrn=urn%3Ali%3Afsd_comment%3A%287115554292509331456%2Curn%3Ali%3Aactivity%3A7115546145208045568%29 )
Excel solution 19 for Evaluate Reverse Polish Notation, proposed by Ziad A.:
=MAP(
A2:A10,
LAMBDA(
e,
INDEX(
QUERY(
,
"select "®EXEXTRACT(
SUBSTITUTE(
e,
",",
RIGHT(
e
)
),
".*d"
)
),
2
)
)
)
Excel solution 20 for Evaluate Reverse Polish Notation, proposed by Daniel Garzia:
=MAP(
A2:A10,
LAMBDA(
x,
LET(
t,
TEXTSPLIT(
LEFT(
x,
LEN(
x
)-3
),
,
","
),
r,
RIGHT(
x
),
REDUCE(
TAKE(
t,
1
),
DROP(
t,
1
),
LAMBDA(
a,
b,
IFS(
r="+",
a+b,
r="-",
a-b,
r="*",
a*b,
r="/",
a/b
)
)
)
)
)
)
Excel solution 21 for Evaluate Reverse Polish Notation, proposed by Quadri Olayinka Atharu:
=MAP(A2:A10,
LAMBDA(t,
LET(
ns,
--DROP(
TEXTSPLIT(
t,
", "
),
,
-1
),
s,
RIGHT(
t
),
iv,
TAKE(
ns,
,
1
),
_arr,
DROP(
ns,
,
1
),
r,
REDUCE(iv,
_arr,
LAMBDA(x,
y,
SWITCH(TRUE,
s="+",
x+y,
s="-",
ABS(
y-x
),
s="*",
x*y,
(x/y)))),
r)))
Excel solution 22 for Evaluate Reverse Polish Notation, proposed by Anup Kumar:
=BYROW(
A2:A10,
LAMBDA(
a,
LET(
toArr,
TEXTSPLIT(
a,
", "
),
nos,
DROP(
toArr,
,
-1
),
opr,
TAKE(
toArr,
,
-1
),
REDUCE(
TAKE(
nos,
,
1
),
DROP(
nos,
,
1
),
LAMBDA(
x,
y,
IFS(
opr="+",
x+y,
opr="-",
x-y,
opr="*",
x*y,
opr="/",
x/y,
TRUE,
"Operator Not supported"
)
)
)
)
)
)
Excel solution 23 for Evaluate Reverse Polish Notation, proposed by Paolo Pozzoli:
=MAP(
A2:A10,
LAMBDA(
t,
LET(
nums,
TEXTSPLIT(
TEXTBEFORE(
t,
", ",
-1
),
,
", "
)/1,
op,
TEXTAFTER(
t,
", ",
-1
),
out,
IF(
op="+",
SUM(
nums
),
IF(
op="*",
PRODUCT(
nums
),
IF(
op="/",
QUOTIENT(
CHOOSEROWS(
nums,
1
),
PRODUCT(
DROP(
nums,
1
)
)
),
CHOOSEROWS(
nums,
1
& )-SUM(
DROP(
nums,
1
)
)
)
)
),
out
)
)
)
Excel solution 24 for Evaluate Reverse Polish Notation, proposed by samir tobeil:
=MAP(
A2:A10,
LAMBDA(
s,
REDUCE(
,
TOCOL(
--TEXTSPLIT(
s,
","
),
2
),
LAMBDA(
a,
x,
LET(
i,
RIGHT(
s
),
IFS(
i="*",
a*x,
i="+",
a+x,
i="-",
a-x,
1,
a/x
)
)
)
)
)
)
Excel solution 25 for Evaluate Reverse Polish Notation, proposed by Amardeep Singh:
=MAP(
A2:A10,
LAMBDA(
x,
LET(
d,
TEXTSPLIT(
x,
", "
),
m,
TAKE(
d,
,
-1
),
REDUCE(
,
DROP(
d,
,
-1
),
LAMBDA(
a,
v,
SWITCH(
m,
"+",
a+v,
"-",
a-v,
"*",
a*v,
"/",
a/v
)
)
)
)
)
)
Excel solution 26 for Evaluate Reverse Polish Notation, proposed by Kriddakorn Pongthanisorn:
=MAP(
A2:A10,
LAMBDA(
a,
LET(
z,
a,
op,
RIGHT(
z,
1
),
n,
ARRAYFORMULA(
--SPLIT(
LEFT(
z,
LEN(
z
)-2
),
",",
1,
1
)
),
r,
REDUCE(
CHOOSECOLS(
n,
1
),
ARRAYFORMULA(
CHOOSECOLS(
n,
SEQUENCE(
1,
COLUMNS(
n
)-1,
2
)
)
),
LAMBDA(
x,
y,
SWITCH(
op,
"+",
x+y,
"-",
x-y,
"*",
x*y,
"/",
x/y
)
)
),
r
)
)
)
Excel solution 27 for Evaluate Reverse Polish Notation, proposed by Neil Foot JP MBA MBCS:
=LAMBDA(
s,
LET(
rng,
Sheet1!$A$2:$A$10,
txt,
LEFT(
rng,
LEN(
rng
)-1
),
sub,
SUBSTITUTE(
txt,
", ",
RIGHT(
rng,
1
)
),
fin,
LEFT(
sub,
LEN(
sub
)-1
),
ROUND(
EVALUATE(
fin
),
0
)
)
)
in Cell B2 "=EVAL(A2:A10)
Solving the challenge of Evaluate Reverse Polish Notation with Python in Excel
Python in Excel solution 1 for Evaluate Reverse Polish Notation, proposed by Bo Rydobon 🇹🇭:
[eval((b:=a.split(", "))[-1].join(b[:-1])) for a in xl("A2:A10")[0]]
Python in Excel solution 2 for Evaluate Reverse Polish Notation, proposed by John V.:
Hi everyone!
Blessings!
Python in Excel solution 3 for Evaluate Reverse Polish Notation, proposed by 🇰🇷 Taeyong Shin:
ser = xl("A2:A10")[0]
ser.str.split(', ').map(lambda x: eval(x[-1].join(x[:-1]))).values
Python in Excel solution 4 for Evaluate Reverse Polish Notation, proposed by JvdV -:
=Z(A2:A10)
=LAMBDA(x,EVALUATE(SUBSTITUTE(LEFT(x,LEN(x)-3),",",RIGHT(x))))
Python in Excel:
[eval(s[:-3].replace(',',s[-1])) for s in xl("A2:A10")[0]]
Solving the challenge of Evaluate Reverse Polish Notation with R
R solution 1 for Evaluate Reverse Polish Notation, proposed by Konrad Gryczan, PhD:
library(tidyverse)
library(readxl)
input = read_excel("Reverse Polish Notation.xlsx")
eval_srpn = function(string) {
tokens = str_split(string, pattern = ", ")[[1]]
operator = tail(tokens,1)
numbers = head(tokens, -1) %>% map_dbl(~ as.numeric(.x))
result = reduce(numbers, ~ {
switch(
operator,
"+" = .x + .y,
"-" = .x - .y,
"*" = .x * .y,
"/" = .x / .y)
})
return(result)
}
result = input %>%
mutate(my_answer = map_dbl(Text, eval_srpn),
check = my_answer == `Expected Answer`)
R solution 2 for Evaluate Reverse Polish Notation, proposed by Krzysztof Nowak:
library(tidyverse)
library(readxl)
df <- read_xlsx("Reverse Polish Notation.xlsx",range = "A1:A10")
ExpectedAnswer <- read_xlsx("Reverse Polish Notation.xlsx",range = "A1:B10")
Part1 <- df |>
mutate(Sign = str_extract(Text,"[+\-*/]"),
Numbers = str_remove_all(Text,"[+\-*/]")) |>
separate_longer_delim(Numbers,delim = ",") |>
filter(Numbers != " ") |>
mutate(Numbers = as.numeric(trimws(Numbers)))
Calculated <- Part1 |>
group_by(Text) |>
mutate(Equation = paste(Numbers,collapse = Sign),
Result = eval(parse(text = Equation)))
ExpectedAnswer |>
inner_join(Calculated[,c("Text","Result")],by ="Text",multiple = "first") |>
mutate(Test = `Expected Answer` == Result)
&
