diff --git a/src/Year_2015/P10.py b/src/Year_2015/P10.py new file mode 100644 index 0000000..d116a6b --- /dev/null +++ b/src/Year_2015/P10.py @@ -0,0 +1,54 @@ +# --- Day 10: Elves Look, Elves Say --- + +# Today, the Elves are playing a game called look-and-say. They take turns +# making sequences by reading aloud the previous sequence and using that +# reading as the next sequence. For example, 211 is read as "one two, two +# ones", which becomes 1221 (1 2, 2 1s). + +# Look-and-say sequences are generated iteratively, using the previous value as +# input for the next step. For each step, take the previous value, and replace +# each run of digits (like 111) with the number of digits (3) followed by the +# digit itself (1). + +# For example: + +# 1 becomes 11 (1 copy of digit 1). +# 11 becomes 21 (2 copies of digit 1). +# 21 becomes 1211 (one 2 followed by one 1). +# 1211 becomes 111221 (one 1, one 2, and two 1s). +# 111221 becomes 312211 (three 1s, two 2s, and one 1). + +# Starting with the digits in your puzzle input, apply this process 40 times. +# What is the length of the result? + +from itertools import groupby + + +def part_1() -> None: + num = "3113322113" + for _ in range(40): + num = "".join(str(len(list(g))) + k for k, g in groupby(num)) + + print(f"After 40 iterations, the length is {len(num)}") + + +# --- Part Two --- + +# Neat, right? You might also enjoy hearing John Conway talking about this +# sequence (that's Conway of Conway's Game of Life fame). + +# Now, starting again with the digits in your puzzle input, apply this process +# 50 times. What is the length of the new result? + + +def part_2() -> None: + num = "3113322113" + for _ in range(50): + num = "".join(str(len(list(g))) + k for k, g in groupby(num)) + + print(f"After 50 iterations, the length is {len(num)}") + + +if __name__ == "__main__": + part_1() + part_2()