home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Power-Programmierung
/
CD1.mdf
/
forth
/
compiler
/
fpc
/
source
/
p4_9db3.seq
< prev
next >
Wrap
Text File
|
1989-02-26
|
2KB
|
73 lines
\ File trip3.seq Problem 4.4 Solutions by Dave Brown
\ 1st Version of Brute Force Method. ( Tries every possible
\ combination eg. 1 1 1, 1 1 2, 1 1 3, 1 1 4 )
\ Note: This version does not work by Levels.
\ This version uses Variables and is also quite slow.
\ A, B, and C hold the sides, AA, BB, and CC hold the sides
\ squared. N holds the largest A can be, not the Level.
VARIABLE A VARIABLE B VARIABLE C VARIABLE N
VARIABLE AA VARIABLE BB VARIABLE CC
: ?CR #OUT @ 70 > IF CR ASCII | EMIT THEN ;
: .ABC ( -- )
?CR A @ 7 .R B @ 7 .R C @ 7 .R
SPACE ASCII | EMIT SPACE ;
\ Brute force method..1st Vesion. 20:39DTB04/12/87
\ Requires no stack input
: TRIP3A ( -- )
CR ." What is the largest A can be?"
CR ." -->" #IN N !
CR N @ 1 DO I A ! I DUP * AA !
N @ 2* I DO I B ! I DUP * BB !
J I + I DO I C ! I DUP * CC !
AA @ BB @ + CC @ =
IF .ABC THEN
LOOP LOOP
KEY? ?LEAVE ( any key escape ) LOOP ;
\ 2nd Version of Brute Force Method. 20:43DTB04/12/87
\ Faster Version of Brute Force, uses only 2 Variables
VARIABLE N VARIABLE K
: ?CR #OUT @ 70 > IF CR ASCII | EMIT THEN ;
: TRIP3B ( -- )
CR ." What is the largest A can be?"
CR ." -->" #IN N ! CR
72 #OUT ! ?CR
N @ 1 DO I K !
N @ 2* I DO I DUP * J DUP * +
J I + I DO DUP I DUP * =
IF ?CR K @ 7 .R
J 7 .R
I 7 .R 2 SPACES ASCII | EMIT
THEN
LOOP DROP LOOP
KEY? ?LEAVE ( any key escape ) LOOP ;
\ Sorts Triples out by their small side. 21:13DTB04/12/87
\ The higher the level is, the slower it will go.
\ Uses only one Variable.
VARIABLE K
: ?CR #OUT @ 70 > IF CR THEN ;
: TRIP3C ( -- )
CR ." Search up to what level? "
CR ." -->" #IN
CR DUP DUP * 3 DO I K !
DUP 2 MAX 1 DO
I 1 ?DO
J J * I I * - DUP K @ =
IF ?CR 7 U.R I J 2 * * 7 U.R
J J * I I * + 7 U.R 3 SPACES
ELSE DROP
THEN LOOP LOOP
KEY? ?LEAVE LOOP DROP ;