53 lines
1.2 KiB
Python
53 lines
1.2 KiB
Python
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()
|