Solve day 13 2017.
This commit is contained in:
parent
1a71ab97c3
commit
4ba0b25b77
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()
|
Loading…
Reference in New Issue
Block a user