summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Thompson <dthompson2@worcester.edu>2014-02-02 20:18:12 -0500
committerDavid Thompson <dthompson2@worcester.edu>2014-02-02 20:18:12 -0500
commit23355128183a19f1b8e983bdf50a3ea2f1a07fb2 (patch)
tree7f9fa266ad512646119aec39e96a6b9653461d65
parent22a668de0d4487543db6de8c738dd132dc591fe5 (diff)
Solve problem 9.
-rw-r--r--problem-9.scm25
1 files changed, 25 insertions, 0 deletions
diff --git a/problem-9.scm b/problem-9.scm
new file mode 100644
index 0000000..cc0b862
--- /dev/null
+++ b/problem-9.scm
@@ -0,0 +1,25 @@
+(use-modules (srfi srfi-1)
+ (srfi srfi-42))
+
+(define (square x)
+ (* x x))
+
+;; Euclid's formula.
+(define (generate-triple n m)
+ (list (- (square n) (square m))
+ (* 2 n m)
+ (+ (square n) (square m))))
+
+(define (generate-triples max-n max-m)
+ (concatenate
+ (list-ec (:range n 2 max-n)
+ (list-ec (:range m 1 (1- n))
+ (generate-triple n m)))))
+
+(define (find-triple-sum goal)
+ (find (lambda (triple)
+ (= (apply + triple) goal))
+ ;; Assumed that this range would be enough. :)
+ (generate-triples 100 99)))
+
+(apply * (find-triple-sum 1000))