Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions inputs/year_2025/02.dat
Original file line number Diff line number Diff line change
@@ -0,0 +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
77 changes: 77 additions & 0 deletions src/advent_of_code/year_2025/day_02.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
from advent_of_code.utils.input_handling import read_input


def parse_input(raw):
raw_split = raw[0].split(",")
return raw_split


def convert_range_string_to_pair(range_string):
range_split = range_string.split("-")
return (int(range_split[0]), int(range_split[1]))


def split_id(id):
id_len = len(str(id))
half_len = id_len // 2
return (id[:half_len], id[half_len:])


def check_id_valid(id):
(id_part_1, id_part_2) = split_id(id)
if id_part_1 == id_part_2:
return False
else:
return True


def get_invalid_ids_in_range(range_pair):
full_range = range(range_pair[0], range_pair[1] + 1)
invalid_ids = []
for x in full_range:
if not check_id_valid(str(x)):
invalid_ids.append(x)
return invalid_ids


def find_invalid_ids_in_range_string(range_string):
range_pair_as_ints = convert_range_string_to_pair(range_string)
invalid_ids_in_range = get_invalid_ids_in_range(range_pair_as_ints)
return invalid_ids_in_range


def find_all_invalid_ids(parsed_input):
invalid_ids = []
for range_pair in parsed_input:
invalid_ids.extend(find_invalid_ids_in_range_string(range_pair))
return invalid_ids


def sum_invalid_ids(invalid_ids):
return sum(invalid_ids)


def solve_part_1(parsed_input):
invalid_ids = find_all_invalid_ids(parsed_input)
return sum_invalid_ids(invalid_ids)


def solve(parsed_input):
part_1_solution = solve_part_1(parsed_input)
part_2_solution = None
return (part_1_solution, part_2_solution)


def main(input_file):
input = read_input(input_file)
parsed_input = parse_input(input)
(result_part_1, result_part_2) = solve(parsed_input)
print(
f"Day 01 \n"
f" Result for part 1 is {result_part_1} \n"
f" Result for part 2 is {result_part_2} \n"
)


if __name__ == "__main__":
main()
80 changes: 80 additions & 0 deletions tests/year_2025/test_day_02.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
import pytest

from advent_of_code.year_2025.day_02 import (
check_id_valid,
convert_range_string_to_pair,
find_invalid_ids_in_range_string,
parse_input,
solve,
sum_invalid_ids,
)


@pytest.mark.parametrize(
"input, expected_output",
[
[
[
"11-22,95-115,998-1012,1188511880-1188511890,222220-222224,1698522-1698528,446443-446449,38593856-38593862,565653-565659,824824821-824824827,2121212118-2121212124" # noqa: E501
],
(1227775554, None),
],
],
)
def test_solver(input, expected_output):
print(f"day_02_test_input:{input}")
input_parsed = parse_input(input)
print(f"input_parsed:{input_parsed}")
result = solve(input_parsed)
assert result == expected_output


@pytest.mark.parametrize(
"input, expected_invalid_ids",
[
["11-22", [11, 22]],
["95-115", [99]],
["998-1012", [1010]],
["1188511880-1188511890", [1188511885]],
["222220-222224", [222222]],
["1698522-1698528", []],
["446443-446449", [446446]],
["38593856-38593862", [38593859]],
["565653-565659", []],
["824824821-824824827", []],
["2121212118-2121212124", []],
],
)
def test_find_invalid_ids_in_range_string(input, expected_invalid_ids):
assert expected_invalid_ids == find_invalid_ids_in_range_string(input)


@pytest.mark.parametrize(
"input, expected_output",
[
([1, 2, 3], 6),
],
)
def test_sum_invalid_ids(input, expected_output):
assert expected_output == sum_invalid_ids(input)


@pytest.mark.parametrize(
"input, expected_pair",
[
("11-22", (11, 22)),
("95-115", (95, 115)),
("998-1012", (998, 1012)),
("1188511880-1188511890", (1188511880, 1188511890)),
],
)
def test_convert_range_string_to_pair(input, expected_pair):
assert expected_pair == convert_range_string_to_pair(input)


@pytest.mark.parametrize(
"input, is_valid",
[("11", False), ("12", True), ("22", False), ("998", True), ("1010", False)],
)
def test_check_id_valid(input, is_valid):
assert is_valid == check_id_valid(input)