Init project
authorwatkinsr <ryanwatkins54@gmail.com>
Tue, 9 Jun 2020 18:58:08 +0000 (19:58 +0100)
committerwatkinsr <ryanwatkins54@gmail.com>
Tue, 9 Jun 2020 18:58:08 +0000 (19:58 +0100)
count-change.scm [new file with mode: 0644]
ex-1-11.scm [new file with mode: 0644]
ex-1-12.scm [new file with mode: 0644]

diff --git a/count-change.scm b/count-change.scm
new file mode 100644 (file)
index 0000000..a7d914c
--- /dev/null
@@ -0,0 +1,18 @@
+(define (count-change amount)
+  (cc amount 5))
+
+(define (cc amount kinds-of-coins)
+  (cond ((= amount 0) 1)
+        ((or (< amount 0) (= kinds-of-coins 0)) 0)
+        (else (+ (cc amount
+                  (- kinds-of-coins 1))
+                 (cc (- amount
+                      (first-denomination kinds-of-coins))
+                      kinds-of-coins)))))
+
+(define (first-denomination kinds-of-coins)
+(cond ((= kinds-of-coins 1) 1)
+      ((= kinds-of-coins 2) 5)
+      ((= kinds-of-coins 3) 10)
+      ((= kinds-of-coins 4) 25)
+      ((= kinds-of-coins 5) 50)))
diff --git a/ex-1-11.scm b/ex-1-11.scm
new file mode 100644 (file)
index 0000000..f582ad3
--- /dev/null
@@ -0,0 +1,18 @@
+(define (ex-1-11-r n)
+  (if (< n 3) n
+    (+ 
+      (+ (ex-1-11-r (- n 1))
+         (* 2 (ex-1-11-r (- n 2))))
+      (* 3 (ex-1-11-r (- n 3))))))
+
+;; iterative solution
+(define (foo n) 
+   (define (foo-iter a b c n1) 
+      ;; a = f(n1 - 1), b = f(n1 - 2), c = f(n1 - 3). 
+      ;; return a + 2b + 3c 
+     (if (< n1 3) 
+       a
+       (foo-iter (+ a (* 2 b) (* 3 c)) a b (- n1 1)))) 
+   (if (< n 3) 
+     n 
+     (foo-iter 2 1 0 n))) 
diff --git a/ex-1-12.scm b/ex-1-12.scm
new file mode 100644 (file)
index 0000000..d5b4127
--- /dev/null
@@ -0,0 +1,33 @@
+(define (pascal n)
+  (define (compute x y)
+    (cond ((= x y) 1)
+          ((= x 1) 1)
+          ((or (= x 2) (= x (- y 1))) (+ 1 (- y 2)))
+          (else 
+            (if (<= y 5)
+              (* 2 (- y 2))
+              (+ 
+                (compute x (- y 1))
+                (compute (- x 1) (- y 1)))))))
+  (define (pad n)
+    (if (<= n 0) 
+      0
+      (and (display " ")
+      (pad (- n 1)))))
+  (define (loop x y)
+    ;; (write "y: ")
+    ;; (write y)
+    (if (> y n) 
+      (newline) ;; terminate the loop
+      ;; printing logic
+      (let ((val (compute x y)))
+        (if (= x 1)
+          (pad (- (- n 1) (- y 1))))
+        (write val)
+        (display " ")
+        (if (= x y) (newline))
+      ;; advancing the recursion
+        (cond ((= x y) (loop 1 (+ y 1)))
+              (else (loop (+ x 1) y))))))
+  (loop 1 1))
+