Skip to content

Commit cf1fc8d

Browse files
authored
y2025 d2 part 1 (#21)
1 parent 17524e2 commit cf1fc8d

File tree

3 files changed

+158
-0
lines changed

3 files changed

+158
-0
lines changed

inputs/year_2025/02.dat

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
52500467-52574194,655624494-655688785,551225-576932,8418349387-8418411293,678-1464,33-79,74691-118637,8787869169-8787890635,9898977468-9899009083,548472423-548598890,337245835-337375280,482823-543075,926266-991539,1642682920-1642753675,3834997-3940764,1519-2653,39697698-39890329,3-21,3251796-3429874,3467-9298,26220798-26290827,80-124,200638-280634,666386-710754,21329-64315,250-528,9202893-9264498,819775-903385,292490-356024,22-32,2663033-2791382,133-239,56514707-56704320,432810-458773,4949427889-4949576808
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
from advent_of_code.utils.input_handling import read_input
2+
3+
4+
def parse_input(raw):
5+
raw_split = raw[0].split(",")
6+
return raw_split
7+
8+
9+
def convert_range_string_to_pair(range_string):
10+
range_split = range_string.split("-")
11+
return (int(range_split[0]), int(range_split[1]))
12+
13+
14+
def split_id(id):
15+
id_len = len(str(id))
16+
half_len = id_len // 2
17+
return (id[:half_len], id[half_len:])
18+
19+
20+
def check_id_valid(id):
21+
(id_part_1, id_part_2) = split_id(id)
22+
if id_part_1 == id_part_2:
23+
return False
24+
else:
25+
return True
26+
27+
28+
def get_invalid_ids_in_range(range_pair):
29+
full_range = range(range_pair[0], range_pair[1] + 1)
30+
invalid_ids = []
31+
for x in full_range:
32+
if not check_id_valid(str(x)):
33+
invalid_ids.append(x)
34+
return invalid_ids
35+
36+
37+
def find_invalid_ids_in_range_string(range_string):
38+
range_pair_as_ints = convert_range_string_to_pair(range_string)
39+
invalid_ids_in_range = get_invalid_ids_in_range(range_pair_as_ints)
40+
return invalid_ids_in_range
41+
42+
43+
def find_all_invalid_ids(parsed_input):
44+
invalid_ids = []
45+
for range_pair in parsed_input:
46+
invalid_ids.extend(find_invalid_ids_in_range_string(range_pair))
47+
return invalid_ids
48+
49+
50+
def sum_invalid_ids(invalid_ids):
51+
return sum(invalid_ids)
52+
53+
54+
def solve_part_1(parsed_input):
55+
invalid_ids = find_all_invalid_ids(parsed_input)
56+
return sum_invalid_ids(invalid_ids)
57+
58+
59+
def solve(parsed_input):
60+
part_1_solution = solve_part_1(parsed_input)
61+
part_2_solution = None
62+
return (part_1_solution, part_2_solution)
63+
64+
65+
def main(input_file):
66+
input = read_input(input_file)
67+
parsed_input = parse_input(input)
68+
(result_part_1, result_part_2) = solve(parsed_input)
69+
print(
70+
f"Day 01 \n"
71+
f" Result for part 1 is {result_part_1} \n"
72+
f" Result for part 2 is {result_part_2} \n"
73+
)
74+
75+
76+
if __name__ == "__main__":
77+
main()

tests/year_2025/test_day_02.py

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
import pytest
2+
3+
from advent_of_code.year_2025.day_02 import (
4+
check_id_valid,
5+
convert_range_string_to_pair,
6+
find_invalid_ids_in_range_string,
7+
parse_input,
8+
solve,
9+
sum_invalid_ids,
10+
)
11+
12+
13+
@pytest.mark.parametrize(
14+
"input, expected_output",
15+
[
16+
[
17+
[
18+
"11-22,95-115,998-1012,1188511880-1188511890,222220-222224,1698522-1698528,446443-446449,38593856-38593862,565653-565659,824824821-824824827,2121212118-2121212124" # noqa: E501
19+
],
20+
(1227775554, None),
21+
],
22+
],
23+
)
24+
def test_solver(input, expected_output):
25+
print(f"day_02_test_input:{input}")
26+
input_parsed = parse_input(input)
27+
print(f"input_parsed:{input_parsed}")
28+
result = solve(input_parsed)
29+
assert result == expected_output
30+
31+
32+
@pytest.mark.parametrize(
33+
"input, expected_invalid_ids",
34+
[
35+
["11-22", [11, 22]],
36+
["95-115", [99]],
37+
["998-1012", [1010]],
38+
["1188511880-1188511890", [1188511885]],
39+
["222220-222224", [222222]],
40+
["1698522-1698528", []],
41+
["446443-446449", [446446]],
42+
["38593856-38593862", [38593859]],
43+
["565653-565659", []],
44+
["824824821-824824827", []],
45+
["2121212118-2121212124", []],
46+
],
47+
)
48+
def test_find_invalid_ids_in_range_string(input, expected_invalid_ids):
49+
assert expected_invalid_ids == find_invalid_ids_in_range_string(input)
50+
51+
52+
@pytest.mark.parametrize(
53+
"input, expected_output",
54+
[
55+
([1, 2, 3], 6),
56+
],
57+
)
58+
def test_sum_invalid_ids(input, expected_output):
59+
assert expected_output == sum_invalid_ids(input)
60+
61+
62+
@pytest.mark.parametrize(
63+
"input, expected_pair",
64+
[
65+
("11-22", (11, 22)),
66+
("95-115", (95, 115)),
67+
("998-1012", (998, 1012)),
68+
("1188511880-1188511890", (1188511880, 1188511890)),
69+
],
70+
)
71+
def test_convert_range_string_to_pair(input, expected_pair):
72+
assert expected_pair == convert_range_string_to_pair(input)
73+
74+
75+
@pytest.mark.parametrize(
76+
"input, is_valid",
77+
[("11", False), ("12", True), ("22", False), ("998", True), ("1010", False)],
78+
)
79+
def test_check_id_valid(input, is_valid):
80+
assert is_valid == check_id_valid(input)

0 commit comments

Comments
 (0)