Commits

John Chandler committed 206bade

Updated Solution 4, though three tests now failing.

Comments (0)

Files changed (1)

 			 (assert (= -1 (chop 3 [1]) ))
 			 (assert (=  0 (chop 1 [1]) ))
 
-			 (assert (=  0 (chop 1 [1 3 5]) ))
+			 (assert (=  0 (chop 1 [1 3 5]) ))  ; failing
 			 (assert (=  1 (chop 3 [1 3 5]) ))
-			 (assert (=  2 (chop 5 [1 3 5]) ))
+			 (assert (=  2 (chop 5 [1 3 5]) ))  ; failing
 			 (assert (= -1 (chop 0 [1 3 5]) ))
 			 (assert (= -1 (chop 2 [1 3 5]) ))
 			 (assert (= -1 (chop 4 [1 3 5]) ))
 			 (assert (= -1 (chop 6 [1 3 5]) ))
 
-			 (assert (=  0 (chop 1 [1 3 5 7]) ))
+			 (assert (=  0 (chop 1 [1 3 5 7]) )) ; failing
 			 (assert (=  1 (chop 3 [1 3 5 7]) ))
 			 (assert (=  2 (chop 5 [1 3 5 7]) ))
-			 (assert (=  3 (chop 7 [1 3 5 7]) )) ; failing
+			 (assert (=  3 (chop 7 [1 3 5 7]) ))
 			 (assert (= -1 (chop 0 [1 3 5 7]) ))
 			 (assert (= -1 (chop 2 [1 3 5 7]) ))
 			 (assert (= -1 (chop 4 [1 3 5 7]) ))
 			 (assert (= -1 (chop 8 [1 3 5 7]) )) ) }
   chop
   [item list]
-  (println "---")
-  (loop [ start    0
-		  offset   (quot (count list) 2)
-		  position (+ start offset) ]
-    (println item list start offset position " " (get list position))
-	(if (nil? (get list position))
+  (println "---")  ; DEBUG
+  (def start        (atom 0))
+  (def offset       (atom (quot (count list) 2)))
+  (def current-item (atom nil))
+
+  (loop [ position (+ @start @offset) ]
+	(reset! current-item (get list position))
+    (println item list @start @offset position " " @current-item)  ; DEBUG
+	(if (nil? @current-item)
 	  -1
-	  (if (= (get list position) item)
+	  (if (= @current-item item)
 		position
-		(if (= offset 0)
+		(if (= @offset 0)
 		  -1
-		  (if (< (get list position) item)
-			; go right
-			(recur position
-				   (quot offset 2)
-				   (+ position offset))
-			; go left
-			(recur position
-				   (quot offset 2)
-				   (- position offset))
+		  (do
+			(reset! start  position)
+			(reset! offset (quot @offset 2))
+			(if (< @current-item item)
+			  (recur (+ position @offset))  ; go right
+			  (recur (- position @offset) ; go left
 		  )
 		)
 	  )