Solution to problem 10 in Python
This commit is contained in:
parent
ce7d716bb4
commit
adc7b01759
54
src/Year_2015/P10.py
Normal file
54
src/Year_2015/P10.py
Normal 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()
|
Loading…
x
Reference in New Issue
Block a user