Home » Evaluate Reverse Polish Notation

Evaluate Reverse Polish Notation

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)
                    
                  

&

Leave a Reply