Compare commits

...

2 Commits

Author SHA1 Message Date
kirbylife ac6abe0ced Day 2 Part 2 2025-12-09 23:04:59 -06:00
kirbylife 6f4c8c010f Day 2 Part 1 2025-12-09 22:40:06 -06:00
1 changed files with 57 additions and 0 deletions

57
day-2/main.py 100644
View File

@ -0,0 +1,57 @@
from typing import Generator
def parse_input() -> list[tuple[int, int]]:
with open("input.txt", "r") as f:
output = []
for case in f.read().split(","):
n1, n2 = map(int, case.split("-"))
output.append((n1, n2))
return output
def part_1():
total = 0
for n1, n2 in parse_input():
for n in range(n1, n2 + 1):
n_str = str(n)
middle = len(n_str) // 2
if len(n_str) % 2 == 0 and len(set(n_str)) == 1:
total += n
elif n_str[:middle] == n_str[middle:]:
total += n
print(total)
def wrap(s: str, n: int) -> Generator[str]:
while s:
yield s[:n]
s = s[n:]
def part_2():
total = 0
for n1, n2 in parse_input():
for n in range(n1, n2 + 1):
n_str = str(n)
len_n = len(n_str)
middle = len_n // 2
for div in range(1, middle + 1):
if len_n % div != 0:
continue
if len(set(wrap(n_str, div))) == 1:
total += n
break
print(total)
def main():
print("Part 1:")
part_1()
print("Part 2:")
part_2()
if __name__ == "__main__":
main()