Files
advent-of-code/2025/day02.py
T
2025-12-06 18:38:28 +01:00

61 lines
1.5 KiB
Python

import time
from aoc import read_lines, read_input
from aoc.helpers import read_lines_and_split
def part1(data):
ids = []
for line in data:
n = line.strip().split("-")
r = range(int(n[0]), int(n[1]) + 1)
for rr in r:
ss = str(rr)
if (len(ss) % 2) == 0:
f = ss[:len(ss)//2]
s = ss[len(ss)//2:]
if f == s:
ids.append(rr)
return sum(ids)
def find_pattern(s):
if len(s) < 2:
return False
n = int(s)
if all_same(n):
print(f"Found pattern: {n}")
return True
for i in range(2, len(s) // 2 + 1):
pattern = s[:i]
repeated = pattern * (len(s) // i)
if str(repeated) == s:
print(f"Found pattern: {pattern} in {s}")
return True
return False
def all_same(n):
return len(set(str(n))) == 1
def part2(data):
ids = []
for line in data:
n = line.strip().split("-")
r = range(int(n[0]), int(n[1]) + 1)
for rr in r:
ss = str(rr)
if find_pattern(ss):
ids.append(rr)
return sum(ids)
if __name__ == "__main__":
data = read_lines_and_split(2, ",")
t0 = time.perf_counter()
p1 = part1(data)
t1 = time.perf_counter()
print(f"Part 1: {p1} ({(t1-t0)*1000:.2f} ms)")
t0 = time.perf_counter()
p2 = part2(data)
t1 = time.perf_counter()
print(f"Part 2: {p2} ({(t1-t0)*1000:.2f} ms)")