summaryrefslogtreecommitdiff
path: root/problem-9.scm
blob: cc0b862836a34dde1ae55694c7ea322cd59a916d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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))