|
2 | 2 |
|
3 | 3 |
|
4 | 4 | def part1(): |
5 | | - pass |
| 5 | + lines = """ |
| 6 | + 11-22,95-115,998-1012,1188511880-1188511890,222220-222224, |
| 7 | + 1698522-1698528,446443-446449,38593856-38593862,565653-565659, |
| 8 | + 824824821-824824827,2121212118-2121212124 |
| 9 | + """ |
| 10 | + lines =open('../inputs/day-02.txt', 'r').read().strip() |
| 11 | + # lines |
| 12 | + invalid_ids = [] |
| 13 | + ranges = [r.strip() for r in lines.split(",") if r.strip()] |
| 14 | + for r in ranges: |
| 15 | + start_str, end_str = r.split("-") |
| 16 | + start = int(start_str) |
| 17 | + end = int(end_str) |
| 18 | + for i in range(start, end + 1): |
| 19 | + s = str(i) |
| 20 | + if len(s) % 2 == 0: |
| 21 | + half = len(s) // 2 |
| 22 | + if s[:half] == s[half:]: |
| 23 | + invalid_ids.append(i) |
6 | 24 |
|
| 25 | + # print(f"Part 1: {len(invalid_ids)} invalid IDs") |
| 26 | + # print(f"Invalid IDs: {invalid_ids}") |
| 27 | + print(sum(invalid_ids)) |
| 28 | + |
| 29 | +def is_repeated_substring(substr: str) -> bool: |
| 30 | + n = len(substr) |
| 31 | + for l in range(1, n // 2 + 1): |
| 32 | + if n % l == 0 and substr == substr[:l] * (n // l): |
| 33 | + return True |
| 34 | + return False |
7 | 35 |
|
8 | 36 | def part2(): |
9 | | - pass |
| 37 | + lines = """ |
| 38 | + 11-22,95-115,998-1012,1188511880-1188511890,222220-222224, |
| 39 | + 1698522-1698528,446443-446449,38593856-38593862,565653-565659, |
| 40 | + 824824821-824824827,2121212118-2121212124 |
| 41 | + """ |
| 42 | + lines = open('../inputs/day-02.txt', 'r').read().strip() # lines |
| 43 | + invalid_any = [] |
| 44 | + ranges = [r.strip() for r in lines.split(",") if r.strip()] |
| 45 | + for r in ranges: |
| 46 | + start_str, end_str = r.split("-") |
| 47 | + start = int(start_str) |
| 48 | + end = int(end_str) |
| 49 | + for i in range(start, end + 1): |
| 50 | + substring = str(i) |
| 51 | + if is_repeated_substring(substring): |
| 52 | + invalid_any.append(i) |
| 53 | + |
| 54 | + # print(f"Part 2: {len(invalid_any)} invalid IDs") |
| 55 | + # print(f"Invalid IDs: {invalid_any}") |
| 56 | + print(sum(invalid_any)) |
| 57 | + |
10 | 58 |
|
11 | 59 |
|
12 | 60 | if __name__ == "__main__": |
|
0 commit comments