summaryrefslogtreecommitdiff
path: root/coding-exercises
diff options
context:
space:
mode:
Diffstat (limited to 'coding-exercises')
-rw-r--r--coding-exercises/2/44.rkt9
-rw-r--r--coding-exercises/2/45.rkt10
-rw-r--r--coding-exercises/2/46.rkt32
-rw-r--r--coding-exercises/2/47.rkt43
-rw-r--r--coding-exercises/2/48.rkt8
-rw-r--r--coding-exercises/2/49.rkt21
6 files changed, 123 insertions, 0 deletions
diff --git a/coding-exercises/2/44.rkt b/coding-exercises/2/44.rkt
index 9381ac9..3b8c76c 100644
--- a/coding-exercises/2/44.rkt
+++ b/coding-exercises/2/44.rkt
@@ -1,5 +1,6 @@
#lang racket
(require sicp-pict)
+(require "../../shared/pict.rkt")
(define wave2 (beside einstein (flip-vert einstein)))
(define wave4 (below wave2 wave2))
@@ -27,3 +28,11 @@
(beside (below painter top-left)
(below bottom-right corner))))))
(paint (corner-split einstein 4))
+
+(define (square-limit painter n)
+ (let ((quarter (corner-split painter n)))
+ (let ((half (beside (flip-horiz quarter) quarter)))
+ (below (flip-vert half) half))))
+
+(square-limit einstein 4)
+(paint (square-limit einstein 4))
diff --git a/coding-exercises/2/45.rkt b/coding-exercises/2/45.rkt
new file mode 100644
index 0000000..1939675
--- /dev/null
+++ b/coding-exercises/2/45.rkt
@@ -0,0 +1,10 @@
+#lang racket
+(require sicp-pict)
+
+(define (split adjoiner splitter)
+ (lambda (painter)
+ (let ((splitted (splitter painter painter)))
+ (adjoiner painter splitted))))
+
+(define right-split (split beside below))
+(define up-split (split below beside))
diff --git a/coding-exercises/2/46.rkt b/coding-exercises/2/46.rkt
new file mode 100644
index 0000000..4016ef7
--- /dev/null
+++ b/coding-exercises/2/46.rkt
@@ -0,0 +1,32 @@
+#lang racket
+(require "../../shared/lists.rkt")
+
+(define (make-vect x y)
+ (cons x y))
+(define (xcor-vect v)
+ (car v))
+(define (ycor-vect v)
+ (cdr v))
+
+(define (add-vect . v)
+ (make-vect
+ (fold-right + 0 (map xcor-vect v))
+ (fold-right + 0 (map ycor-vect v))))
+(define (sub-vect . v)
+ (let ((xcors (map xcor-vect v))
+ (ycors (map ycor-vect v)))
+ (make-vect
+ (- (car xcors) (fold-right + 0 (cdr xcors)))
+ (- (car ycors) (fold-right + 0 (cdr ycors))))))
+(define (scale-vect s v)
+ (make-vect (* s (xcor-vect v))
+ (* s (ycor-vect v))))
+
+(define test-vec (make-vect 1 2))
+(define test-vec2 (make-vect 3 4))
+((lambda ()
+ (display (add-vect test-vec test-vec2))
+ (newline)
+ (display (sub-vect test-vec test-vec2))
+ (newline)
+ (display (scale-vect 3 test-vec))))
diff --git a/coding-exercises/2/47.rkt b/coding-exercises/2/47.rkt
new file mode 100644
index 0000000..5e1c562
--- /dev/null
+++ b/coding-exercises/2/47.rkt
@@ -0,0 +1,43 @@
+#lang racket
+(require "../../shared/pict.rkt")
+(define (make-frame origin edge1 edge2)
+ (list origin edge1 edge2))
+(define (origin-frame frame)
+ (car frame))
+(define (edge1-frame frame)
+ (cadr frame))
+(define (edge2-frame frame)
+ (caddr frame))
+
+(define test-frame (make-frame
+ (make-vect 1 2)
+ (make-vect 2 4)
+ (make-vect 3 6)))
+((lambda ()
+ (newline)
+ (display test-frame)
+ (newline)
+ (display (origin-frame test-frame))
+ (display (edge1-frame test-frame))
+ (display (edge2-frame test-frame))))
+
+(define (make-frame2 origin edge1 edge2)
+ (cons origin (cons edge1 edge2)))
+(define (origin-frame2 frame)
+ (car frame))
+(define (edge1-frame2 frame)
+ (cadr frame))
+(define (edge2-frame2 frame)
+ (cddr frame))
+
+(define test-frame2 (make-frame2
+ (make-vect 1 2)
+ (make-vect 2 4)
+ (make-vect 3 6)))
+((lambda ()
+ (newline)
+ (display test-frame2)
+ (newline)
+ (display (origin-frame2 test-frame2))
+ (display (edge1-frame2 test-frame2))
+ (display (edge2-frame2 test-frame2))))
diff --git a/coding-exercises/2/48.rkt b/coding-exercises/2/48.rkt
new file mode 100644
index 0000000..2ff696a
--- /dev/null
+++ b/coding-exercises/2/48.rkt
@@ -0,0 +1,8 @@
+#lang racket
+
+(define (make-segment start end)
+ (cons start end))
+(define (start-segment s)
+ (car s))
+(define (end-segment s)
+ (cdr s))
diff --git a/coding-exercises/2/49.rkt b/coding-exercises/2/49.rkt
new file mode 100644
index 0000000..688364a
--- /dev/null
+++ b/coding-exercises/2/49.rkt
@@ -0,0 +1,21 @@
+#lang racket
+(require (only-in sicp-pict
+ paint
+ segments->painter))
+(require "../../shared/pict.rkt")
+
+(define (outline frame)
+ (display frame)
+ (let ((corner
+ (add-vect
+ (edge1-frame frame)
+ (edge2-frame frame)))
+ (origin (origin-frame frame))
+ (e1 (edge1-frame frame))
+ (e2 (edge2-frame frame)))
+ (segments->painter
+ (list (make-segment origin e1)
+ (make-segment e1 corner)
+ (make-segment corner e2)
+ (make-segment e2 origin)))))
+(paint outline)