aoc2022/aoc4.ipynb

123 lines
3 KiB
Text

{
"cells": [
{
"cell_type": "markdown",
"id": "298d175e-fe20-4d97-8d3c-5b77b045a33a",
"metadata": {},
"source": [
"### Part 1"
]
},
{
"cell_type": "code",
"execution_count": 18,
"id": "aed8a1d4-93f0-4bb8-9810-a20b1113ff1f",
"metadata": {},
"outputs": [],
"source": [
"def range_contains_range(range1, range2):\n",
" return range1.start in range2 and range1.stop in range2"
]
},
{
"cell_type": "code",
"execution_count": 29,
"id": "2385899f-2a65-467e-8abf-2d7fa90aba84",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"532"
]
},
"execution_count": 29,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"with open(\"aoc4_input.txt\", \"r\") as f:\n",
" fully_contains_count = 0\n",
" for assignment_pair in f:\n",
" match list(map(lambda x: list(map(int, x.split(\"-\"))), assignment_pair.strip().split(\",\"))):\n",
" case [[fa1, fa2], [sa1, sa2]]:\n",
" r1, r2 = range(fa1, fa2), range(sa1, sa2)\n",
" c = int(range_contains_range(r1, range(sa1, sa2+1)) or range_contains_range(r2, range(fa1, fa2+1)))\n",
" fully_contains_count += c\n",
"\n",
"fully_contains_count"
]
},
{
"cell_type": "markdown",
"id": "5886c69c-229a-45f6-b31e-556b55b1bbec",
"metadata": {},
"source": [
"### Part 2"
]
},
{
"cell_type": "code",
"execution_count": 30,
"id": "c567162f-8ef0-47c1-ba17-84bf667b3496",
"metadata": {},
"outputs": [],
"source": [
"def range_overlap_range(range1, range2):\n",
" return range1.start in range2 or range1.stop in range2"
]
},
{
"cell_type": "code",
"execution_count": 31,
"id": "f3142767-65a1-4bf0-a64d-83ef53711e20",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"854"
]
},
"execution_count": 31,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"with open(\"aoc4_input.txt\", \"r\") as f:\n",
" overlapping_ranges_count = 0\n",
" for assignment_pair in f:\n",
" match list(map(lambda x: list(map(int, x.split(\"-\"))), assignment_pair.strip().split(\",\"))):\n",
" case [[fa1, fa2], [sa1, sa2]]:\n",
" r1, r2 = range(fa1, fa2), range(sa1, sa2)\n",
" c = int(range_overlap_range(r1, range(sa1, sa2+1)) or range_overlap_range(r2, range(fa1, fa2+1)))\n",
" overlapping_ranges_count += c\n",
"\n",
"overlapping_ranges_count"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.10.7"
}
},
"nbformat": 4,
"nbformat_minor": 5
}