Summary Files Commits Branches @commit @diff @stats
diff options
context:
space:
mode:
Commitfbd8549adcc49736f4ea659bd607faa38df3c5ab (patch)
Author
 Syndamia <kamen@syndamia.com>
2022-11-19 18:27:06 +0200
Committer
 Syndamia <kamen@syndamia.com>
2022-11-19 18:27:06 +0200
Files908b8398cda2fac6ecc129f8cdf49bd9b2a2de45
uni-projects-fbd8549adcc49736f4ea659bd607faa38df3c5ab.tar
uni-projects-fbd8549adcc49736f4ea659bd607faa38df3c5ab.tar.gz
uni-projects-fbd8549adcc49736f4ea659bd607faa38df3c5ab.zip
Parent6ae268800efbf1027d096b5aec7907a874963955 (diff)
[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.rkt88
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