Talk About Network



Register and Login
Nick
Password
Register create new account Sign up is FREE and you can post replies, new topics, bookmark posts and more!
Recover lost password


Programming > Forth > Re: Euler probl...
Latest [ Topics | Posts ] Archive Post A New Topic Post a Reply
<< Topic < Post Post 3 of 4 Topic 4041 of 4065
Post > Topic >>

Re: Euler problem #63

by anton@[EMAIL PROTECTED] (Anton Ertl) May 7, 2008 at 08:50 PM

William James <w_a_x_man@[EMAIL PROTECTED]
> writes:
>On May 5, 11:49 am, an...@[EMAIL PROTECTED]
 (Anton Ertl)
>> : n-digits { n -- n2 }
>>     \ number of n-th powers with n digits
>>     \ for n=1, it does not count 0 and 1 (I correct for the 1 below)
>>     \ this works by just seeing what the lowest x is that fits in
>>     \ 10^(n-1), and then rounding x up to an integer
>>     n 1- 0 d>f n 0 d>f f/ falog f>d drop 9 swap - ;
>
>Clever, but the stack makes it hard to follow the code.

I find that the conversion between integer and FP, with a double-cell
intermediate step makes it a little bit convoluted.  One can fix that
with factoring (and using FLOOR, which I have hitherto overlooked):

: u>f 0 d>f ;
: f>u f>d drop ;
: nnf/ ( n1 n2 -- f ) swap u>f u>f f/ ;
: n-digits1 { n -- r }
  9e n 1- n nnf/ falog floor f- ;

>> : solve ( -- )
>>     1 1 begin ( n sum )
>>         over n-digits dup 0> while
>>             + swap 1+ swap repeat
>>     drop nip ;
>
>Again, the stack makes it very difficult to follow.
>When one sees the +, he can't easily tell what two
>items are being added together.  This code is hard
>to understand and to modify.

With N-DIGITS1, it becomes a little easier:

: solve ( -- r )
  1 1e begin ( n rsum )
    dup n-digits1 fdup f0> while ( n rsum r )
      f+ 1+ repeat
  fdrop drop ;

Or you can use locals to reduce the stack load:

: solve ( -- r )
  1 1e begin { n f: rsum }
    n n-digits1 { f: r }
    r f0> while
      n 1+  r rsum f+ repeat
  rsum ;

But given the tone of your posting, I guess you think that the stack
makes that difficult to follow, too.  Then you have two options:

1) Get some more practice in reading Forth or other stack-based
languages.  You may eventually get the hang of it.

2) Conclude that stack-based languages are not for you and stick with
whatever other language you like.

- anton
-- 
M. Anton Ertl  http://www.complang.tuwien.ac.at/anton/home.html
comp.lang.forth FAQs: http://www.complang.tuwien.ac.at/forth/faq/toc.html
     New standard: http://www.forth200x.org/forth200x.html
   EuroForth 2008:
http://www.complang.tuwien.ac.at/anton/euroforth/ef08.html




 4 Posts in Topic:
Euler problem #63
anton@[EMAIL PROTECTED]   2008-05-05 16:49:30 
Re: Euler problem #63
William James <w_a_x_m  2008-05-07 11:45:18 
Re: Euler problem #63
anton@[EMAIL PROTECTED]   2008-05-07 20:50:24 
Re: Euler problem #63
Albert van der Horst <  2008-05-08 16:58:58 

Post A Reply:
  Go here to Signup

AddThis Feed Button


About - Advertising - Contact - Frequently Asked Questions - Privacy Policy - Terms of Use - Signup

Contact
tan12V112 Sat May 17 4:07:46 CDT 2008.