mirror of
https://github.com/Xevion/advent-of-code.git
synced 2025-12-07 11:14:21 -06:00
day 4 formatting and day 5 part 1 & part 2
This commit is contained in:
@@ -1,17 +1,9 @@
|
|||||||
[1518-11-01 00:00] Guard #10 begins shift
|
[2000-01-01 00:00] Guard #1 begins shift
|
||||||
[1518-11-01 00:05] falls asleep
|
[2000-01-01 00:01] falls asleep
|
||||||
[1518-11-01 00:25] wakes up
|
[2000-01-01 00:03] wakes up
|
||||||
[1518-11-01 00:30] falls asleep
|
[2000-01-02 00:00] Guard #1 begins shift
|
||||||
[1518-11-01 00:55] wakes up
|
[2000-01-02 00:02] falls asleep
|
||||||
[1518-11-01 23:58] Guard #99 begins shift
|
[2000-01-02 00:04] wakes up
|
||||||
[1518-11-02 00:40] falls asleep
|
[2000-01-03 00:00] Guard #2 begins shift
|
||||||
[1518-11-02 00:50] wakes up
|
[2000-01-03 00:10] falls asleep
|
||||||
[1518-11-03 00:05] Guard #10 begins shift
|
[2000-01-03 00:20] wakes up
|
||||||
[1518-11-03 00:24] falls asleep
|
|
||||||
[1518-11-03 00:29] wakes up
|
|
||||||
[1518-11-04 00:02] Guard #99 begins shift
|
|
||||||
[1518-11-04 00:36] falls asleep
|
|
||||||
[1518-11-04 00:46] wakes up
|
|
||||||
[1518-11-05 00:03] Guard #99 begins shift
|
|
||||||
[1518-11-05 00:45] falls asleep
|
|
||||||
[1518-11-05 00:55] wakes up
|
|
||||||
@@ -1,12 +1,12 @@
|
|||||||
import time, re, datetime, pprint, process_input
|
import time, re, datetime, pprint, string, process_input
|
||||||
|
|
||||||
# Returns processed input, simple script for creating a chronologically ordered input file.
|
# Returns processed input, simple script for creating a chronologically ordered input file.
|
||||||
data = process_input.process()
|
data = process_input.process()
|
||||||
|
|
||||||
# Comment this out to use real puzzle data
|
# Comment this out to use real puzzle data
|
||||||
# import sys, os
|
import sys, os
|
||||||
# path = os.path.join(sys.path[0], '..', 'processed_input')
|
path = os.path.join(sys.path[0], '..', 'processed_input')
|
||||||
# data = open(path, 'r').read().split('\n')
|
data = open(path, 'r').read().split('\n')
|
||||||
|
|
||||||
# Pattern Constants & pprint
|
# Pattern Constants & pprint
|
||||||
pprint = pprint.PrettyPrinter(width=1000).pprint
|
pprint = pprint.PrettyPrinter(width=1000).pprint
|
||||||
@@ -83,6 +83,27 @@ for line in data:
|
|||||||
current_action = action
|
current_action = action
|
||||||
last_timechange = time
|
last_timechange = time
|
||||||
|
|
||||||
|
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]
|
||||||
|
table.append(' | '.join(headerp1))
|
||||||
|
table.append(bottom.rjust(len(table[0])))
|
||||||
|
|
||||||
|
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(guard[1]['total']).ljust(5),
|
||||||
|
' '.join(['.' if minute == 0 else charset[minute % len(charset)] for minute in guard[1]['minutes']])
|
||||||
|
]
|
||||||
|
row[2] = row[2].rjust(len(bottom))
|
||||||
|
table.append(' '.join(row))
|
||||||
|
return '\n'.join(table)
|
||||||
|
|
||||||
id, total = guard_data.best_total()
|
id, total = guard_data.best_total()
|
||||||
minute, minute_count = guard_data.guard_best_minute(guard_data.best_total()[0])
|
minute, minute_count = guard_data.guard_best_minute(guard_data.best_total()[0])
|
||||||
@@ -94,4 +115,6 @@ id, (minute, minute_count) = guard_data.best_minute()
|
|||||||
print(f'Guard {id} spent minute {minute} the most @ {minute_count} times.')
|
print(f'Guard {id} spent minute {minute} the most @ {minute_count} times.')
|
||||||
p2 = id * minute
|
p2 = id * minute
|
||||||
|
|
||||||
print(f'\nPart 1 solution: {p1}\nPart 2 solution: {p2}')
|
print(f'\nPart 1 solution: {p1}\nPart 2 solution: {p2}')
|
||||||
|
|
||||||
|
print(format_print(guard_data))
|
||||||
1
2018/day-5/input
Normal file
1
2018/day-5/input
Normal file
File diff suppressed because one or more lines are too long
35
2018/day-5/python/main.py
Normal file
35
2018/day-5/python/main.py
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
import os, sys, time, progressbar, string
|
||||||
|
|
||||||
|
path = os.path.join(sys.path[0], '..', 'input')
|
||||||
|
data = open(path, 'r').read()
|
||||||
|
# data = data[:10000]
|
||||||
|
data = 'dabAcCaCBAcCcaDA'
|
||||||
|
|
||||||
|
def react(string):
|
||||||
|
look = True
|
||||||
|
while look:
|
||||||
|
look = False
|
||||||
|
for i in range(len(string)-1):
|
||||||
|
if string[i].lower() == string[i + 1].lower() and string[i] != string[i + 1]:
|
||||||
|
string = string[:i] + string[i+2:]
|
||||||
|
look = True
|
||||||
|
break
|
||||||
|
return string
|
||||||
|
|
||||||
|
# t1 = time.time()
|
||||||
|
# data = react(data) #11476
|
||||||
|
# t2 = time.time()
|
||||||
|
# print('Part 1 Solution: {}'.format(len(data)))
|
||||||
|
# print('Solved in {}s\n'.format(round(t2 - t1, 3)))
|
||||||
|
|
||||||
|
t1 = time.time()
|
||||||
|
lengths = {}
|
||||||
|
charset = ''.join(list(set(data)))
|
||||||
|
for char in progressbar.progressbar(list(charset)):
|
||||||
|
table = str.maketrans({char : None, char.lower() : None})
|
||||||
|
lengths[char] = len(react(data.translate(table)))
|
||||||
|
char, length = min(lengths.items(), key=lambda item : item[1])
|
||||||
|
t2 = time.time()
|
||||||
|
|
||||||
|
print('\nPart 2 Solution: Removing polymer {}{} had the most effect at length {}.'.format(char, char.lower(), length))
|
||||||
|
print('Solved in {}s\n'.format(round(t2 - t1, 3)))
|
||||||
Reference in New Issue
Block a user