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()