From f846659e550b932bdd55445b104bfa17ee737783 Mon Sep 17 00:00:00 2001 From: Isaac Shoebottom Date: Fri, 23 Sep 2022 10:18:24 -0300 Subject: [PATCH] Add assignment 1 and gitignore for unwanted files. --- .gitignore | 1 + assignments/A1/assignment-1.rkt | 42 +++++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+) create mode 100644 .gitignore create mode 100644 assignments/A1/assignment-1.rkt diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..7664704 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +*.bak \ No newline at end of file diff --git a/assignments/A1/assignment-1.rkt b/assignments/A1/assignment-1.rkt new file mode 100644 index 0000000..fc14fc7 --- /dev/null +++ b/assignments/A1/assignment-1.rkt @@ -0,0 +1,42 @@ +(module assignment1 racket + ;question 1 + (define (drop-divisible divisor number-list) + (filter (lambda (x) + (or + (not + (eq? (modulo x divisor) 0)) + (eq? x divisor))) + number-list)) + + ;question 2 + (define (sieve-with divisor-list number-list) + (define (iter divs lst) + (cond + [(empty? divs) lst] + [else (iter (rest divs) (drop-divisible (first divs) lst))])) + (iter divisor-list number-list)) + + ;question 3 + (define (sieve potential-prime) + ;never need to check for primes below 2 + ;you also never need to check for a number above the square root in a given range + ;plus one just for off by one errors + (sieve-with (range 2 (+ (integer-sqrt potential-prime) 1)) (range 2 potential-prime))) + + + (module+ test + (require rackunit) + (check-equal? (drop-divisible 2 (list 2 3 4 5 6 7 8 9 10)) (list 2 3 5 7 9)) + (check-equal? (drop-divisible 3 (list 2 3 4 5 6 7 8 9 10)) (list 2 3 4 5 7 8 10)) + (check-equal? (drop-divisible 5 (list 2 3 4 5 6 7 8 9 10)) (list 2 3 4 5 6 7 8 9)) + + (check-equal? (sieve-with '(2 3) (list 2 3 4 5 6 7 8 9 10)) (list 2 3 5 7)) + (check-equal? (sieve-with '() (list 2 3 4 5 6 7 8 9 10)) (list 2 3 4 5 6 7 8 9 10)) + + (check-equal? (sieve 10) (list 2 3 5 7)) + + ;question 4 + (require math/number-theory) + (check-equal? (sieve 100) (filter prime? (range 1 100))) + (check-equal? (sieve 100000) (filter prime? (range 1 100000))) + )) \ No newline at end of file