in reply to
Re: (Golf) Reversing RPN Notation
in thread (Golf) Reversing RPN Notation
This problem is trickier than it seems:
print rpn2ltr qw(2 3 4 + );
# output : 2  3 + 4
# should be : 2  (3 + 4)
MeowChow
s aamecha.s a..a\u$&owag.print
Re: Re: Re: (Golf) Reversing RPN Notation by chipmunk (Parson) on May 21, 2001 at 20:56 UTC 
Ouch, that's a good point. Well, I don't think there's any way to solve that problem with the data that's provided. The operator hash would need to specify which operators are commutative and which aren't.
In fact, the problem requirements state:
Operations of the same priority can be considered to be commutative, and can be evaluated in any order.
[fixed spelling]
So, I solved the problem as stated, although the problem as stated doesn't quite reflect actual arithmetic.
Update: Oops, I'm confusing commutative (order doesn't matter) with associative (grouping doesn't matter). Subtraction is neither commutative nor associative, but the problem MeowChow pointed out involves associativity. The operator hash would need to specify which operators are associative. Either way, there's not enough information available for a perfect solution.  [reply] 

The purpose of associativity is to resolve ambiguities between operators of equal precedence. Associativity isn't specified on a "yes/no" basis, but on lefttoright, or righttoleft basis. All trivial arithmetic operators excluding exponentiation are lefttoright.
MeowChow
s aamecha.s a..a\u$&owag.print  [reply] 
Re: Re: Re: (Golf) Reversing RPN Notation by Masem (Monsignor) on May 21, 2001 at 22:04 UTC 
With the hash that I gave, that solution is correct.
If the hash was, instead
%o = ( '' => 1,
'+' => 2,
'*' => 3,
'/' => 3 );
then the code would produce the second, correct solution. In other words, the code's correct, the givens are just wrong :)
Dr. Michael K. Neylon  mneylonpm@masemware.com

"You've left the lens cap of your mind on again, Pinky"  The Brain
 [reply] [d/l] 

A few problems with this:
 qw(2 3 4 * /) : you forgot to set '/' to 4
 qw(2 3 4  ) : this is the biggie
MeowChow
s aamecha.s a..a\u$&owag.print  [reply] 

Ok, it's probably going to depend on how you decide to pop off the stack. Given "N1 N2 o" in RPN where N1 and N2 are the numbers and o the operation, the LTR should be "N1 o N2".
Yes, '/' would need to be 4. And yes, the second one poses the problem if there's no indication of order being important on an operation ("a op b" not being equal to "b op a"). Chipmunk's got part of the problem with associtivity in his 171 char solution, but I might need to restate the problem to handle this concept; at the time, I was only aiming for a general solution assuming that order didn't matter.
Dr. Michael K. Neylon  mneylonpm@masemware.com

"You've left the lens cap of your mind on again, Pinky"  The Brain
 [reply] 

Re: Re: Re: (Golf) Reversing RPN Notation by bobione (Pilgrim) on May 21, 2001 at 20:46 UTC 
Both output : 2  3 + 4 and 2  (3 + 4) are correct but the first one is better because "minimize the use of parentheses". It seems to be good.
Update: MeowChow points something right !! I was dreaming when I read his post, forget it :)
BobiOne
KenoBi :)
 [reply] 

Uh, no, addition and subtraction are lefttoright associative, which means that:
2  3 + 4 = 1 + 4 = 3
while
2  (3 + 4) = 2  7 = 5
MeowChow
s aamecha.s a..a\u$&owag.print  [reply] [d/l] 

