Beefy Boxes and Bandwidth Generously Provided by pair Networks
Come for the quick hacks, stay for the epiphanies.
 
PerlMonks  

Re: (Golf) Reversing RPN Notation

by chipmunk (Parson)
on May 21, 2001 at 22:02 UTC ( [id://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?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://82034]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others browsing the Monastery: (2)
As of 2024-04-25 06:03 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found