summaryrefslogtreecommitdiff
path: root/euler14.scm
blob: 3adc07a4283c36ed86548c83e1907e1962169b24 (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
26
27
28
(define (chainlen n)
 (define (next m)
  (if (even? m)
   (/ m 2)
   (+ (* m 3) 1)))
 (define (count-iter cur cnt)
  (if (= cur 1)
   cnt
   (count-iter (next cur) (+ cnt 1))))
 (count-iter n 1))

(define (find-max-len-start limit)
  (define (try cur longest ans)
	(cond ((> cur limit) ans)
		  ((= (remainder (- cur 4) 6) 0)
		   ;it's even and is 3n+1=>it's 6n+4
		   (try (+ cur 1) longest ans))
		  (else
			(let ((len (chainlen cur))
				  (curn (+ cur 1)))
			  (if (> len longest)
				(try curn len cur)
				(try curn longest ans))))))
 (let ((lowest (ceiling (/ limit 2))))
  (try lowest 1 lowest)))

(display (find-max-len-start 999999))
(newline)