Skip to content

Commit 42fbd9a

Browse files
Added statistics at bottom
1 parent 9330905 commit 42fbd9a

File tree

4 files changed

+56
-5
lines changed

4 files changed

+56
-5
lines changed

Algorithms/Sorting.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -259,7 +259,7 @@ def bucketSort(arr, event, digit, aux):
259259
aux.list = []
260260
for i in range(length):
261261
buckets.append([])
262-
aux.setList(length, arr.length())
262+
aux.setList(length, 0, arr.length())
263263

264264

265265
for i in range(arr.length()):

UI/Arrays.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,10 @@ def __init__(self, array_group, dim, coords, beg, end, midi, delay = default_del
9090

9191
self.saved_config = [size, beg, end]
9292
self.saved_list = [i for i in range(1, self.end+1)]
93+
94+
self.access = 0
95+
self.swaps = 0
96+
self.changes = 0
9397

9498
def change_delay(self, delay):
9599
try:
@@ -145,6 +149,9 @@ def load_config(self):
145149
self.createList()
146150

147151
def createList(self):
152+
self.access = 0
153+
self.swaps = 0
154+
self.changes = 0
148155
width = self.dim[0]/len(self.list)
149156
y = self.coords[1] + self.dim[1]
150157
height_unit = self.dim[1] / (self.end - self.beg)
@@ -172,6 +179,9 @@ def getList(self):
172179
# TODO: As part of the challenge, code ur own shuffle method
173180
def shuffle(self):
174181
random.shuffle(self.list)
182+
self.access = 0
183+
self.swaps = 0
184+
self.changes = 0
175185

176186
def generate(self):
177187
self.array_group.empty()
@@ -186,17 +196,21 @@ def play(self, index):
186196
self.midi.play(int((self.list[index] - self.beg + 1)/(self.end - self.beg + 1)*127))
187197

188198
def get(self, index):
199+
self.access += 1
189200
self.visited[index] = True
190201
self.play(index)
191202
time.sleep(self.delay)
192203
return self.list[index]
193204

194205
def replace(self, index, val):
206+
self.access += 1
207+
self.changes += 1
195208
self.visited[index] = True
196209
self.play(index)
197210
time.sleep(self.delay)
198211
self.list[index] = val
199212

213+
# No sorting algos actually use these, probably initialization
200214
def insert(self, index, val):
201215
self.list.insert(index, val)
202216
self.visited.insert(index, True)
@@ -214,6 +228,9 @@ def remove(self, index):
214228
self.createList()
215229

216230
def swap(self, ind1, ind2):
231+
self.access += 2
232+
self.changes += 2
233+
self.swaps += 1
217234
if (ind1 == ind2):
218235
return
219236
self.visited[ind1] = True

UI/UI.py

Lines changed: 35 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -152,12 +152,15 @@ def __init__(self, window, screen_group, sorting_group, aux_sorting_group, scrol
152152
text_box_group.empty()
153153
# Constants
154154
self.TITLE_Y = 50
155+
156+
# Text at the bottom of the screen
157+
self.TITLE_HEIGHT = 100
155158
# Margins for all boxes
156159
self.MARGIN_X = 25
157160
self.MARGIN_Y = 10
158161
# Calculations for certain values
159162
self.SORTING_WIDTH = (window.window.get_size()[0] - 3*self.MARGIN_X)*(3/4) # Ideally is ~800
160-
self.SORTING_HEIGHT = (window.window.get_size()[1] - 2*self.TITLE_Y - 2*self.MARGIN_Y)
163+
self.SORTING_HEIGHT = (window.window.get_size()[1] - 2*self.TITLE_Y - 2*self.MARGIN_Y - self.TITLE_HEIGHT)
161164
self.CONFIG_WIDTH = 300
162165
#CONFIG_X = SORTING_MARGIN_X
163166
#CONFIG_Y = SORTING_HEIGHT + 2*SORTING_MARGIN_Y
@@ -176,7 +179,7 @@ def __init__(self, window, screen_group, sorting_group, aux_sorting_group, scrol
176179
self.file = None
177180

178181
self.SORTING_X = (window.window.get_size()[0] - self.CONFIG_WIDTH - 2*self.MARGIN_X)/2 + self.MARGIN_X
179-
self.SORTING_Y = 2*self.TITLE_Y + self.MARGIN_Y + (window.window.get_size()[1] - 2*self.TITLE_Y - 2*self.MARGIN_Y)/2
182+
self.SORTING_Y = 2*self.TITLE_Y + self.MARGIN_Y + (window.window.get_size()[1] - 2*self.TITLE_Y - 2*self.MARGIN_Y - self.TITLE_HEIGHT)/2
180183
self.sorting_group = sorting_group
181184
self.aux_sorting_group = aux_sorting_group
182185
sorting_group.empty()
@@ -189,8 +192,25 @@ def __init__(self, window, screen_group, sorting_group, aux_sorting_group, scrol
189192

190193
self.handled = 0
191194

195+
self.accessed = None
196+
self.changes = None
197+
self.aux_count = None
198+
self.swaps = None
192199

193200
def update(self):
201+
if (self.accessed != None):
202+
#print("Accessed Array Count: {}".format(self.array.access))
203+
self.accessed.change_text(Wrapper.DefaultText.text("Accessed Array Count: {}".format(self.array.access), Wrapper.FontSizes.BUTTON_SIZE))
204+
if (self.changes != None):
205+
self.changes.change_text(Wrapper.DefaultText.text("Changes: {}".format(self.array.changes), Wrapper.FontSizes.BUTTON_SIZE))
206+
if (self.aux_count != None and self.aux_array != None):
207+
self.aux_count.change_text(Wrapper.DefaultText.text("Accessed Auxillary Array Count: {}".format(self.aux_array.access), Wrapper.FontSizes.BUTTON_SIZE))
208+
else:
209+
self.aux_count.change_text(Wrapper.DefaultText.text("", Wrapper.FontSizes.BUTTON_SIZE))
210+
211+
if (self.swaps != None):
212+
self.swaps.change_text(Wrapper.DefaultText.text("Swaps: {}".format(self.array.swaps), Wrapper.FontSizes.BUTTON_SIZE))
213+
194214
# self.scroll_bar[0] = reset scroll
195215
# self.scroll_bar[1] = sort scroll
196216
# Glitch where it will click the button behind it
@@ -261,9 +281,9 @@ def display_sorting(self, screen_group, options_screen_group, slide_in = True):
261281
self.scroll_group[0].empty()
262282
self.scroll_group[1].empty()
263283
self.SORTING_WIDTH = (3*self.window.window.get_size()[0]/4 - 2*self.MARGIN_X) # Ideally is ~800
264-
self.SORTING_HEIGHT = (self.window.window.get_size()[1] - 2*self.TITLE_Y - 2*self.MARGIN_Y)
284+
self.SORTING_HEIGHT = (self.window.window.get_size()[1] - 2*self.TITLE_Y - 2*self.MARGIN_Y - self.TITLE_HEIGHT)
265285
self.SORTING_X = (3*self.window.window.get_size()[0]/4 - 2*self.MARGIN_X)/2 + self.MARGIN_X
266-
self.SORTING_Y = 2*self.TITLE_Y + self.MARGIN_Y + (self.window.window.get_size()[1] - 2*self.TITLE_Y - 2*self.MARGIN_Y)/2
286+
self.SORTING_Y = 2*self.TITLE_Y + self.MARGIN_Y + (self.window.window.get_size()[1] - 2*self.TITLE_Y - 2*self.MARGIN_Y - self.TITLE_HEIGHT)/2
267287
#print(self.SORTING_X, self.SORTING_Y, self.SORTING_WIDTH, self.SORTING_HEIGHT)
268288
self.array = Array(self.sorting_group, (self.SORTING_WIDTH, self.SORTING_HEIGHT), (self.MARGIN_X, self.SORTING_Y - self.SORTING_HEIGHT/2), 1, self.array_length, self.midi)
269289

@@ -315,15 +335,26 @@ def func():
315335
self.scroll_bar.append(Wrapper.ScrollBar(buttons, ((5*self.window.window.get_size()[0]/6), button_col_top + 2 * button_margin), (200, 50), self.scroll_group[1], self.window, "Choose Sorted", slide_in))
316336
# Options button
317337

338+
self.accessed = Wrapper.Text(Wrapper.DefaultText.text("Accessed Array Count: ", Wrapper.FontSizes.BUTTON_SIZE), (self.MARGIN_X + 200, self.SORTING_HEIGHT + 2*self.TITLE_Y + self.MARGIN_Y + self.TITLE_HEIGHT/4), self.window, slide_in)
339+
self.changes = Wrapper.Text(Wrapper.DefaultText.text("Swaps: ", Wrapper.FontSizes.BUTTON_SIZE), (self.MARGIN_X + 600, self.SORTING_HEIGHT + 2*self.TITLE_Y + self.MARGIN_Y + self.TITLE_HEIGHT/4), self.window, slide_in)
340+
self.aux_count = Wrapper.Text(Wrapper.DefaultText.text("", Wrapper.FontSizes.BUTTON_SIZE), (self.MARGIN_X + 225, self.SORTING_HEIGHT + 2*self.TITLE_Y + self.MARGIN_Y + self.TITLE_HEIGHT/2 + self.MARGIN_Y), self.window, slide_in)
341+
self.swaps = Wrapper.Text(Wrapper.DefaultText.text("Changes: ", Wrapper.FontSizes.BUTTON_SIZE), (self.MARGIN_X + 600, self.SORTING_HEIGHT + 2*self.TITLE_Y + self.MARGIN_Y + self.TITLE_HEIGHT/2 + self.MARGIN_Y), self.window, slide_in)
342+
343+
self.screen_group.add(self.accessed)
344+
self.screen_group.add(self.swaps)
345+
self.screen_group.add(self.aux_count)
346+
self.screen_group.add(self.changes)
318347
# TODO: RETURNS STUPID STUFF, reduce returns and make it so that you don't have to call update manually in main file
319348
self.options_actions = OptionActions(self.window, screen_group, options_screen_group, self.midi, slide_in)
320349
return self.scroll_bar
321350

322351
def toggle_aux_array(self):
323352
if self.aux_array == None:
353+
self.aux_count.change_text(Wrapper.DefaultText.text("Accessed Auxillary Array Count: ", Wrapper.FontSizes.BUTTON_SIZE))
324354
self.array.change((self.SORTING_WIDTH, self.SORTING_HEIGHT/2), (self.SORTING_X - self.SORTING_WIDTH/2, self.SORTING_Y - self.SORTING_HEIGHT/2))
325355
self.aux_array = Array(self.aux_sorting_group, (self.SORTING_WIDTH, self.SORTING_HEIGHT/2), (self.SORTING_X - self.SORTING_WIDTH/2, self.SORTING_Y), 1, self.array_length, self.midi)
326356
else:
357+
self.aux_count.change_text(Wrapper.DefaultText.text("", Wrapper.FontSizes.BUTTON_SIZE))
327358
self.aux_array.kill()
328359
self.array.change((self.SORTING_WIDTH, self.SORTING_HEIGHT), (self.SORTING_X - self.SORTING_WIDTH/2, self.SORTING_Y - self.SORTING_HEIGHT/2))
329360
self.aux_array = None

UI/Wrapper.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,9 @@ def __init__(self, text_arg, coords, window, will_slide = True, screen = None):
214214
image = text_arg.render()
215215
super().__init__(image, coords, (0, 0), window, 400, will_slide, screen)
216216

217+
def change_text(self, text_arg):
218+
self.image = text_arg.render()
219+
217220
# TODO: There is a double where a click registers as a double click
218221
class Button(ButtonConfig, Slide):
219222
'''This is an icon button class

0 commit comments

Comments
 (0)