diff options
| author | Charles Cabergs <me@cacharle.xyz> | 2021-07-27 11:37:47 +0200 |
|---|---|---|
| committer | Charles Cabergs <me@cacharle.xyz> | 2021-07-27 11:37:47 +0200 |
| commit | 726c5ce4decbcd354aff50d1a486bca8c2fa33c1 (patch) | |
| tree | e96850f51e63789d6dcba3470de1258ec9a6232b | |
| parent | a13cc209e002a72a18c659d22ed39dbd99be2fcd (diff) | |
| download | project_euler-726c5ce4decbcd354aff50d1a486bca8c2fa33c1.tar.gz project_euler-726c5ce4decbcd354aff50d1a486bca8c2fa33c1.tar.bz2 project_euler-726c5ce4decbcd354aff50d1a486bca8c2fa33c1.zip | |
problem 1 2 in scheme
| -rw-r--r-- | .gitignore | 3 | ||||
| -rw-r--r-- | languages.json | 16 | ||||
| -rw-r--r-- | scheme/001-multiples_of_3_or_5.scm | 20 | ||||
| -rw-r--r-- | scheme/002-even_fibonacci_numbers.scm | 33 | ||||
| -rw-r--r-- | scheme/utils.scm | 22 |
5 files changed, 94 insertions, 0 deletions
@@ -13,4 +13,7 @@ haskell/wip/* rust/* !rust/*.rs +scheme/* +!scheme/*.scm + tags diff --git a/languages.json b/languages.json index 8e4224b..4e6e40a 100644 --- a/languages.json +++ b/languages.json @@ -46,5 +46,21 @@ "prefix" : "# ", "bottom": "###" } + }, + "clojure": { + "extension": "clj", + "comment" : { + "top": ";;;;", + "prefix" : ";; ", + "bottom": ";;;;" + } + }, + "scheme": { + "extension": "scm", + "comment" : { + "top": ";;;;", + "prefix" : ";; ", + "bottom": ";;;;" + } } } diff --git a/scheme/001-multiples_of_3_or_5.scm b/scheme/001-multiples_of_3_or_5.scm new file mode 100644 index 0000000..c329de9 --- /dev/null +++ b/scheme/001-multiples_of_3_or_5.scm @@ -0,0 +1,20 @@ +;;;; +;; Multiples of 3 or 5 +;; Problem 1 +;; +;; If we list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6 +;; and 9. The sum of these multiples is 23. +;; Find the sum of all the multiples of 3 or 5 below 1000. +;;;; + +(load "utils.scm") + +(define +top+ 1000) + +(define result + (sum + (filter + (lambda (x) (or (= 0 (modulo x 3)) (= 0 (modulo x 5)))) + (range 1 +top+ 1)))) + +(display result) diff --git a/scheme/002-even_fibonacci_numbers.scm b/scheme/002-even_fibonacci_numbers.scm new file mode 100644 index 0000000..65b567d --- /dev/null +++ b/scheme/002-even_fibonacci_numbers.scm @@ -0,0 +1,33 @@ +;;;; +;; Even Fibonacci numbers +;; Problem 2 +;; +;; Each new term in the Fibonacci sequence is generated by adding the previous two terms. By +;; starting with 1 and 2, the first 10 terms will be: +;; 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ... +;; By considering the terms in the Fibonacci sequence whose values do not exceed four +;; million, find the sum of the even-valued terms. +;;;; + +(load "utils.scm") + +(define +top+ 4000000) + +(define fib + (lambda (n) + (case n + ((0) 1) + ((1) 1) + (else (+ (fib (- n 1)) + (fib (- n 2))))))) + +(define result + (sum + (filter (lambda (x) (= 0 (modulo x 2))) + (do ((x 1 (+ x 1)) + (f 1 (fib x)) + (fs '())) + ((>= f +top+) fs) + (set! fs (cons f fs)))))) + +(display result) diff --git a/scheme/utils.scm b/scheme/utils.scm new file mode 100644 index 0000000..6ba98cd --- /dev/null +++ b/scheme/utils.scm @@ -0,0 +1,22 @@ +(define fold + (lambda (f acc xs) + (if (null? xs) + acc + (fold f (f acc (car xs)) (cdr xs))))) + +(define sum + (lambda (xs) (fold + 0 xs))) + +(define range + (lambda (start stop step) + (if (>= start stop) + '() + (cons start (range (+ start step) stop step))))) + +(define filter + (lambda (predicate xs) + (if (null? xs) + '() + (let* ((x (car xs)) + (filtered (filter predicate (cdr xs)))) + (if (predicate x) (cons x filtered) filtered))))) |
