diff --git a/2025/02/input.txt b/2025/02/input.txt new file mode 100644 index 0000000..e2a392f --- /dev/null +++ b/2025/02/input.txt @@ -0,0 +1 @@ +2200670-2267527,265-409,38866-50720,7697424-7724736,33303664-33374980,687053-834889,953123-983345,3691832-3890175,26544-37124,7219840722-7219900143,7575626241-7575840141,1-18,1995-2479,101904-163230,97916763-98009247,52011-79060,31-49,4578-6831,3310890-3365637,414256-608125,552-1005,16995-24728,6985-10895,878311-912296,59-93,9978301-10012088,17302200-17437063,1786628373-1786840083,6955834840-6955903320,983351-1034902,842824238-842861540,14027173-14217812 diff --git a/2025/02/solution.py b/2025/02/solution.py new file mode 100755 index 0000000..7b929a8 --- /dev/null +++ b/2025/02/solution.py @@ -0,0 +1,57 @@ +#!/usr/bin/env python3 +import sys +import pathlib + +def read_input(): + path = pathlib.Path(sys.argv[1]) if len(sys.argv) > 1 else pathlib.Path("input.txt") + return path.read_text().replace(",", "\n").rstrip("\n") + +def parse(data): + return data.splitlines() + +def part1(data): + sum=0 + for ids in data: + buf = ids.split("-") + start = int(buf[0]) + end = int(buf[1]) + + for i in range(start, end + 1): + s = str(i) + length = len(s) + if length % 2 == 0: + mid = len(s) // 2 + first = s[:mid] + rest = s[mid:] + if first == rest: + sum += i + return sum + +def part2(data): + sum = 0 + for ids in data: + start, end = map(int, ids.split("-")) + for i in range(start, end + 1): + numstr = str(i) + invalid = False + for c in range(1, len(numstr)//2 + 1): + if len(numstr) % c != 0: + continue + chunks = [numstr[j:j+c] for j in range(0, len(numstr), c)] + if all(chunks[0] == chunks[k] for k in range(1, len(chunks))): + invalid = True + break + if invalid: + sum += i + return sum + +def main(): + raw = read_input() + data = parse(raw) + r1 = part1(data) + r2 = part2(data) + print(r1) + print(r2) + +if __name__ == "__main__": + main()