diff --git a/10/euler10.rkt b/10/euler10.rkt new file mode 100644 index 0000000..2464efc --- /dev/null +++ b/10/euler10.rkt @@ -0,0 +1,12 @@ +#lang racket + +(require math/number-theory) + +(define (primes it limit prim) + (if (equal? it limit) + prim + (if (prime? it) + (primes (+ it 1) limit (cons it prim)) + (primes (+ it 1) limit prim)))) + +(apply + (primes 1 2000000 (list))) \ No newline at end of file diff --git a/14/euler14.rkt b/14/euler14.rkt index ade1e42..11b894d 100644 --- a/14/euler14.rkt +++ b/14/euler14.rkt @@ -1,18 +1,11 @@ -#lang racket +#lang typed/racket -(define (longest-collatz n) - (let - ((pivot (list 0 0))) - (define (collatz lst) - (if (equal? (car lst) 1) - lst - (if (even? (car lst)) - (collatz (cons (quotient (car lst) 2) lst)) - (collatz (cons (+ 1 (* 3 (car lst))) lst))))) - (for ((i (range 1 n))) - (if (>= (length (collatz (list i))) (second pivot)) - (set! pivot (list i (length (collatz (list i))))) - 0)) - pivot)) +(: collatz (-> Nonnegative-Integer (Listof Nonnegative-Integer))) +(define (collatz x) + (cond + ((equal? x 1) (list 1)) + ((even? x) (cons x (collatz (quotient x 2)))) + ((odd? x) (cons x (collatz (+ 1 (* 3 x))))) + (else (list)))) -(display (first (longest-collatz 1000000))) \ No newline at end of file +(argmax (λ ((x : Nonnegative-Integer)) (length (collatz x))) (range 1 1000000)) diff --git a/16/euler16.rkt b/16/euler16.rkt new file mode 100644 index 0000000..5575f75 --- /dev/null +++ b/16/euler16.rkt @@ -0,0 +1,4 @@ +#lang racket + +(foldl + 0 (map (λ (x) (- (char->integer x) 48)) + (string->list (number->string (expt 2 1000))))) \ No newline at end of file diff --git a/30/euler30.rkt b/30/euler30.rkt new file mode 100644 index 0000000..a2b7cb6 --- /dev/null +++ b/30/euler30.rkt @@ -0,0 +1,16 @@ +#lang racket + + +(define (findlimit it) + (if (> (expt 10 it) (* it (expt 9 5))) + it + (findlimit (+ it 1)))) + +(define (digits x) + (map (λ (x) (- (char->integer x) 48)) + (string->list (number->string x)))) + +(apply +(filter (λ (x) (equal? x + (apply + (map (λ (x) (expt x 5)) (digits x))))) + + (range 2 (expt 10 (findlimit 1)))))