41 lines
1.1 KiB
Text
41 lines
1.1 KiB
Text
[ dup 0 peek
|
|
swap 2 peek
|
|
2dup + 2dup +
|
|
join join join ] is f1 ( [ --> [ )
|
|
|
|
[ dup 3 peek
|
|
swap 1 peek
|
|
2dup + 2dup +
|
|
join join join ] is f2 ( [ --> [ )
|
|
|
|
[ dup 3 peek
|
|
swap 2 peek
|
|
2dup + 2dup +
|
|
join join join ] is f3 ( [ --> [ )
|
|
|
|
[ do over + tuck + rot * unrot * + ] is perimeter ( [ --> n )
|
|
|
|
[ stack ] is limit ( --> s )
|
|
[ stack ] is primitives ( --> s )
|
|
[ stack ] is triples ( --> s )
|
|
|
|
[ limit put
|
|
0 primitives put
|
|
0 triples put
|
|
' [ 1 1 2 3 ]
|
|
[ dup perimeter
|
|
limit share over < iff 2drop done
|
|
1 primitives tally
|
|
limit share swap / triples tally
|
|
dup f1 recurse
|
|
dup f2 recurse
|
|
f3 again ]
|
|
say "Pythagorean triples, perimeter < "
|
|
limit take echo
|
|
say ": "
|
|
triples take echo
|
|
say ", of which "
|
|
primitives take echo
|
|
say " are primitive." cr ] is task ( n --> )
|
|
|
|
7 times [ 10 i^ 2 + ** task ]
|