Syntactic Confectionery Delight PerlMonks

### 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!

Create A New User
Node Status?
node history
Node Type: note [id://82034]
help
Chatterbox?
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others surveying the Monastery: (3)
As of 2018-01-23 19:02 GMT
Sections?
Information?
Find Nodes?
Leftovers?
Voting Booth?
How did you see in the new year?

Results (253 votes). Check out past polls.

Notices?