day10
This commit is contained in:
86
day10/module.py
Normal file
86
day10/module.py
Normal file
@@ -0,0 +1,86 @@
|
||||
from aoc.input import get_input
|
||||
import copy
|
||||
import itertools
|
||||
import time
|
||||
import collections
|
||||
import re
|
||||
from aoc.partselector import part_one, part_two
|
||||
import functools
|
||||
|
||||
def pw(line):
|
||||
return int(line.strip())
|
||||
|
||||
def p1():
|
||||
inp = get_input(pw)
|
||||
inp.append(max(inp)+3)
|
||||
print(sorted(inp))
|
||||
last = 0
|
||||
result = { 0: 0, 1: 0, 2:0, 3:0 }
|
||||
for sample in sorted(inp):
|
||||
result[sample - last] +=1
|
||||
last = sample
|
||||
print(result)
|
||||
print(result[1] * result[3])
|
||||
segments = []
|
||||
for index, sample in enumerate(sorted(inp)):
|
||||
if (sample - last) == 3:
|
||||
segments.append(index)
|
||||
last = sample
|
||||
print(segments)
|
||||
|
||||
return segments
|
||||
|
||||
|
||||
def p2(segments):
|
||||
last = 0
|
||||
count = 0
|
||||
inp = get_input(pw)
|
||||
inp.append(max(inp)+3)
|
||||
inp = sorted(inp, reverse=True)
|
||||
last = 0
|
||||
result = { 0: 0, 1: 0, 2:0, 3:0 }
|
||||
lst = [(0, inp)]
|
||||
ok = True
|
||||
parts = []
|
||||
ls = 0
|
||||
for segment in segments:
|
||||
parts.append(inp[len(inp)-segment:len(inp)-ls])
|
||||
ls = segment
|
||||
|
||||
pcount = []
|
||||
lasts = 0
|
||||
for part in parts:
|
||||
lst = [(lasts, part)]
|
||||
lasts = part[0]
|
||||
ok = True
|
||||
count = 0
|
||||
while ok:
|
||||
if len(lst) == 0:
|
||||
break
|
||||
sample = lst.pop()
|
||||
last = sample[0]
|
||||
newlst = sample[1][:]
|
||||
while sample[0] - newlst[-1] >= -3:
|
||||
if len(newlst) == 1:
|
||||
count +=1
|
||||
break
|
||||
lst.insert(0, (newlst[-1], newlst[:-1]))
|
||||
newlst.pop()
|
||||
pcount.append(count)
|
||||
print(pcount)
|
||||
print(functools.reduce(lambda a,b: a*b, pcount))
|
||||
return 0
|
||||
|
||||
result1 = None
|
||||
if part_one():
|
||||
start = time.time()
|
||||
result1 = p1()
|
||||
print(round(1000*(time.time() - start), 2), 'ms')
|
||||
|
||||
|
||||
if part_two():
|
||||
start = time.time()
|
||||
p2(result1)
|
||||
print(round(1000*(time.time() - start), 2), 'ms')
|
||||
|
||||
|
||||
Reference in New Issue
Block a user