Solution to problem 10 in Python

This commit is contained in:
David Doblas Jiménez 2022-05-04 19:15:30 +02:00
parent ce7d716bb4
commit adc7b01759

54
src/Year_2015/P10.py Normal file
View File

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