Solve day 13 2017.
This commit is contained in:
52
2017/d13.py
Normal file
52
2017/d13.py
Normal file
@@ -0,0 +1,52 @@
|
||||
from lib import str_to_ints
|
||||
|
||||
|
||||
def part_1(data):
|
||||
layer_to_depth = {}
|
||||
for line in data.splitlines():
|
||||
a, b = str_to_ints(line)
|
||||
layer_to_depth[a] = b
|
||||
|
||||
layer_to_pos = {l: 0 for l in layer_to_depth.keys()}
|
||||
layer_to_dir = {l: -1 for l in layer_to_depth.keys()}
|
||||
target = max(list(layer_to_depth.keys()))
|
||||
|
||||
r = 0
|
||||
layer = 0
|
||||
while layer <= target:
|
||||
if layer in layer_to_pos and layer_to_pos[layer] == 0:
|
||||
r += (layer * layer_to_depth[layer])
|
||||
|
||||
for k in layer_to_pos.keys():
|
||||
if layer_to_pos[k] == 0 or (layer_to_pos[k] + 1) == layer_to_depth[k]:
|
||||
layer_to_dir[k] *= -1
|
||||
layer_to_pos[k] += layer_to_dir[k]
|
||||
layer += 1
|
||||
print(r)
|
||||
|
||||
|
||||
def part_2(data):
|
||||
eqs = []
|
||||
for line in data.splitlines():
|
||||
layer, depth = str_to_ints(line)
|
||||
period = (depth - 1) * 2
|
||||
eqs.append((layer, period))
|
||||
|
||||
for delay in range(1, 1_000_000_000):
|
||||
for layer, period in eqs:
|
||||
if (delay + layer) % period == 0:
|
||||
break
|
||||
else:
|
||||
print(delay)
|
||||
return
|
||||
|
||||
|
||||
|
||||
def main():
|
||||
data = open(0).read().strip()
|
||||
part_1(data)
|
||||
part_2(data)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user