{ "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 }