Solution to problem 6 in Python

This commit is contained in:
David Doblas Jiménez 2022-03-05 15:25:10 +01:00
parent 3e35e6caf9
commit 8bbdba9dfd

View File

@ -96,5 +96,44 @@ def part_1() -> None:
print(f"{iteration} cycles must be completed") print(f"{iteration} cycles must be completed")
# --- Part Two ---
# Out of curiosity, the debugger would also like to know the size of the loop:
# starting from a state that has already been seen, how many block
# redistribution cycles must be performed before that same state is seen again?
# In the example above, 2 4 1 2 is seen again after four cycles, and so the
# answer in that example would be 4.
# How many cycles are in the infinite loop that arises from the configuration
# in your puzzle input?
def part_2() -> None:
seen = []
repeated = False
iteration = 0
while not repeated:
iteration += 1
counts = Counter(banks).most_common()
# get the most common (tuple)
_most_common = counts[0]
# reset its key
banks[_most_common[0]] = 0
for key in cycle_through(
banks, int(_most_common[0]) + 1, int(_most_common[1])
):
banks[key] += 1
_iter = Counter(banks).most_common()
if _iter in seen:
repeated = True
else:
if iteration > 1:
seen.append(_iter)
print(f"There are {len(seen)} cycles in the infinite loop")
if __name__ == "__main__": if __name__ == "__main__":
part_1() part_1()
part_2()