mirror of
https://github.com/Xevion/advent-of-code.git
synced 2025-12-07 11:14:21 -06:00
fixed day 4 part 2
This commit is contained in:
@@ -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))
|
||||
print(f'\nPart 1 solution: {p1}\nPart 2 solution: {p2}\n')
|
||||
Reference in New Issue
Block a user