summaryrefslogtreecommitdiff
path: root/coding-exercises/2/66.rkt
diff options
context:
space:
mode:
authorMike Vink <mike1994vink@gmail.com>2023-03-27 21:58:09 +0200
committerMike Vink <mike1994vink@gmail.com>2023-03-27 21:58:09 +0200
commit5254a0befde355fca2711033f77047cf0bb5c08f (patch)
treeb6d07966babf647cd930bf82077f2d31985a8018 /coding-exercises/2/66.rkt
parentac1bf1b75868c873037f742b727e79ee5a97bae2 (diff)
moar
Diffstat (limited to 'coding-exercises/2/66.rkt')
-rw-r--r--coding-exercises/2/66.rkt52
1 files changed, 52 insertions, 0 deletions
diff --git a/coding-exercises/2/66.rkt b/coding-exercises/2/66.rkt
new file mode 100644
index 0000000..7cfedb8
--- /dev/null
+++ b/coding-exercises/2/66.rkt
@@ -0,0 +1,52 @@
+#lang racket
+(require "../../shared/sets.rkt")
+
+;; just use id as key
+(define (key x)
+ (if (number? x)
+ x
+ (error "Only supports numericals that we can compare with >, <, = -- KEY")))
+
+(define (list-lookup given-key set-of-records)
+ (cond ((null? set-of-records) false)
+ ((equal? given-key (key (car set-of-records)))
+ (car set-of-records))
+ (else (list-lookup given-key (cdr set-of-records)))))
+
+(define (lookup given-key set-of-records)
+ (if (null? set-of-records)
+ false
+ (let ((v (key (car set-of-records))))
+ (cond ((= given-key v) v)
+ ((< given-key v)
+ (lookup given-key (left-branch set-of-records)))
+ ((> given-key v)
+ (lookup given-key (right-branch set-of-records)))))))
+
+((lambda ()
+ (println "list -- LOOKUP")
+ (println (list-lookup 5 (list 1 2 3 4 5)))
+ (newline)
+ (println "tree -- UNION")
+ (define test216a (make-entry
+ 7
+ '()
+ '()))
+ (define test216b (make-entry
+ 4
+ (make-entry 1 '() '())
+ (make-entry
+ 8
+ (make-entry 6 '() '())
+ (make-entry
+ 10
+ '()
+ (make-entry
+ 12
+ '()
+ '())))))
+ (println (lookup 10
+ (union-set
+ (list->tree (tree->list test216a))
+ (list->tree (tree->list test216b)))))
+ (newline)))