Commit 5ccc7d0

mo khan <mo@mokhan.ca>
2024-06-01 19:09:02
Complete assignment 1
1 parent 24c677e
Changed files (3)
assignments/1-solution.md
@@ -0,0 +1,75 @@
+# Assignment 1 – choose ONE exercise each from Chapters 2 and 3
+
+## Chapter 2: Exercises
+
+4. Write an algorithm that gets the price for item A plus the quantity
+   purchased. The algorithm prints the total cost, including 6% sales tax.
+
+    ```plaintext
+    Get values for `price` and `quantity`
+    Set the value of `tax` to 1.06
+    Set the value of `total` to `price` multiplied by `quantity` multiplied by `tax`
+    Print the value of `total`
+    ```
+
+    ```ruby
+    def calculate_total(price, quantity, tax = 0.06)
+      return (price * quantity) * (1.0 + tax)
+    end
+    ```
+
+## Chapter 3: Exercises
+
+21. Use the binary search algorithm to decide whether 35 is in the following
+    list: `3, 6, 7, 9, 12, 14, 18, 21, 22, 31, 43`
+
+    ```plaintext
+    Get the list of numbers and assign to variable `items`
+    Get the target number and assign to variable `target`
+    Set variable `min` to 0
+    Set variable `max` to total # of `items`
+    Set variable `mid` to `max - min / 2`
+    Set variable `found` to No
+    while (mid > min && mid < max)
+      Set the variable `current` to `items` at index `mid`
+      if current = target
+        Set variable `found` to Yes
+        Set variable `mid` to `min - 1`
+      else if target > current
+        Set variable `min` to the value of `mid`
+        Set the variable `mid` to `((max-min) / 2) + min`
+      else
+        Set variable `max` to the value of `mid`
+        Set the variable `mid` to `((max-min) / 2) + min`
+      end
+    end of loop
+    If Found = Yes
+      print Found
+    else
+      print Not Found
+    stop
+    ```
+
+    ```ruby
+    def bsearch(target, items)
+      min = 0
+      max = items.size
+      mid = (max - min) / 2
+
+      while (mid > min && mid < max) do
+        current = items[mid]
+
+        if target == current
+          return true
+        elsif target > current
+          min = mid
+        else
+          max = mid
+        end
+
+        mid = ((max - min) / 2) + min
+      end
+
+      return false
+    end
+    ```
assignments/1.md
@@ -23,20 +23,6 @@
    heavily as a regular test.
 4. Write an algorithm that gets the price for item A plus the quantity
    purchased. The algorithm prints the total cost, including 6% sales tax.
-
-    ```ruby
-    def calculate_total(price, quantity, tax = 0.06)
-      return (price * quantity) * (1.0 + tax)
-    end
-    ```
-
-    ```plaintext
-    Get values for `price` and `quantity`
-    Set the value of `tax` to 1.06
-    Set the vlue of `total` to `price` multiplied by `quantity` multiplied by `tax`
-    Return the value of `total`
-    ```
-
 5. Write an if/then/else primitive to do each of the following operations:
   * a. Compute and display the value `x / y` if the value of `y` is not `0`. if
     `y` does have the value `0`, then display the message `Unable to perform the
assignments/a1.rb
@@ -0,0 +1,30 @@
+#!/usr/bin/env ruby
+
+def bsearch(target, items)
+  min = 0
+  max = items.size
+  mid = (max - min) / 2
+
+  while (mid > min && mid < max) do
+    current = items[mid]
+
+    if target == current
+      return true
+    elsif target > current
+      min = mid
+    else
+      max = mid
+    end
+
+    mid = ((max - min) / 2) + min
+  end
+
+  return false
+end
+
+items = [3, 6, 7, 9, 12, 14, 18, 21, 22, 31, 43]
+puts items.inspect
+puts [1, bsearch(1, items)].inspect
+puts [35, bsearch(35, items)].inspect
+puts [22, bsearch(22, items)].inspect
+puts [44, bsearch(44, items)].inspect