From 1eefd58ca4fdb5d2f51f657bfd70c9a89a4707db Mon Sep 17 00:00:00 2001 From: Iru Cai Date: Thu, 24 May 2018 21:39:58 +0800 Subject: initial commit --- euler14.scm | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 euler14.scm (limited to 'euler14.scm') 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) -- cgit v1.2.3