From d90a1c2a0a114d8de3025f9727c3ed7250ed5caa Mon Sep 17 00:00:00 2001 From: FabiolaSaga Date: Sun, 27 Sep 2020 18:07:00 -0500 Subject: [PATCH 1/3] Finished Ring Buffer --- ring_buffer/ring_buffer.py | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/ring_buffer/ring_buffer.py b/ring_buffer/ring_buffer.py index 37e9fb0dd..b2a03d365 100644 --- a/ring_buffer/ring_buffer.py +++ b/ring_buffer/ring_buffer.py @@ -1,9 +1,20 @@ class RingBuffer: def __init__(self, capacity): - pass + self.capacity = capacity + self.storage = [] + self.index = 0 def append(self, item): - pass + if len(self.storage) < self.capacity: + self.storage.append(item) + else: + self.storage[self.index] = item + + self.index += 1 + + if self.index == self.capacity: + self.index = 0 def get(self): - pass \ No newline at end of file + return self.storage + \ No newline at end of file From 98535cd9a9aae30199b6c403a047e3906f2c11d5 Mon Sep 17 00:00:00 2001 From: FabiolaSaga Date: Sun, 27 Sep 2020 18:27:49 -0500 Subject: [PATCH 2/3] Implamented BST, got runtime from 6.523969888687134 seconds to 0.13326478004455566 seconds --- names/binary_search_tree.py | 32 ++++++++++++++++++++++++++++++++ names/names.py | 11 +++++++---- 2 files changed, 39 insertions(+), 4 deletions(-) create mode 100644 names/binary_search_tree.py diff --git a/names/binary_search_tree.py b/names/binary_search_tree.py new file mode 100644 index 000000000..18de8bca0 --- /dev/null +++ b/names/binary_search_tree.py @@ -0,0 +1,32 @@ +class BSTNode: + def __init__(self, value): + self.value = value + self.left = None + self.right = None + + def insert(self, value): + if value < self.value: + if self.left == None: + self.left = BSTNode(value) + else: + self.left.insert(value) + else: + if self.right == None: + self.right = BSTNode(value) + else: + self.right.insert(value) + + def contains(self, target): + if self.value == target: + return True + else: + if target < self.value: + if self.left == None: + return False + else: + return self.left.contains(target) + else: + if self.right == None: + return False + else: + return self.right.contains(target) \ No newline at end of file diff --git a/names/names.py b/names/names.py index ea158997f..14632efa2 100644 --- a/names/names.py +++ b/names/names.py @@ -1,4 +1,5 @@ import time +from binary_search_tree import BSTNode start_time = time.time() @@ -13,10 +14,12 @@ duplicates = [] # Return the list of duplicates in this data structure # Replace the nested for loops below with your improvements -for name_1 in names_1: - for name_2 in names_2: - if name_1 == name_2: - duplicates.append(name_1) +bst = BSTNode("Name") +for name in names_1: + bst.insert(name) +for name in names_2: + if bst.contains(name): + duplicates.append(name) end_time = time.time() print (f"{len(duplicates)} duplicates:\n\n{', '.join(duplicates)}\n\n") From 5a6ba5034f143ae2ad2f9f9d93338d7394c1016e Mon Sep 17 00:00:00 2001 From: FabiolaSaga Date: Mon, 28 Sep 2020 09:44:58 -0500 Subject: [PATCH 3/3] Finished Reversed --- reverse/reverse.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/reverse/reverse.py b/reverse/reverse.py index 6116252d1..9259ad484 100644 --- a/reverse/reverse.py +++ b/reverse/reverse.py @@ -39,4 +39,10 @@ def contains(self, value): return False def reverse_list(self, node, prev): - pass + if node is None: + self.head = prev + return + + next_node = node.get_next() + node.set_next(prev) + self.reverse_list(next_node, node)