Code Abbey -- Arithmetic progression

Oforth examples. Feel free to post your own code.

Code Abbey -- Arithmetic progression

Postby sotolf » 10 Sep 2015 10:51

When we speak about arithmetic progression (or arithmetic sequence) we mean a series of numbers with a special property - each value is followed by the other, greater by predefined amount (step).

I.e. difference of (K+1)-th and K-th values is a constant. Here are examples of sequences

1 2 3 4 5 6 7 ...
4 6 8 10 12 14 16...
10 13 16 19 22 25 28...

Since so, arithmetic sequence is completely defined by the first member (A) and the increment value - step size - (B). First few members could be expressed as

A + (A + B) + (A + 2B) + (A + 3B) + ...


Here we could of course write loops and solve the problem that way, but it gets a lot simpler if we factor out our solution a bit, and get some method to the madnes,

since we have A, B ad N as shown up we can reduce this to A*N + (1+2+...+b-1) * b the only not so obvious part here is the parenthesized part but it turns out it's rather easy to get in oforth, since we have #seq the part then becomes A N * B 1 - seq sum B * + in proper reverse notation, we just need to get this to deal with the stack, and it doesn't need much stack juggling so that means we get to not use locals ;) :P

Code: Select all
: getLn { System.Console askln }                                               
: getNumber { getLn asInteger }                                                 
: pprint { apply(#.) printcr }                                                 
: getInput { [] getNumber #[ getLn + ] times }                                 
: parseLine { words map(#asInteger) }                                           
: 3list>st { dup first swap dup second swap third } // [a,b,n] -- a b n
: arithseq { tuck   1 - seq sum  *   tor  *  + }    // a * n + (1 + 2 + ... [b-1] )b
: solveline { parseLine 3list>st arithseq }

getInput map(#solveline) pprint
sotolf
 
Posts: 55
Joined: 30 Jul 2015 15:53

Return to Oforth examples

Who is online

Users browsing this forum: No registered users and 1 guest

cron