From cf3119c4d41d0338b9a5d1dc00dbbe44f8d4e9ac Mon Sep 17 00:00:00 2001 From: Xevion Date: Fri, 26 Jul 2019 22:12:09 -0600 Subject: [PATCH] fixed day 4 part 2 --- 2018/day-4/python/main.py | 35 ++++++++++++++++++----------------- 1 file changed, 18 insertions(+), 17 deletions(-) diff --git a/2018/day-4/python/main.py b/2018/day-4/python/main.py index 1b9b6b5..72423c1 100644 --- a/2018/day-4/python/main.py +++ b/2018/day-4/python/main.py @@ -4,9 +4,9 @@ import time, re, datetime, pprint, string, process_input data = process_input.process() # Comment this out to use real puzzle data -import sys, os -path = os.path.join(sys.path[0], '..', 'processed_input') -data = open(path, 'r').read().split('\n') +# import sys, os +# path = os.path.join(sys.path[0], '..', 'processed_input') +# data = open(path, 'r').read().split('\n') # Pattern Constants & pprint pprint = pprint.PrettyPrinter(width=1000).pprint @@ -21,10 +21,11 @@ class GuardData: # Grabs the guard with the best singular minute def best_minute(self): - # Finds the guard based on the guard's most slept minute - guard = max(self.guards.items(), key=lambda item : max(enumerate(item[1]['minutes']), key=lambda minute : minute[1])) - # Return the guard selected's best minute and the minute count and the id of the guard. - return guard[0], max(enumerate(guard[1]['minutes']), key=lambda item : item[1]) + guard = max(self.guards.items(), key=lambda item : self.guard_best_minute(item[0])[1]) + return guard[0], (self.guard_best_minute(guard[0])) + + def guard_best_minute(self, id): + return max(enumerate(self.guards[id]['minutes']), key=lambda i : i[1]) # Returns the guard item with the highest total def best_total(self): @@ -87,17 +88,17 @@ charset = string.digits + string.ascii_lowercase + string.ascii_uppercase def format_print(guard_data): table = [] # Header parts - minutes = map(lambda num : str(num).zfill(2), range(60)) - minutes = list(map(lambda num : (num[0], num[1]), minutes)) - top, bottom = ' '.join(minutes[i][0] for i in range(len(minutes))), ' '.join(minutes[i][1] for i in range(len(minutes))) - headerp1 = ["ID".ljust(6), "Total", top] + minutes = list(map(lambda num : list(str(num).zfill(2)), range(60))) + top, bottom = '|'.join(minutes[i][0] for i in range(len(minutes))), '|'.join(minutes[i][1] for i in range(len(minutes))) + headerp1 = ["ID".ljust(6), "Total", bottom] table.append(' | '.join(headerp1)) - table.append(bottom.rjust(len(table[0]))) - + table.insert(0, top.rjust(len(table[0]))) + table.append('-' * len(table[-1])) + table.insert(0, '-' * len(table[-1])) guard_data = sorted(guard_data.guards.items(), key=lambda item : item[0]) for guard in guard_data: row = [ - str(str(guard[0]).ljust(6)), + str(str(guard[0]).rjust(6).ljust(6)), str(guard[1]['total']).ljust(5), ' '.join(['.' if minute == 0 else charset[minute % len(charset)] for minute in guard[1]['minutes']]) ] @@ -105,6 +106,8 @@ def format_print(guard_data): table.append(' '.join(row)) return '\n'.join(table) +print(format_print(guard_data)) + id, total = guard_data.best_total() minute, minute_count = guard_data.guard_best_minute(guard_data.best_total()[0]) print(f'\nGuard {id} slept the most for a total of {total} minutes.') @@ -115,6 +118,4 @@ id, (minute, minute_count) = guard_data.best_minute() print(f'Guard {id} spent minute {minute} the most @ {minute_count} times.') p2 = id * minute -print(f'\nPart 1 solution: {p1}\nPart 2 solution: {p2}') - -print(format_print(guard_data)) \ No newline at end of file +print(f'\nPart 1 solution: {p1}\nPart 2 solution: {p2}\n') \ No newline at end of file