diff options
Diffstat (limited to 'euler14.scm')
-rw-r--r-- | euler14.scm | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/euler14.scm b/euler14.scm new file mode 100644 index 0000000..3adc07a --- /dev/null +++ b/euler14.scm @@ -0,0 +1,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) |