### Re^2: Happy 2006

by Perl Mouse (Chaplain)
 on Jan 11, 2006 at 00:13 UTC ( #522357=note: print w/replies, xml ) Need Help??

in reply to Re: Happy 2006

I don't quite understand how your program is supposed to work, but the results are indeed incorrect. It seems all your operators have the same precedence?
```+9*8*7-6+5*4-3-2-1 == 512
+98/7+654*3+2/1 == 1978
+98/7+654*3+2*1 == 1978
Perl --((8:>*

Replies are listed 'Best First'.
Re^3: Happy 2006
by Limbic~Region (Chancellor) on Jan 11, 2006 at 18:16 UTC
Perl Mouse,
No, just each term in the expression is evaluated independently. This is how we did similar puzzles in school. The program works as follows:

Algorithm::Loops generates all the permutation of operators needed and then the numbers are zipped forming a single string. This is the point where eval \$string would produce the same results as your code. Instead, I break each term apart and keep a running total of the value which is returned.

In my opinion, what would make the puzzle much more interesting would be to require single expression evaluation as your solution does but prohibit the use of eval \$string. Here is my original solution modified accordingly though it is quite slow and a bit obfu now. Thanks for the puzzle.

Cheers - L~R

In my opinion, what would make the puzzle much more interesting would be to require single expression evaluation as your solution does but prohibit the use of eval \$string.
You went to a school where you didn't have to program a calculator in your first year? I have a different opinion - writing an expression evaluator is boring, and it would be a reimplementation of functionality that perl already provides.

I like string eval. I wish every programming language had such functionality.

Perl --((8:>*
Perl Mouse,
You went to a school where you didn't have to program a calculator in your first year?

No. Computers were pretty scarce in highschool and programming courses were non-existant.

...writing an expression evaluator is boring...

I am sure doing anything you already know how to do can be boring. If you have had the benefit of a college education in computer science and/or work as a programmer professionally, building a precedence parser this trivial is probably extremely boring.

I like string eval.

I agree and use it when it makes sense to. OTOH, when people post neat puzzles like this I take it as an opportunity to learn things I don't already know. Since it isn't production code - there is no harm in a little golf, obfu, or non-straight forward solutions. I often intentionally limit the tools I will allow myself to use - see Necessity is the mother of invention for an explanation of why.

Again, thanks for the puzzle.

Cheers - L~R

Create A New User
Node Status?
node history
Node Type: note [id://522357]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others exploiting the Monastery: (4)
As of 2020-10-23 12:01 GMT
Sections?
Information?
Find Nodes?
Leftovers?
Voting Booth?
My favourite web site is:

Results (238 votes). Check out past polls.

Notices?