Beefy Boxes and Bandwidth Generously Provided by pair Networks
Just another Perl shrine

Re: (Golf) Reversing RPN Notation

by chipmunk (Parson)
on May 21, 2001 at 22:02 UTC ( #82034=note: print w/replies, xml ) Need Help??

in reply to (Golf) Reversing RPN Notation

Like I said before, figuring out when to use parens is the tricky part. :) MeowChow pointed out that my solution didn't account for operators which aren't associative ("2 3 4 + -" should be "2 - (3 + 4)" instead of "2 - 3 + 4"). Then I noted that this information was missing from the data provided in the original problem.

I decided to tackle the problem of associativity, and came up with this solution, at 171 characters in the body of the sub:

%o = ('+' => 1, '-' => 1, '*' => 2, '/' => 2, ); %a = ('-' => 1, '/' => 1, ); sub rpn2ltr { for$i(@r=@_){if($p=$o{$i}){$r=$p>($r=pop)->[0]||($p==$r-> [0]&&$a{$i})?"($r->[1])":$r->[1];$l=$p>($l=pop)->[0]?"($l->[ 1])":$l->[1]}push@_,[$p||9,$p?"$l $i $r":$i]}$_[-1][1] }
It's pretty ugly. :/ I hope someone will provide a more elegant solution!

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://82034]
[choroba]: if you modify them, Perl will crash with "Modification of a read-only value attempted" for $1
[choroba]: I can't replicate the situation, but I remember it was very hard to debug

How do I use this? | Other CB clients
Other Users?
Others musing on the Monastery: (6)
As of 2018-02-22 17:32 GMT
Find Nodes?
    Voting Booth?
    When it is dark outside I am happiest to see ...

    Results (297 votes). Check out past polls.