diff options
[FP/EX1] Added work from today's exam
1 files changed, 88 insertions, 0 deletions
| -rw-r--r-- | Year 2/Functional Programming/Exam1-19.11.2022.rkt | 88 |
diff --git a/Year 2/Functional Programming/Exam1-19.11.2022.rkt b/Year 2/Functional Programming/Exam1-19.11.2022.rkt new file mode 100644 index 0000000..f72f87c --- /dev/null +++ b/Year 2/Functional Programming/Exam1-19.11.2022.rkt @@ -0,0 +1,88 @@ +#lang racket +(require math/number-theory) ; Само ползвам prime? + + +;;; Задача 1 + +(define (primes-prod x) + (define (calc current max prod) + (cond [(> current max) prod] + [(prime? current) (calc (add1 current) max (* prod current))] + [else (calc (add1 current) max prod)])) + (calc 2 (sqrt x) 1)) + +;; Примери +(primes-prod 12) ; → 6 +(primes-prod 49) ; → 210 +(primes-prod 1200) ; → 200560490130#lang racket + + +;;; Задача 2 + +(define (shuffle-merge xs ys) + (define (calc left right result) + (cond [(or (null? left) (null? right)) (append result left right)] + [else (calc (cdr left) (cdr right) (append result (list (car left) (car right))))])) + (calc xs ys '())) + +;; Примери +(shuffle-merge '(1) '()) ; → '(1) +(shuffle-merge '(3 4 5) '(2)) ; → '(3 2 4 5) +(shuffle-merge '(3 4 5) '(9 2)) ; → '(3 9 4 2 5) +(shuffle-merge '(3 2 8) '(5 6 1 9 11)) ; → '(3 5 2 6 8 1 9 11)#lang racket + + +;;; Задача 3 + +(define (sum> l1 l2) + (cond [(null? l1) #t] + [(null? l2) #f] + [else (> (+ (car l1) (cdr l1)) (+ (car l2) (cdr l2)))])) + +(define (g-l-sum limit) + (define (calc x y) + (cond [(or (> (gcd x y) limit) (> (lcm x y) limit)) '()] + [(= (+ (gcd x y) (lcm x y)) limit) (cons x y)] + ;; Кодът тук избира най-малката възможна точкова двойка + [else (define left (calc (add1 x) y)) + (define right (calc x (add1 y))) + (cond [(sum> right left) left] + [else right])])) + (calc 1 1)) + +;; Примери +(g-l-sum 2) ; → '(1 . 1) +(g-l-sum 14) ; → '(6 . 4)#lang racket + + +;;; Задача 4 + +(define (steps-bm xss) + (define (calc xss rowi) + ;; Резултат = редове разстояние + колони разстояние + (cond [(member 1 (car xss)) (+ (abs (- 3 rowi)) + (abs (- 2 (index-of (car xss) 1))))] + [else (calc (cdr xss) (add1 rowi))])) + (calc xss 1)) + +;; Примери +(steps-bm '((0 0 0 0 0) + (0 0 0 0 1) + (0 0 0 0 0) + (0 0 0 0 0) + (0 0 0 0 0)) ) ; → 3 +(steps-bm '((0 0 0 0 0) + (0 0 0 0 0) + (0 1 0 0 0) + (0 0 0 0 0) + (0 0 0 0 0)) ) ; → 1 +(steps-bm '((0 0 0 0 0) + (0 0 0 0 0) + (0 0 1 0 0) + (0 0 0 0 0) + (0 0 0 0 0)) ) ; → 0 +(steps-bm '((0 0 0 0 0) + (0 0 0 0 0) + (0 0 0 0 0) + (0 0 0 0 0) + (0 0 0 0 1)) ) ; → 4 |
