diff --git a/.gitignore b/.gitignore index 5ceb386..7f93ebf 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ venv +__pycache__ diff --git a/README.md b/README.md index 9f7469c..30f766a 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,36 @@ -# Advent Of Code +# Holt59 - Advent Of Code -To run any script, you need to pipe the input: +Installation (with [`poetry`](https://python-poetry.org/)): ```bash -cat 2022/inputs/day2.txt | python 2022/day2.py +poetry install +``` + +To run any day: + +```bash +holt59-aoc $day +``` + +You can use `-v` / `--verbose` for extra outputs in some case, `-t` / `--test` to run +the code on the test data (one of the test data if multiple are present) or even +`-u XXX` / `--user XXX` to run the code on a specific input after putting the input +file under `src/holt59/aoc/inputs/XXX/$year/$day`. + +Full usage: + +```bash +usage: Holt59 Advent-Of-Code Runner [-h] [-v] [-t] [-u USER] [-i INPUT] [-y YEAR] day + +positional arguments: + day day to run + +options: + -h, --help show this help message and exit + -v, --verbose verbose mode + -t, --test test mode + -u USER, --user USER user input to use + -i INPUT, --input INPUT + input to use (override user and test) + -y YEAR, --year YEAR year to run ``` diff --git a/poetry.lock b/poetry.lock new file mode 100644 index 0000000..329384e --- /dev/null +++ b/poetry.lock @@ -0,0 +1,444 @@ +# This file is automatically @generated by Poetry 1.7.0 and should not be changed by hand. + +[[package]] +name = "black" +version = "23.12.0" +description = "The uncompromising code formatter." +optional = false +python-versions = ">=3.8" +files = [ + {file = "black-23.12.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:67f19562d367468ab59bd6c36a72b2c84bc2f16b59788690e02bbcb140a77175"}, + {file = "black-23.12.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:bbd75d9f28a7283b7426160ca21c5bd640ca7cd8ef6630b4754b6df9e2da8462"}, + {file = "black-23.12.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:593596f699ca2dcbbbdfa59fcda7d8ad6604370c10228223cd6cf6ce1ce7ed7e"}, + {file = "black-23.12.0-cp310-cp310-win_amd64.whl", hash = "sha256:12d5f10cce8dc27202e9a252acd1c9a426c83f95496c959406c96b785a92bb7d"}, + {file = "black-23.12.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e73c5e3d37e5a3513d16b33305713237a234396ae56769b839d7c40759b8a41c"}, + {file = "black-23.12.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ba09cae1657c4f8a8c9ff6cfd4a6baaf915bb4ef7d03acffe6a2f6585fa1bd01"}, + {file = "black-23.12.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ace64c1a349c162d6da3cef91e3b0e78c4fc596ffde9413efa0525456148873d"}, + {file = "black-23.12.0-cp311-cp311-win_amd64.whl", hash = "sha256:72db37a2266b16d256b3ea88b9affcdd5c41a74db551ec3dd4609a59c17d25bf"}, + {file = "black-23.12.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:fdf6f23c83078a6c8da2442f4d4eeb19c28ac2a6416da7671b72f0295c4a697b"}, + {file = "black-23.12.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:39dda060b9b395a6b7bf9c5db28ac87b3c3f48d4fdff470fa8a94ab8271da47e"}, + {file = "black-23.12.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7231670266ca5191a76cb838185d9be59cfa4f5dd401b7c1c70b993c58f6b1b5"}, + {file = "black-23.12.0-cp312-cp312-win_amd64.whl", hash = "sha256:193946e634e80bfb3aec41830f5d7431f8dd5b20d11d89be14b84a97c6b8bc75"}, + {file = "black-23.12.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:bcf91b01ddd91a2fed9a8006d7baa94ccefe7e518556470cf40213bd3d44bbbc"}, + {file = "black-23.12.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:996650a89fe5892714ea4ea87bc45e41a59a1e01675c42c433a35b490e5aa3f0"}, + {file = "black-23.12.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bdbff34c487239a63d86db0c9385b27cdd68b1bfa4e706aa74bb94a435403672"}, + {file = "black-23.12.0-cp38-cp38-win_amd64.whl", hash = "sha256:97af22278043a6a1272daca10a6f4d36c04dfa77e61cbaaf4482e08f3640e9f0"}, + {file = "black-23.12.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ead25c273adfad1095a8ad32afdb8304933efba56e3c1d31b0fee4143a1e424a"}, + {file = "black-23.12.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c71048345bdbced456cddf1622832276d98a710196b842407840ae8055ade6ee"}, + {file = "black-23.12.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:81a832b6e00eef2c13b3239d514ea3b7d5cc3eaa03d0474eedcbbda59441ba5d"}, + {file = "black-23.12.0-cp39-cp39-win_amd64.whl", hash = "sha256:6a82a711d13e61840fb11a6dfecc7287f2424f1ca34765e70c909a35ffa7fb95"}, + {file = "black-23.12.0-py3-none-any.whl", hash = "sha256:a7c07db8200b5315dc07e331dda4d889a56f6bf4db6a9c2a526fa3166a81614f"}, + {file = "black-23.12.0.tar.gz", hash = "sha256:330a327b422aca0634ecd115985c1c7fd7bdb5b5a2ef8aa9888a82e2ebe9437a"}, +] + +[package.dependencies] +click = ">=8.0.0" +mypy-extensions = ">=0.4.3" +packaging = ">=22.0" +pathspec = ">=0.9.0" +platformdirs = ">=2" +tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} +typing-extensions = {version = ">=4.0.1", markers = "python_version < \"3.11\""} + +[package.extras] +colorama = ["colorama (>=0.4.3)"] +d = ["aiohttp (>=3.7.4)", "aiohttp (>=3.7.4,!=3.9.0)"] +jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] +uvloop = ["uvloop (>=0.15.2)"] + +[[package]] +name = "click" +version = "8.1.7" +description = "Composable command line interface toolkit" +optional = false +python-versions = ">=3.7" +files = [ + {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, + {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} + +[[package]] +name = "colorama" +version = "0.4.6" +description = "Cross-platform colored terminal text." +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +files = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] + +[[package]] +name = "flake8" +version = "6.1.0" +description = "the modular source code checker: pep8 pyflakes and co" +optional = false +python-versions = ">=3.8.1" +files = [ + {file = "flake8-6.1.0-py2.py3-none-any.whl", hash = "sha256:ffdfce58ea94c6580c77888a86506937f9a1a227dfcd15f245d694ae20a6b6e5"}, + {file = "flake8-6.1.0.tar.gz", hash = "sha256:d5b3857f07c030bdb5bf41c7f53799571d75c4491748a3adcd47de929e34cd23"}, +] + +[package.dependencies] +mccabe = ">=0.7.0,<0.8.0" +pycodestyle = ">=2.11.0,<2.12.0" +pyflakes = ">=3.1.0,<3.2.0" + +[[package]] +name = "flake8-black" +version = "0.3.6" +description = "flake8 plugin to call black as a code style validator" +optional = false +python-versions = ">=3.7" +files = [ + {file = "flake8-black-0.3.6.tar.gz", hash = "sha256:0dfbca3274777792a5bcb2af887a4cad72c72d0e86c94e08e3a3de151bb41c34"}, + {file = "flake8_black-0.3.6-py3-none-any.whl", hash = "sha256:fe8ea2eca98d8a504f22040d9117347f6b367458366952862ac3586e7d4eeaca"}, +] + +[package.dependencies] +black = ">=22.1.0" +flake8 = ">=3" +tomli = {version = "*", markers = "python_version < \"3.11\""} + +[package.extras] +develop = ["build", "twine"] + +[[package]] +name = "isort" +version = "5.13.2" +description = "A Python utility / library to sort Python imports." +optional = false +python-versions = ">=3.8.0" +files = [ + {file = "isort-5.13.2-py3-none-any.whl", hash = "sha256:8ca5e72a8d85860d5a3fa69b8745237f2939afe12dbf656afbcb47fe72d947a6"}, + {file = "isort-5.13.2.tar.gz", hash = "sha256:48fdfcb9face5d58a4f6dde2e72a1fb8dcaf8ab26f95ab49fab84c2ddefb0109"}, +] + +[package.extras] +colors = ["colorama (>=0.4.6)"] + +[[package]] +name = "mccabe" +version = "0.7.0" +description = "McCabe checker, plugin for flake8" +optional = false +python-versions = ">=3.6" +files = [ + {file = "mccabe-0.7.0-py2.py3-none-any.whl", hash = "sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e"}, + {file = "mccabe-0.7.0.tar.gz", hash = "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325"}, +] + +[[package]] +name = "mypy" +version = "1.7.1" +description = "Optional static typing for Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "mypy-1.7.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:12cce78e329838d70a204293e7b29af9faa3ab14899aec397798a4b41be7f340"}, + {file = "mypy-1.7.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1484b8fa2c10adf4474f016e09d7a159602f3239075c7bf9f1627f5acf40ad49"}, + {file = "mypy-1.7.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:31902408f4bf54108bbfb2e35369877c01c95adc6192958684473658c322c8a5"}, + {file = "mypy-1.7.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f2c2521a8e4d6d769e3234350ba7b65ff5d527137cdcde13ff4d99114b0c8e7d"}, + {file = "mypy-1.7.1-cp310-cp310-win_amd64.whl", hash = "sha256:fcd2572dd4519e8a6642b733cd3a8cfc1ef94bafd0c1ceed9c94fe736cb65b6a"}, + {file = "mypy-1.7.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4b901927f16224d0d143b925ce9a4e6b3a758010673eeded9b748f250cf4e8f7"}, + {file = "mypy-1.7.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2f7f6985d05a4e3ce8255396df363046c28bea790e40617654e91ed580ca7c51"}, + {file = "mypy-1.7.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:944bdc21ebd620eafefc090cdf83158393ec2b1391578359776c00de00e8907a"}, + {file = "mypy-1.7.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9c7ac372232c928fff0645d85f273a726970c014749b924ce5710d7d89763a28"}, + {file = "mypy-1.7.1-cp311-cp311-win_amd64.whl", hash = "sha256:f6efc9bd72258f89a3816e3a98c09d36f079c223aa345c659622f056b760ab42"}, + {file = "mypy-1.7.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:6dbdec441c60699288adf051f51a5d512b0d818526d1dcfff5a41f8cd8b4aaf1"}, + {file = "mypy-1.7.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4fc3d14ee80cd22367caaaf6e014494415bf440980a3045bf5045b525680ac33"}, + {file = "mypy-1.7.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2c6e4464ed5f01dc44dc9821caf67b60a4e5c3b04278286a85c067010653a0eb"}, + {file = "mypy-1.7.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:d9b338c19fa2412f76e17525c1b4f2c687a55b156320acb588df79f2e6fa9fea"}, + {file = "mypy-1.7.1-cp312-cp312-win_amd64.whl", hash = "sha256:204e0d6de5fd2317394a4eff62065614c4892d5a4d1a7ee55b765d7a3d9e3f82"}, + {file = "mypy-1.7.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:84860e06ba363d9c0eeabd45ac0fde4b903ad7aa4f93cd8b648385a888e23200"}, + {file = "mypy-1.7.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:8c5091ebd294f7628eb25ea554852a52058ac81472c921150e3a61cdd68f75a7"}, + {file = "mypy-1.7.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40716d1f821b89838589e5b3106ebbc23636ffdef5abc31f7cd0266db936067e"}, + {file = "mypy-1.7.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5cf3f0c5ac72139797953bd50bc6c95ac13075e62dbfcc923571180bebb662e9"}, + {file = "mypy-1.7.1-cp38-cp38-win_amd64.whl", hash = "sha256:78e25b2fd6cbb55ddfb8058417df193f0129cad5f4ee75d1502248e588d9e0d7"}, + {file = "mypy-1.7.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:75c4d2a6effd015786c87774e04331b6da863fc3fc4e8adfc3b40aa55ab516fe"}, + {file = "mypy-1.7.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2643d145af5292ee956aa0a83c2ce1038a3bdb26e033dadeb2f7066fb0c9abce"}, + {file = "mypy-1.7.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75aa828610b67462ffe3057d4d8a4112105ed211596b750b53cbfe182f44777a"}, + {file = "mypy-1.7.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ee5d62d28b854eb61889cde4e1dbc10fbaa5560cb39780c3995f6737f7e82120"}, + {file = "mypy-1.7.1-cp39-cp39-win_amd64.whl", hash = "sha256:72cf32ce7dd3562373f78bd751f73c96cfb441de147cc2448a92c1a308bd0ca6"}, + {file = "mypy-1.7.1-py3-none-any.whl", hash = "sha256:f7c5d642db47376a0cc130f0de6d055056e010debdaf0707cd2b0fc7e7ef30ea"}, + {file = "mypy-1.7.1.tar.gz", hash = "sha256:fcb6d9afb1b6208b4c712af0dafdc650f518836065df0d4fb1d800f5d6773db2"}, +] + +[package.dependencies] +mypy-extensions = ">=1.0.0" +tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} +typing-extensions = ">=4.1.0" + +[package.extras] +dmypy = ["psutil (>=4.0)"] +install-types = ["pip"] +mypyc = ["setuptools (>=50)"] +reports = ["lxml"] + +[[package]] +name = "mypy-extensions" +version = "1.0.0" +description = "Type system extensions for programs checked with the mypy type checker." +optional = false +python-versions = ">=3.5" +files = [ + {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, + {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, +] + +[[package]] +name = "nodeenv" +version = "1.8.0" +description = "Node.js virtual environment builder" +optional = false +python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*" +files = [ + {file = "nodeenv-1.8.0-py2.py3-none-any.whl", hash = "sha256:df865724bb3c3adc86b3876fa209771517b0cfe596beff01a92700e0e8be4cec"}, + {file = "nodeenv-1.8.0.tar.gz", hash = "sha256:d51e0c37e64fbf47d017feac3145cdbb58836d7eee8c6f6d3b6880c5456227d2"}, +] + +[package.dependencies] +setuptools = "*" + +[[package]] +name = "numpy" +version = "1.26.2" +description = "Fundamental package for array computing in Python" +optional = false +python-versions = ">=3.9" +files = [ + {file = "numpy-1.26.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:3703fc9258a4a122d17043e57b35e5ef1c5a5837c3db8be396c82e04c1cf9b0f"}, + {file = "numpy-1.26.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:cc392fdcbd21d4be6ae1bb4475a03ce3b025cd49a9be5345d76d7585aea69440"}, + {file = "numpy-1.26.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:36340109af8da8805d8851ef1d74761b3b88e81a9bd80b290bbfed61bd2b4f75"}, + {file = "numpy-1.26.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bcc008217145b3d77abd3e4d5ef586e3bdfba8fe17940769f8aa09b99e856c00"}, + {file = "numpy-1.26.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:3ced40d4e9e18242f70dd02d739e44698df3dcb010d31f495ff00a31ef6014fe"}, + {file = "numpy-1.26.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b272d4cecc32c9e19911891446b72e986157e6a1809b7b56518b4f3755267523"}, + {file = "numpy-1.26.2-cp310-cp310-win32.whl", hash = "sha256:22f8fc02fdbc829e7a8c578dd8d2e15a9074b630d4da29cda483337e300e3ee9"}, + {file = "numpy-1.26.2-cp310-cp310-win_amd64.whl", hash = "sha256:26c9d33f8e8b846d5a65dd068c14e04018d05533b348d9eaeef6c1bd787f9919"}, + {file = "numpy-1.26.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b96e7b9c624ef3ae2ae0e04fa9b460f6b9f17ad8b4bec6d7756510f1f6c0c841"}, + {file = "numpy-1.26.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:aa18428111fb9a591d7a9cc1b48150097ba6a7e8299fb56bdf574df650e7d1f1"}, + {file = "numpy-1.26.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:06fa1ed84aa60ea6ef9f91ba57b5ed963c3729534e6e54055fc151fad0423f0a"}, + {file = "numpy-1.26.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:96ca5482c3dbdd051bcd1fce8034603d6ebfc125a7bd59f55b40d8f5d246832b"}, + {file = "numpy-1.26.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:854ab91a2906ef29dc3925a064fcd365c7b4da743f84b123002f6139bcb3f8a7"}, + {file = "numpy-1.26.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f43740ab089277d403aa07567be138fc2a89d4d9892d113b76153e0e412409f8"}, + {file = "numpy-1.26.2-cp311-cp311-win32.whl", hash = "sha256:a2bbc29fcb1771cd7b7425f98b05307776a6baf43035d3b80c4b0f29e9545186"}, + {file = "numpy-1.26.2-cp311-cp311-win_amd64.whl", hash = "sha256:2b3fca8a5b00184828d12b073af4d0fc5fdd94b1632c2477526f6bd7842d700d"}, + {file = "numpy-1.26.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:a4cd6ed4a339c21f1d1b0fdf13426cb3b284555c27ac2f156dfdaaa7e16bfab0"}, + {file = "numpy-1.26.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5d5244aabd6ed7f312268b9247be47343a654ebea52a60f002dc70c769048e75"}, + {file = "numpy-1.26.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6a3cdb4d9c70e6b8c0814239ead47da00934666f668426fc6e94cce869e13fd7"}, + {file = "numpy-1.26.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa317b2325f7aa0a9471663e6093c210cb2ae9c0ad824732b307d2c51983d5b6"}, + {file = "numpy-1.26.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:174a8880739c16c925799c018f3f55b8130c1f7c8e75ab0a6fa9d41cab092fd6"}, + {file = "numpy-1.26.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:f79b231bf5c16b1f39c7f4875e1ded36abee1591e98742b05d8a0fb55d8a3eec"}, + {file = "numpy-1.26.2-cp312-cp312-win32.whl", hash = "sha256:4a06263321dfd3598cacb252f51e521a8cb4b6df471bb12a7ee5cbab20ea9167"}, + {file = "numpy-1.26.2-cp312-cp312-win_amd64.whl", hash = "sha256:b04f5dc6b3efdaab541f7857351aac359e6ae3c126e2edb376929bd3b7f92d7e"}, + {file = "numpy-1.26.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4eb8df4bf8d3d90d091e0146f6c28492b0be84da3e409ebef54349f71ed271ef"}, + {file = "numpy-1.26.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1a13860fdcd95de7cf58bd6f8bc5a5ef81c0b0625eb2c9a783948847abbef2c2"}, + {file = "numpy-1.26.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:64308ebc366a8ed63fd0bf426b6a9468060962f1a4339ab1074c228fa6ade8e3"}, + {file = "numpy-1.26.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baf8aab04a2c0e859da118f0b38617e5ee65d75b83795055fb66c0d5e9e9b818"}, + {file = "numpy-1.26.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d73a3abcac238250091b11caef9ad12413dab01669511779bc9b29261dd50210"}, + {file = "numpy-1.26.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b361d369fc7e5e1714cf827b731ca32bff8d411212fccd29ad98ad622449cc36"}, + {file = "numpy-1.26.2-cp39-cp39-win32.whl", hash = "sha256:bd3f0091e845164a20bd5a326860c840fe2af79fa12e0469a12768a3ec578d80"}, + {file = "numpy-1.26.2-cp39-cp39-win_amd64.whl", hash = "sha256:2beef57fb031dcc0dc8fa4fe297a742027b954949cabb52a2a376c144e5e6060"}, + {file = "numpy-1.26.2-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:1cc3d5029a30fb5f06704ad6b23b35e11309491c999838c31f124fee32107c79"}, + {file = "numpy-1.26.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94cc3c222bb9fb5a12e334d0479b97bb2df446fbe622b470928f5284ffca3f8d"}, + {file = "numpy-1.26.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:fe6b44fb8fcdf7eda4ef4461b97b3f63c466b27ab151bec2366db8b197387841"}, + {file = "numpy-1.26.2.tar.gz", hash = "sha256:f65738447676ab5777f11e6bbbdb8ce11b785e105f690bc45966574816b6d3ea"}, +] + +[[package]] +name = "packaging" +version = "23.2" +description = "Core utilities for Python packages" +optional = false +python-versions = ">=3.7" +files = [ + {file = "packaging-23.2-py3-none-any.whl", hash = "sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7"}, + {file = "packaging-23.2.tar.gz", hash = "sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5"}, +] + +[[package]] +name = "pastel" +version = "0.2.1" +description = "Bring colors to your terminal." +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "pastel-0.2.1-py2.py3-none-any.whl", hash = "sha256:4349225fcdf6c2bb34d483e523475de5bb04a5c10ef711263452cb37d7dd4364"}, + {file = "pastel-0.2.1.tar.gz", hash = "sha256:e6581ac04e973cac858828c6202c1e1e81fee1dc7de7683f3e1ffe0bfd8a573d"}, +] + +[[package]] +name = "pathspec" +version = "0.12.1" +description = "Utility library for gitignore style pattern matching of file paths." +optional = false +python-versions = ">=3.8" +files = [ + {file = "pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08"}, + {file = "pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712"}, +] + +[[package]] +name = "platformdirs" +version = "4.1.0" +description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." +optional = false +python-versions = ">=3.8" +files = [ + {file = "platformdirs-4.1.0-py3-none-any.whl", hash = "sha256:11c8f37bcca40db96d8144522d925583bdb7a31f7b0e37e3ed4318400a8e2380"}, + {file = "platformdirs-4.1.0.tar.gz", hash = "sha256:906d548203468492d432bcb294d4bc2fff751bf84971fbb2c10918cc206ee420"}, +] + +[package.extras] +docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.1)", "sphinx-autodoc-typehints (>=1.24)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4)", "pytest-cov (>=4.1)", "pytest-mock (>=3.11.1)"] + +[[package]] +name = "poethepoet" +version = "0.24.4" +description = "A task runner that works well with poetry." +optional = false +python-versions = ">=3.8" +files = [ + {file = "poethepoet-0.24.4-py3-none-any.whl", hash = "sha256:fb4ea35d7f40fe2081ea917d2e4102e2310fda2cde78974050ca83896e229075"}, + {file = "poethepoet-0.24.4.tar.gz", hash = "sha256:ff4220843a87c888cbcb5312c8905214701d0af60ac7271795baa8369b428fef"}, +] + +[package.dependencies] +pastel = ">=0.2.1,<0.3.0" +tomli = ">=1.2.2" + +[package.extras] +poetry-plugin = ["poetry (>=1.0,<2.0)"] + +[[package]] +name = "pycodestyle" +version = "2.11.1" +description = "Python style guide checker" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pycodestyle-2.11.1-py2.py3-none-any.whl", hash = "sha256:44fe31000b2d866f2e41841b18528a505fbd7fef9017b04eff4e2648a0fadc67"}, + {file = "pycodestyle-2.11.1.tar.gz", hash = "sha256:41ba0e7afc9752dfb53ced5489e89f8186be00e599e712660695b7a75ff2663f"}, +] + +[[package]] +name = "pyflakes" +version = "3.1.0" +description = "passive checker of Python programs" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyflakes-3.1.0-py2.py3-none-any.whl", hash = "sha256:4132f6d49cb4dae6819e5379898f2b8cce3c5f23994194c24b77d5da2e36f774"}, + {file = "pyflakes-3.1.0.tar.gz", hash = "sha256:a0aae034c444db0071aa077972ba4768d40c830d9539fd45bf4cd3f8f6992efc"}, +] + +[[package]] +name = "pyright" +version = "1.1.341" +description = "Command line wrapper for pyright" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pyright-1.1.341-py3-none-any.whl", hash = "sha256:f5800daf9d5780ebf6c6e04064a6d20da99c0ef16efd77526f83cc8d8551ff9f"}, + {file = "pyright-1.1.341.tar.gz", hash = "sha256:b891721f3abd10635cc4fd3076bcff5b7676567dc3a629997ed59a0d30034a87"}, +] + +[package.dependencies] +nodeenv = ">=1.6.0" + +[package.extras] +all = ["twine (>=3.4.1)"] +dev = ["twine (>=3.4.1)"] + +[[package]] +name = "ruff" +version = "0.1.8" +description = "An extremely fast Python linter and code formatter, written in Rust." +optional = false +python-versions = ">=3.7" +files = [ + {file = "ruff-0.1.8-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:7de792582f6e490ae6aef36a58d85df9f7a0cfd1b0d4fe6b4fb51803a3ac96fa"}, + {file = "ruff-0.1.8-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:c8e3255afd186c142eef4ec400d7826134f028a85da2146102a1172ecc7c3696"}, + {file = "ruff-0.1.8-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ff78a7583020da124dd0deb835ece1d87bb91762d40c514ee9b67a087940528b"}, + {file = "ruff-0.1.8-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bd8ee69b02e7bdefe1e5da2d5b6eaaddcf4f90859f00281b2333c0e3a0cc9cd6"}, + {file = "ruff-0.1.8-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a05b0ddd7ea25495e4115a43125e8a7ebed0aa043c3d432de7e7d6e8e8cd6448"}, + {file = "ruff-0.1.8-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:e6f08ca730f4dc1b76b473bdf30b1b37d42da379202a059eae54ec7fc1fbcfed"}, + {file = "ruff-0.1.8-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f35960b02df6b827c1b903091bb14f4b003f6cf102705efc4ce78132a0aa5af3"}, + {file = "ruff-0.1.8-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7d076717c67b34c162da7c1a5bda16ffc205e0e0072c03745275e7eab888719f"}, + {file = "ruff-0.1.8-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b6a21ab023124eafb7cef6d038f835cb1155cd5ea798edd8d9eb2f8b84be07d9"}, + {file = "ruff-0.1.8-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:ce697c463458555027dfb194cb96d26608abab920fa85213deb5edf26e026664"}, + {file = "ruff-0.1.8-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:db6cedd9ffed55548ab313ad718bc34582d394e27a7875b4b952c2d29c001b26"}, + {file = "ruff-0.1.8-py3-none-musllinux_1_2_i686.whl", hash = "sha256:05ffe9dbd278965271252704eddb97b4384bf58b971054d517decfbf8c523f05"}, + {file = "ruff-0.1.8-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:5daaeaf00ae3c1efec9742ff294b06c3a2a9db8d3db51ee4851c12ad385cda30"}, + {file = "ruff-0.1.8-py3-none-win32.whl", hash = "sha256:e49fbdfe257fa41e5c9e13c79b9e79a23a79bd0e40b9314bc53840f520c2c0b3"}, + {file = "ruff-0.1.8-py3-none-win_amd64.whl", hash = "sha256:f41f692f1691ad87f51708b823af4bb2c5c87c9248ddd3191c8f088e66ce590a"}, + {file = "ruff-0.1.8-py3-none-win_arm64.whl", hash = "sha256:aa8ee4f8440023b0a6c3707f76cadce8657553655dcbb5fc9b2f9bb9bee389f6"}, + {file = "ruff-0.1.8.tar.gz", hash = "sha256:f7ee467677467526cfe135eab86a40a0e8db43117936ac4f9b469ce9cdb3fb62"}, +] + +[[package]] +name = "setuptools" +version = "69.0.2" +description = "Easily download, build, install, upgrade, and uninstall Python packages" +optional = false +python-versions = ">=3.8" +files = [ + {file = "setuptools-69.0.2-py3-none-any.whl", hash = "sha256:1e8fdff6797d3865f37397be788a4e3cba233608e9b509382a2777d25ebde7f2"}, + {file = "setuptools-69.0.2.tar.gz", hash = "sha256:735896e78a4742605974de002ac60562d286fa8051a7e2299445e8e8fbb01aa6"}, +] + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] +testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] +testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.1)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] + +[[package]] +name = "tomli" +version = "2.0.1" +description = "A lil' TOML parser" +optional = false +python-versions = ">=3.7" +files = [ + {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, + {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, +] + +[[package]] +name = "tqdm" +version = "4.66.1" +description = "Fast, Extensible Progress Meter" +optional = false +python-versions = ">=3.7" +files = [ + {file = "tqdm-4.66.1-py3-none-any.whl", hash = "sha256:d302b3c5b53d47bce91fea46679d9c3c6508cf6332229aa1e7d8653723793386"}, + {file = "tqdm-4.66.1.tar.gz", hash = "sha256:d88e651f9db8d8551a62556d3cff9e3034274ca5d66e93197cf2490e2dcb69c7"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} + +[package.extras] +dev = ["pytest (>=6)", "pytest-cov", "pytest-timeout", "pytest-xdist"] +notebook = ["ipywidgets (>=6)"] +slack = ["slack-sdk"] +telegram = ["requests"] + +[[package]] +name = "typing-extensions" +version = "4.9.0" +description = "Backported and Experimental Type Hints for Python 3.8+" +optional = false +python-versions = ">=3.8" +files = [ + {file = "typing_extensions-4.9.0-py3-none-any.whl", hash = "sha256:af72aea155e91adfc61c3ae9e0e342dbc0cba726d6cba4b6c72c1f34e47291cd"}, + {file = "typing_extensions-4.9.0.tar.gz", hash = "sha256:23478f88c37f27d76ac8aee6c905017a143b0b1b886c3c9f66bc2fd94f9f5783"}, +] + +[metadata] +lock-version = "2.0" +python-versions = "^3.10" +content-hash = "521c6aaa6b475990a5eaaf354b2104231c9c1d8a50be79bb9d5be4e63eb9aefd" diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..98fc71e --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,45 @@ +[tool.poetry] +name = "holt59-advent-of-code" +version = "0.1.0" +description = "" +authors = ["Mikael CAPELLE "] +license = "MIT" +readme = "README.md" +packages = [{ include = "holt59", from = "src" }] + +[tool.poetry.dependencies] +python = "^3.10" +numpy = "^1.26.2" +tqdm = "^4.66.1" + +[tool.poetry.scripts] +holt59-aoc = "holt59.aoc.__main__:main" + +[tool.poe.tasks] +lint-black = "black --check --diff src tests typings" +lint-isort = "isort -c src tests typings" +lint-ruff = "ruff src tests typings" +lint-flake8 = "flake8 src tests typings" +lint-pyright = "pyright src tests" +lint-all.sequence = [ + "lint-black", + "lint-isort", + "lint-flake8", + "lint-ruff", + "lint-pyright", +] +lint-all.ignore_fail = "return_non_zero" + +[tool.poetry.group.dev.dependencies] +flake8 = "^6.1.0" +flake8-black = "^0.3.6" +black = "^23.12.0" +pyright = "^1.1.341" +mypy = "^1.7.1" +isort = "^5.13.2" +ruff = "^0.1.8" +poethepoet = "^0.24.4" + +[build-system] +requires = ["poetry-core"] +build-backend = "poetry.core.masonry.api" diff --git a/2021/inputs/day10.txt b/src/holt59/aoc/2021/__init__.py similarity index 100% rename from 2021/inputs/day10.txt rename to src/holt59/aoc/2021/__init__.py diff --git a/2021/day1.py b/src/holt59/aoc/2021/day1.py similarity index 100% rename from 2021/day1.py rename to src/holt59/aoc/2021/day1.py diff --git a/2021/day10.py b/src/holt59/aoc/2021/day10.py similarity index 100% rename from 2021/day10.py rename to src/holt59/aoc/2021/day10.py diff --git a/2021/day11.py b/src/holt59/aoc/2021/day11.py similarity index 100% rename from 2021/day11.py rename to src/holt59/aoc/2021/day11.py diff --git a/2021/day12.py b/src/holt59/aoc/2021/day12.py similarity index 100% rename from 2021/day12.py rename to src/holt59/aoc/2021/day12.py diff --git a/2021/day13.py b/src/holt59/aoc/2021/day13.py similarity index 100% rename from 2021/day13.py rename to src/holt59/aoc/2021/day13.py diff --git a/2021/day14.py b/src/holt59/aoc/2021/day14.py similarity index 100% rename from 2021/day14.py rename to src/holt59/aoc/2021/day14.py diff --git a/2021/day15.py b/src/holt59/aoc/2021/day15.py similarity index 100% rename from 2021/day15.py rename to src/holt59/aoc/2021/day15.py diff --git a/2021/day16.py b/src/holt59/aoc/2021/day16.py similarity index 100% rename from 2021/day16.py rename to src/holt59/aoc/2021/day16.py diff --git a/2021/day17.py b/src/holt59/aoc/2021/day17.py similarity index 100% rename from 2021/day17.py rename to src/holt59/aoc/2021/day17.py diff --git a/2021/day18.py b/src/holt59/aoc/2021/day18.py similarity index 100% rename from 2021/day18.py rename to src/holt59/aoc/2021/day18.py diff --git a/2021/day19.py b/src/holt59/aoc/2021/day19.py similarity index 100% rename from 2021/day19.py rename to src/holt59/aoc/2021/day19.py diff --git a/2021/day2.py b/src/holt59/aoc/2021/day2.py similarity index 100% rename from 2021/day2.py rename to src/holt59/aoc/2021/day2.py diff --git a/2021/day20.py b/src/holt59/aoc/2021/day20.py similarity index 100% rename from 2021/day20.py rename to src/holt59/aoc/2021/day20.py diff --git a/2021/day21.py b/src/holt59/aoc/2021/day21.py similarity index 100% rename from 2021/day21.py rename to src/holt59/aoc/2021/day21.py diff --git a/2021/day22.py b/src/holt59/aoc/2021/day22.py similarity index 100% rename from 2021/day22.py rename to src/holt59/aoc/2021/day22.py diff --git a/2021/day23.py b/src/holt59/aoc/2021/day23.py similarity index 100% rename from 2021/day23.py rename to src/holt59/aoc/2021/day23.py diff --git a/2021/day24.py b/src/holt59/aoc/2021/day24.py similarity index 100% rename from 2021/day24.py rename to src/holt59/aoc/2021/day24.py diff --git a/2021/day25.py b/src/holt59/aoc/2021/day25.py similarity index 100% rename from 2021/day25.py rename to src/holt59/aoc/2021/day25.py diff --git a/2021/day3.py b/src/holt59/aoc/2021/day3.py similarity index 100% rename from 2021/day3.py rename to src/holt59/aoc/2021/day3.py diff --git a/2021/day4.py b/src/holt59/aoc/2021/day4.py similarity index 100% rename from 2021/day4.py rename to src/holt59/aoc/2021/day4.py diff --git a/2021/day5.py b/src/holt59/aoc/2021/day5.py similarity index 100% rename from 2021/day5.py rename to src/holt59/aoc/2021/day5.py diff --git a/2021/day6.py b/src/holt59/aoc/2021/day6.py similarity index 100% rename from 2021/day6.py rename to src/holt59/aoc/2021/day6.py diff --git a/2021/day7.py b/src/holt59/aoc/2021/day7.py similarity index 100% rename from 2021/day7.py rename to src/holt59/aoc/2021/day7.py diff --git a/2021/day8.py b/src/holt59/aoc/2021/day8.py similarity index 100% rename from 2021/day8.py rename to src/holt59/aoc/2021/day8.py diff --git a/2021/day9.py b/src/holt59/aoc/2021/day9.py similarity index 100% rename from 2021/day9.py rename to src/holt59/aoc/2021/day9.py diff --git a/2021/inputs/day11.txt b/src/holt59/aoc/2022/__init__.py similarity index 100% rename from 2021/inputs/day11.txt rename to src/holt59/aoc/2022/__init__.py diff --git a/2022/day1.py b/src/holt59/aoc/2022/day1.py similarity index 100% rename from 2022/day1.py rename to src/holt59/aoc/2022/day1.py diff --git a/2022/day10.py b/src/holt59/aoc/2022/day10.py similarity index 100% rename from 2022/day10.py rename to src/holt59/aoc/2022/day10.py diff --git a/2022/day11.py b/src/holt59/aoc/2022/day11.py similarity index 100% rename from 2022/day11.py rename to src/holt59/aoc/2022/day11.py diff --git a/2022/day12.py b/src/holt59/aoc/2022/day12.py similarity index 100% rename from 2022/day12.py rename to src/holt59/aoc/2022/day12.py diff --git a/2022/day13.py b/src/holt59/aoc/2022/day13.py similarity index 100% rename from 2022/day13.py rename to src/holt59/aoc/2022/day13.py diff --git a/2022/day14.py b/src/holt59/aoc/2022/day14.py similarity index 100% rename from 2022/day14.py rename to src/holt59/aoc/2022/day14.py diff --git a/2022/day15.py b/src/holt59/aoc/2022/day15.py similarity index 100% rename from 2022/day15.py rename to src/holt59/aoc/2022/day15.py diff --git a/2022/day16.py b/src/holt59/aoc/2022/day16.py similarity index 100% rename from 2022/day16.py rename to src/holt59/aoc/2022/day16.py diff --git a/2022/day17.py b/src/holt59/aoc/2022/day17.py similarity index 100% rename from 2022/day17.py rename to src/holt59/aoc/2022/day17.py diff --git a/2022/day18.py b/src/holt59/aoc/2022/day18.py similarity index 100% rename from 2022/day18.py rename to src/holt59/aoc/2022/day18.py diff --git a/2022/day19.py b/src/holt59/aoc/2022/day19.py similarity index 100% rename from 2022/day19.py rename to src/holt59/aoc/2022/day19.py diff --git a/2022/day2.py b/src/holt59/aoc/2022/day2.py similarity index 100% rename from 2022/day2.py rename to src/holt59/aoc/2022/day2.py diff --git a/2022/day20.py b/src/holt59/aoc/2022/day20.py similarity index 100% rename from 2022/day20.py rename to src/holt59/aoc/2022/day20.py diff --git a/2022/day21.py b/src/holt59/aoc/2022/day21.py similarity index 100% rename from 2022/day21.py rename to src/holt59/aoc/2022/day21.py diff --git a/2022/day22.py b/src/holt59/aoc/2022/day22.py similarity index 100% rename from 2022/day22.py rename to src/holt59/aoc/2022/day22.py diff --git a/2022/day23.py b/src/holt59/aoc/2022/day23.py similarity index 100% rename from 2022/day23.py rename to src/holt59/aoc/2022/day23.py diff --git a/2022/day24.py b/src/holt59/aoc/2022/day24.py similarity index 100% rename from 2022/day24.py rename to src/holt59/aoc/2022/day24.py diff --git a/2022/day25.py b/src/holt59/aoc/2022/day25.py similarity index 100% rename from 2022/day25.py rename to src/holt59/aoc/2022/day25.py diff --git a/2022/day3.py b/src/holt59/aoc/2022/day3.py similarity index 100% rename from 2022/day3.py rename to src/holt59/aoc/2022/day3.py diff --git a/2022/day4.py b/src/holt59/aoc/2022/day4.py similarity index 100% rename from 2022/day4.py rename to src/holt59/aoc/2022/day4.py diff --git a/2022/day5.py b/src/holt59/aoc/2022/day5.py similarity index 100% rename from 2022/day5.py rename to src/holt59/aoc/2022/day5.py diff --git a/2022/day6.py b/src/holt59/aoc/2022/day6.py similarity index 100% rename from 2022/day6.py rename to src/holt59/aoc/2022/day6.py diff --git a/2022/day7.py b/src/holt59/aoc/2022/day7.py similarity index 100% rename from 2022/day7.py rename to src/holt59/aoc/2022/day7.py diff --git a/2022/day8.py b/src/holt59/aoc/2022/day8.py similarity index 100% rename from 2022/day8.py rename to src/holt59/aoc/2022/day8.py diff --git a/2022/day9.py b/src/holt59/aoc/2022/day9.py similarity index 100% rename from 2022/day9.py rename to src/holt59/aoc/2022/day9.py diff --git a/2021/inputs/day12.txt b/src/holt59/aoc/2023/__init__.py similarity index 100% rename from 2021/inputs/day12.txt rename to src/holt59/aoc/2023/__init__.py diff --git a/2023/day1.py b/src/holt59/aoc/2023/day1.py similarity index 100% rename from 2023/day1.py rename to src/holt59/aoc/2023/day1.py diff --git a/2023/day10.py b/src/holt59/aoc/2023/day10.py similarity index 100% rename from 2023/day10.py rename to src/holt59/aoc/2023/day10.py diff --git a/2023/day11.py b/src/holt59/aoc/2023/day11.py similarity index 100% rename from 2023/day11.py rename to src/holt59/aoc/2023/day11.py diff --git a/2023/day12.py b/src/holt59/aoc/2023/day12.py similarity index 100% rename from 2023/day12.py rename to src/holt59/aoc/2023/day12.py diff --git a/2023/day13.py b/src/holt59/aoc/2023/day13.py similarity index 100% rename from 2023/day13.py rename to src/holt59/aoc/2023/day13.py diff --git a/2023/day14.py b/src/holt59/aoc/2023/day14.py similarity index 100% rename from 2023/day14.py rename to src/holt59/aoc/2023/day14.py diff --git a/2023/day15.py b/src/holt59/aoc/2023/day15.py similarity index 100% rename from 2023/day15.py rename to src/holt59/aoc/2023/day15.py diff --git a/2023/day16.py b/src/holt59/aoc/2023/day16.py similarity index 100% rename from 2023/day16.py rename to src/holt59/aoc/2023/day16.py diff --git a/2023/day17.py b/src/holt59/aoc/2023/day17.py similarity index 100% rename from 2023/day17.py rename to src/holt59/aoc/2023/day17.py diff --git a/2023/day18.py b/src/holt59/aoc/2023/day18.py similarity index 100% rename from 2023/day18.py rename to src/holt59/aoc/2023/day18.py diff --git a/2023/day19.py b/src/holt59/aoc/2023/day19.py similarity index 100% rename from 2023/day19.py rename to src/holt59/aoc/2023/day19.py diff --git a/2023/day2.py b/src/holt59/aoc/2023/day2.py similarity index 100% rename from 2023/day2.py rename to src/holt59/aoc/2023/day2.py diff --git a/2023/day20.py b/src/holt59/aoc/2023/day20.py similarity index 100% rename from 2023/day20.py rename to src/holt59/aoc/2023/day20.py diff --git a/2023/day21.py b/src/holt59/aoc/2023/day21.py similarity index 100% rename from 2023/day21.py rename to src/holt59/aoc/2023/day21.py diff --git a/2023/day22.py b/src/holt59/aoc/2023/day22.py similarity index 100% rename from 2023/day22.py rename to src/holt59/aoc/2023/day22.py diff --git a/2023/day23.py b/src/holt59/aoc/2023/day23.py similarity index 100% rename from 2023/day23.py rename to src/holt59/aoc/2023/day23.py diff --git a/2023/day24.py b/src/holt59/aoc/2023/day24.py similarity index 100% rename from 2023/day24.py rename to src/holt59/aoc/2023/day24.py diff --git a/2023/day25.py b/src/holt59/aoc/2023/day25.py similarity index 100% rename from 2023/day25.py rename to src/holt59/aoc/2023/day25.py diff --git a/2023/day3.py b/src/holt59/aoc/2023/day3.py similarity index 100% rename from 2023/day3.py rename to src/holt59/aoc/2023/day3.py diff --git a/2023/day4.py b/src/holt59/aoc/2023/day4.py similarity index 100% rename from 2023/day4.py rename to src/holt59/aoc/2023/day4.py diff --git a/2023/day5.py b/src/holt59/aoc/2023/day5.py similarity index 100% rename from 2023/day5.py rename to src/holt59/aoc/2023/day5.py diff --git a/2023/day6.py b/src/holt59/aoc/2023/day6.py similarity index 100% rename from 2023/day6.py rename to src/holt59/aoc/2023/day6.py diff --git a/2023/day7.py b/src/holt59/aoc/2023/day7.py similarity index 100% rename from 2023/day7.py rename to src/holt59/aoc/2023/day7.py diff --git a/2023/day8.py b/src/holt59/aoc/2023/day8.py similarity index 100% rename from 2023/day8.py rename to src/holt59/aoc/2023/day8.py diff --git a/2023/day9.py b/src/holt59/aoc/2023/day9.py similarity index 100% rename from 2023/day9.py rename to src/holt59/aoc/2023/day9.py diff --git a/src/holt59/aoc/__main__.py b/src/holt59/aoc/__main__.py new file mode 100644 index 0000000..ba8da17 --- /dev/null +++ b/src/holt59/aoc/__main__.py @@ -0,0 +1,49 @@ +import argparse +import importlib +import os +import sys +from pathlib import Path + + +def main(): + parser = argparse.ArgumentParser("Holt59 Advent-Of-Code Runner") + parser.add_argument("-v", "--verbose", action="store_true", help="verbose mode") + parser.add_argument("-t", "--test", action="store_true", help="test mode") + parser.add_argument( + "-u", "--user", type=str, default="holt59", help="user input to use" + ) + parser.add_argument( + "-i", + "--input", + type=Path, + default=None, + help="input to use (override user and test)", + ) + parser.add_argument("-y", "--year", type=int, help="year to run", default=2023) + parser.add_argument("day", type=int, help="day to run") + + args = parser.parse_args() + + verbose: bool = args.verbose + test: bool = args.test + user: str = args.user + input_path: Path | None = args.input + + year: int = args.year + day: int = args.day + + # TODO: change this + if verbose: + os.environ["AOC_VERBOSE"] = "True" + + if input_path is None: + input_path = Path(__file__).parent.joinpath( + "inputs", "tests" if test else user, str(year), f"day{day}.txt" + ) + assert input_path.exists(), f"{input_path} missing" + + with open(input_path) as fp: + sys.stdin = fp + importlib.import_module(f".{year}.day{day}", __package__) + + sys.stdin = sys.__stdin__ diff --git a/2021/inputs/day1.txt b/src/holt59/aoc/inputs/holt59/2021/day1.txt similarity index 100% rename from 2021/inputs/day1.txt rename to src/holt59/aoc/inputs/holt59/2021/day1.txt diff --git a/2021/tests/day10.txt b/src/holt59/aoc/inputs/holt59/2021/day10.txt similarity index 100% rename from 2021/tests/day10.txt rename to src/holt59/aoc/inputs/holt59/2021/day10.txt diff --git a/2021/tests/day11.txt b/src/holt59/aoc/inputs/holt59/2021/day11.txt similarity index 100% rename from 2021/tests/day11.txt rename to src/holt59/aoc/inputs/holt59/2021/day11.txt diff --git a/2021/tests/day12.txt b/src/holt59/aoc/inputs/holt59/2021/day12.txt similarity index 100% rename from 2021/tests/day12.txt rename to src/holt59/aoc/inputs/holt59/2021/day12.txt diff --git a/2021/inputs/day13.txt b/src/holt59/aoc/inputs/holt59/2021/day13.txt similarity index 100% rename from 2021/inputs/day13.txt rename to src/holt59/aoc/inputs/holt59/2021/day13.txt diff --git a/2021/inputs/day14.txt b/src/holt59/aoc/inputs/holt59/2021/day14.txt similarity index 100% rename from 2021/inputs/day14.txt rename to src/holt59/aoc/inputs/holt59/2021/day14.txt diff --git a/2021/inputs/day15.txt b/src/holt59/aoc/inputs/holt59/2021/day15.txt similarity index 100% rename from 2021/inputs/day15.txt rename to src/holt59/aoc/inputs/holt59/2021/day15.txt diff --git a/2021/inputs/day16.txt b/src/holt59/aoc/inputs/holt59/2021/day16.txt similarity index 100% rename from 2021/inputs/day16.txt rename to src/holt59/aoc/inputs/holt59/2021/day16.txt diff --git a/2021/inputs/day17.txt b/src/holt59/aoc/inputs/holt59/2021/day17.txt similarity index 100% rename from 2021/inputs/day17.txt rename to src/holt59/aoc/inputs/holt59/2021/day17.txt diff --git a/2021/inputs/day18.txt b/src/holt59/aoc/inputs/holt59/2021/day18.txt similarity index 100% rename from 2021/inputs/day18.txt rename to src/holt59/aoc/inputs/holt59/2021/day18.txt diff --git a/2021/inputs/day19.txt b/src/holt59/aoc/inputs/holt59/2021/day19.txt similarity index 100% rename from 2021/inputs/day19.txt rename to src/holt59/aoc/inputs/holt59/2021/day19.txt diff --git a/2021/inputs/day2.txt b/src/holt59/aoc/inputs/holt59/2021/day2.txt similarity index 100% rename from 2021/inputs/day2.txt rename to src/holt59/aoc/inputs/holt59/2021/day2.txt diff --git a/2021/inputs/day20.txt b/src/holt59/aoc/inputs/holt59/2021/day20.txt similarity index 100% rename from 2021/inputs/day20.txt rename to src/holt59/aoc/inputs/holt59/2021/day20.txt diff --git a/2021/inputs/day21.txt b/src/holt59/aoc/inputs/holt59/2021/day21.txt similarity index 100% rename from 2021/inputs/day21.txt rename to src/holt59/aoc/inputs/holt59/2021/day21.txt diff --git a/2021/inputs/day22.txt b/src/holt59/aoc/inputs/holt59/2021/day22.txt similarity index 100% rename from 2021/inputs/day22.txt rename to src/holt59/aoc/inputs/holt59/2021/day22.txt diff --git a/2021/inputs/day23.txt b/src/holt59/aoc/inputs/holt59/2021/day23.txt similarity index 100% rename from 2021/inputs/day23.txt rename to src/holt59/aoc/inputs/holt59/2021/day23.txt diff --git a/2021/inputs/day24.txt b/src/holt59/aoc/inputs/holt59/2021/day24.txt similarity index 100% rename from 2021/inputs/day24.txt rename to src/holt59/aoc/inputs/holt59/2021/day24.txt diff --git a/2021/inputs/day25.txt b/src/holt59/aoc/inputs/holt59/2021/day25.txt similarity index 100% rename from 2021/inputs/day25.txt rename to src/holt59/aoc/inputs/holt59/2021/day25.txt diff --git a/2021/inputs/day3.txt b/src/holt59/aoc/inputs/holt59/2021/day3.txt similarity index 100% rename from 2021/inputs/day3.txt rename to src/holt59/aoc/inputs/holt59/2021/day3.txt diff --git a/2021/inputs/day4.txt b/src/holt59/aoc/inputs/holt59/2021/day4.txt similarity index 100% rename from 2021/inputs/day4.txt rename to src/holt59/aoc/inputs/holt59/2021/day4.txt diff --git a/2021/inputs/day5.txt b/src/holt59/aoc/inputs/holt59/2021/day5.txt similarity index 100% rename from 2021/inputs/day5.txt rename to src/holt59/aoc/inputs/holt59/2021/day5.txt diff --git a/2021/inputs/day6.txt b/src/holt59/aoc/inputs/holt59/2021/day6.txt similarity index 100% rename from 2021/inputs/day6.txt rename to src/holt59/aoc/inputs/holt59/2021/day6.txt diff --git a/2021/inputs/day7.txt b/src/holt59/aoc/inputs/holt59/2021/day7.txt similarity index 100% rename from 2021/inputs/day7.txt rename to src/holt59/aoc/inputs/holt59/2021/day7.txt diff --git a/2021/inputs/day8.txt b/src/holt59/aoc/inputs/holt59/2021/day8.txt similarity index 100% rename from 2021/inputs/day8.txt rename to src/holt59/aoc/inputs/holt59/2021/day8.txt diff --git a/2021/inputs/day9.txt b/src/holt59/aoc/inputs/holt59/2021/day9.txt similarity index 100% rename from 2021/inputs/day9.txt rename to src/holt59/aoc/inputs/holt59/2021/day9.txt diff --git a/2022/inputs/day1.txt b/src/holt59/aoc/inputs/holt59/2022/day1.txt similarity index 100% rename from 2022/inputs/day1.txt rename to src/holt59/aoc/inputs/holt59/2022/day1.txt diff --git a/2022/inputs/day10.txt b/src/holt59/aoc/inputs/holt59/2022/day10.txt similarity index 100% rename from 2022/inputs/day10.txt rename to src/holt59/aoc/inputs/holt59/2022/day10.txt diff --git a/2022/inputs/day11.txt b/src/holt59/aoc/inputs/holt59/2022/day11.txt similarity index 100% rename from 2022/inputs/day11.txt rename to src/holt59/aoc/inputs/holt59/2022/day11.txt diff --git a/2022/inputs/day12.txt b/src/holt59/aoc/inputs/holt59/2022/day12.txt similarity index 100% rename from 2022/inputs/day12.txt rename to src/holt59/aoc/inputs/holt59/2022/day12.txt diff --git a/2022/inputs/day13.txt b/src/holt59/aoc/inputs/holt59/2022/day13.txt similarity index 100% rename from 2022/inputs/day13.txt rename to src/holt59/aoc/inputs/holt59/2022/day13.txt diff --git a/2022/inputs/day14.txt b/src/holt59/aoc/inputs/holt59/2022/day14.txt similarity index 100% rename from 2022/inputs/day14.txt rename to src/holt59/aoc/inputs/holt59/2022/day14.txt diff --git a/2022/inputs/day15.txt b/src/holt59/aoc/inputs/holt59/2022/day15.txt similarity index 100% rename from 2022/inputs/day15.txt rename to src/holt59/aoc/inputs/holt59/2022/day15.txt diff --git a/2022/inputs/day16.txt b/src/holt59/aoc/inputs/holt59/2022/day16.txt similarity index 100% rename from 2022/inputs/day16.txt rename to src/holt59/aoc/inputs/holt59/2022/day16.txt diff --git a/2022/inputs/day17.txt b/src/holt59/aoc/inputs/holt59/2022/day17.txt similarity index 100% rename from 2022/inputs/day17.txt rename to src/holt59/aoc/inputs/holt59/2022/day17.txt diff --git a/2022/inputs/day18.txt b/src/holt59/aoc/inputs/holt59/2022/day18.txt similarity index 100% rename from 2022/inputs/day18.txt rename to src/holt59/aoc/inputs/holt59/2022/day18.txt diff --git a/2022/inputs/day19.txt b/src/holt59/aoc/inputs/holt59/2022/day19.txt similarity index 100% rename from 2022/inputs/day19.txt rename to src/holt59/aoc/inputs/holt59/2022/day19.txt diff --git a/2022/inputs/day2.txt b/src/holt59/aoc/inputs/holt59/2022/day2.txt similarity index 100% rename from 2022/inputs/day2.txt rename to src/holt59/aoc/inputs/holt59/2022/day2.txt diff --git a/2022/inputs/day20.txt b/src/holt59/aoc/inputs/holt59/2022/day20.txt similarity index 100% rename from 2022/inputs/day20.txt rename to src/holt59/aoc/inputs/holt59/2022/day20.txt diff --git a/2022/inputs/day21.txt b/src/holt59/aoc/inputs/holt59/2022/day21.txt similarity index 100% rename from 2022/inputs/day21.txt rename to src/holt59/aoc/inputs/holt59/2022/day21.txt diff --git a/2022/inputs/day22.txt b/src/holt59/aoc/inputs/holt59/2022/day22.txt similarity index 100% rename from 2022/inputs/day22.txt rename to src/holt59/aoc/inputs/holt59/2022/day22.txt diff --git a/2022/inputs/day23.txt b/src/holt59/aoc/inputs/holt59/2022/day23.txt similarity index 100% rename from 2022/inputs/day23.txt rename to src/holt59/aoc/inputs/holt59/2022/day23.txt diff --git a/2022/inputs/day24.txt b/src/holt59/aoc/inputs/holt59/2022/day24.txt similarity index 100% rename from 2022/inputs/day24.txt rename to src/holt59/aoc/inputs/holt59/2022/day24.txt diff --git a/2022/inputs/day25.txt b/src/holt59/aoc/inputs/holt59/2022/day25.txt similarity index 100% rename from 2022/inputs/day25.txt rename to src/holt59/aoc/inputs/holt59/2022/day25.txt diff --git a/2022/inputs/day3.txt b/src/holt59/aoc/inputs/holt59/2022/day3.txt similarity index 100% rename from 2022/inputs/day3.txt rename to src/holt59/aoc/inputs/holt59/2022/day3.txt diff --git a/2022/inputs/day4.txt b/src/holt59/aoc/inputs/holt59/2022/day4.txt similarity index 100% rename from 2022/inputs/day4.txt rename to src/holt59/aoc/inputs/holt59/2022/day4.txt diff --git a/2022/inputs/day5.txt b/src/holt59/aoc/inputs/holt59/2022/day5.txt similarity index 100% rename from 2022/inputs/day5.txt rename to src/holt59/aoc/inputs/holt59/2022/day5.txt diff --git a/2022/inputs/day6.txt b/src/holt59/aoc/inputs/holt59/2022/day6.txt similarity index 100% rename from 2022/inputs/day6.txt rename to src/holt59/aoc/inputs/holt59/2022/day6.txt diff --git a/2022/inputs/day7.txt b/src/holt59/aoc/inputs/holt59/2022/day7.txt similarity index 100% rename from 2022/inputs/day7.txt rename to src/holt59/aoc/inputs/holt59/2022/day7.txt diff --git a/2022/inputs/day8.txt b/src/holt59/aoc/inputs/holt59/2022/day8.txt similarity index 100% rename from 2022/inputs/day8.txt rename to src/holt59/aoc/inputs/holt59/2022/day8.txt diff --git a/2022/inputs/day9.txt b/src/holt59/aoc/inputs/holt59/2022/day9.txt similarity index 100% rename from 2022/inputs/day9.txt rename to src/holt59/aoc/inputs/holt59/2022/day9.txt diff --git a/2023/inputs/day1.txt b/src/holt59/aoc/inputs/holt59/2023/day1.txt similarity index 100% rename from 2023/inputs/day1.txt rename to src/holt59/aoc/inputs/holt59/2023/day1.txt diff --git a/2023/inputs/day10.txt b/src/holt59/aoc/inputs/holt59/2023/day10.txt similarity index 100% rename from 2023/inputs/day10.txt rename to src/holt59/aoc/inputs/holt59/2023/day10.txt diff --git a/2023/inputs/day11.txt b/src/holt59/aoc/inputs/holt59/2023/day11.txt similarity index 100% rename from 2023/inputs/day11.txt rename to src/holt59/aoc/inputs/holt59/2023/day11.txt diff --git a/2023/inputs/day12.txt b/src/holt59/aoc/inputs/holt59/2023/day12.txt similarity index 100% rename from 2023/inputs/day12.txt rename to src/holt59/aoc/inputs/holt59/2023/day12.txt diff --git a/2023/inputs/day13.txt b/src/holt59/aoc/inputs/holt59/2023/day13.txt similarity index 100% rename from 2023/inputs/day13.txt rename to src/holt59/aoc/inputs/holt59/2023/day13.txt diff --git a/2023/inputs/day14.txt b/src/holt59/aoc/inputs/holt59/2023/day14.txt similarity index 100% rename from 2023/inputs/day14.txt rename to src/holt59/aoc/inputs/holt59/2023/day14.txt diff --git a/2023/inputs/day15.txt b/src/holt59/aoc/inputs/holt59/2023/day15.txt similarity index 100% rename from 2023/inputs/day15.txt rename to src/holt59/aoc/inputs/holt59/2023/day15.txt diff --git a/2023/inputs/day16.txt b/src/holt59/aoc/inputs/holt59/2023/day16.txt similarity index 100% rename from 2023/inputs/day16.txt rename to src/holt59/aoc/inputs/holt59/2023/day16.txt diff --git a/2023/inputs/day17.txt b/src/holt59/aoc/inputs/holt59/2023/day17.txt similarity index 100% rename from 2023/inputs/day17.txt rename to src/holt59/aoc/inputs/holt59/2023/day17.txt diff --git a/2023/inputs/day18.txt b/src/holt59/aoc/inputs/holt59/2023/day18.txt similarity index 100% rename from 2023/inputs/day18.txt rename to src/holt59/aoc/inputs/holt59/2023/day18.txt diff --git a/2023/inputs/day19.txt b/src/holt59/aoc/inputs/holt59/2023/day19.txt similarity index 100% rename from 2023/inputs/day19.txt rename to src/holt59/aoc/inputs/holt59/2023/day19.txt diff --git a/2023/inputs/day2.txt b/src/holt59/aoc/inputs/holt59/2023/day2.txt similarity index 100% rename from 2023/inputs/day2.txt rename to src/holt59/aoc/inputs/holt59/2023/day2.txt diff --git a/2021/tests/day20.txt b/src/holt59/aoc/inputs/holt59/2023/day20.txt similarity index 100% rename from 2021/tests/day20.txt rename to src/holt59/aoc/inputs/holt59/2023/day20.txt diff --git a/2021/tests/day21.txt b/src/holt59/aoc/inputs/holt59/2023/day21.txt similarity index 100% rename from 2021/tests/day21.txt rename to src/holt59/aoc/inputs/holt59/2023/day21.txt diff --git a/2021/tests/day22.txt b/src/holt59/aoc/inputs/holt59/2023/day22.txt similarity index 100% rename from 2021/tests/day22.txt rename to src/holt59/aoc/inputs/holt59/2023/day22.txt diff --git a/2021/tests/day23.txt b/src/holt59/aoc/inputs/holt59/2023/day23.txt similarity index 100% rename from 2021/tests/day23.txt rename to src/holt59/aoc/inputs/holt59/2023/day23.txt diff --git a/2021/tests/day24.txt b/src/holt59/aoc/inputs/holt59/2023/day24.txt similarity index 100% rename from 2021/tests/day24.txt rename to src/holt59/aoc/inputs/holt59/2023/day24.txt diff --git a/2021/tests/day25.txt b/src/holt59/aoc/inputs/holt59/2023/day25.txt similarity index 100% rename from 2021/tests/day25.txt rename to src/holt59/aoc/inputs/holt59/2023/day25.txt diff --git a/2023/inputs/day3.txt b/src/holt59/aoc/inputs/holt59/2023/day3.txt similarity index 100% rename from 2023/inputs/day3.txt rename to src/holt59/aoc/inputs/holt59/2023/day3.txt diff --git a/2023/inputs/day4.txt b/src/holt59/aoc/inputs/holt59/2023/day4.txt similarity index 100% rename from 2023/inputs/day4.txt rename to src/holt59/aoc/inputs/holt59/2023/day4.txt diff --git a/2023/inputs/day5.txt b/src/holt59/aoc/inputs/holt59/2023/day5.txt similarity index 100% rename from 2023/inputs/day5.txt rename to src/holt59/aoc/inputs/holt59/2023/day5.txt diff --git a/2023/inputs/day6.txt b/src/holt59/aoc/inputs/holt59/2023/day6.txt similarity index 100% rename from 2023/inputs/day6.txt rename to src/holt59/aoc/inputs/holt59/2023/day6.txt diff --git a/2023/inputs/day7.txt b/src/holt59/aoc/inputs/holt59/2023/day7.txt similarity index 100% rename from 2023/inputs/day7.txt rename to src/holt59/aoc/inputs/holt59/2023/day7.txt diff --git a/2023/inputs/day8.txt b/src/holt59/aoc/inputs/holt59/2023/day8.txt similarity index 100% rename from 2023/inputs/day8.txt rename to src/holt59/aoc/inputs/holt59/2023/day8.txt diff --git a/2023/inputs/day9.txt b/src/holt59/aoc/inputs/holt59/2023/day9.txt similarity index 100% rename from 2023/inputs/day9.txt rename to src/holt59/aoc/inputs/holt59/2023/day9.txt diff --git a/2021/tests/day1.txt b/src/holt59/aoc/inputs/tests/2021/day1.txt similarity index 100% rename from 2021/tests/day1.txt rename to src/holt59/aoc/inputs/tests/2021/day1.txt diff --git a/2021/tests/day13.txt b/src/holt59/aoc/inputs/tests/2021/day10.txt similarity index 100% rename from 2021/tests/day13.txt rename to src/holt59/aoc/inputs/tests/2021/day10.txt diff --git a/2021/tests/day14.txt b/src/holt59/aoc/inputs/tests/2021/day11.txt similarity index 100% rename from 2021/tests/day14.txt rename to src/holt59/aoc/inputs/tests/2021/day11.txt diff --git a/2021/tests/day15.txt b/src/holt59/aoc/inputs/tests/2021/day12.txt similarity index 100% rename from 2021/tests/day15.txt rename to src/holt59/aoc/inputs/tests/2021/day12.txt diff --git a/2021/tests/day16.txt b/src/holt59/aoc/inputs/tests/2021/day13.txt similarity index 100% rename from 2021/tests/day16.txt rename to src/holt59/aoc/inputs/tests/2021/day13.txt diff --git a/2021/tests/day17.txt b/src/holt59/aoc/inputs/tests/2021/day14.txt similarity index 100% rename from 2021/tests/day17.txt rename to src/holt59/aoc/inputs/tests/2021/day14.txt diff --git a/2021/tests/day18.txt b/src/holt59/aoc/inputs/tests/2021/day15.txt similarity index 100% rename from 2021/tests/day18.txt rename to src/holt59/aoc/inputs/tests/2021/day15.txt diff --git a/2021/tests/day19.txt b/src/holt59/aoc/inputs/tests/2021/day16.txt similarity index 100% rename from 2021/tests/day19.txt rename to src/holt59/aoc/inputs/tests/2021/day16.txt diff --git a/2021/tests/day5.txt b/src/holt59/aoc/inputs/tests/2021/day17.txt similarity index 100% rename from 2021/tests/day5.txt rename to src/holt59/aoc/inputs/tests/2021/day17.txt diff --git a/2021/tests/day9.txt b/src/holt59/aoc/inputs/tests/2021/day18.txt similarity index 100% rename from 2021/tests/day9.txt rename to src/holt59/aoc/inputs/tests/2021/day18.txt diff --git a/2023/inputs/day20.txt b/src/holt59/aoc/inputs/tests/2021/day19.txt similarity index 100% rename from 2023/inputs/day20.txt rename to src/holt59/aoc/inputs/tests/2021/day19.txt diff --git a/2021/tests/day2.txt b/src/holt59/aoc/inputs/tests/2021/day2.txt similarity index 100% rename from 2021/tests/day2.txt rename to src/holt59/aoc/inputs/tests/2021/day2.txt diff --git a/2023/tests/day20.txt b/src/holt59/aoc/inputs/tests/2021/day20.txt similarity index 100% rename from 2023/tests/day20.txt rename to src/holt59/aoc/inputs/tests/2021/day20.txt diff --git a/2023/inputs/day21.txt b/src/holt59/aoc/inputs/tests/2021/day21.txt similarity index 100% rename from 2023/inputs/day21.txt rename to src/holt59/aoc/inputs/tests/2021/day21.txt diff --git a/2023/inputs/day22.txt b/src/holt59/aoc/inputs/tests/2021/day22.txt similarity index 100% rename from 2023/inputs/day22.txt rename to src/holt59/aoc/inputs/tests/2021/day22.txt diff --git a/2023/inputs/day23.txt b/src/holt59/aoc/inputs/tests/2021/day23.txt similarity index 100% rename from 2023/inputs/day23.txt rename to src/holt59/aoc/inputs/tests/2021/day23.txt diff --git a/2023/inputs/day24.txt b/src/holt59/aoc/inputs/tests/2021/day24.txt similarity index 100% rename from 2023/inputs/day24.txt rename to src/holt59/aoc/inputs/tests/2021/day24.txt diff --git a/2023/inputs/day25.txt b/src/holt59/aoc/inputs/tests/2021/day25.txt similarity index 100% rename from 2023/inputs/day25.txt rename to src/holt59/aoc/inputs/tests/2021/day25.txt diff --git a/2021/tests/day3.txt b/src/holt59/aoc/inputs/tests/2021/day3.txt similarity index 100% rename from 2021/tests/day3.txt rename to src/holt59/aoc/inputs/tests/2021/day3.txt diff --git a/2021/tests/day4.txt b/src/holt59/aoc/inputs/tests/2021/day4.txt similarity index 100% rename from 2021/tests/day4.txt rename to src/holt59/aoc/inputs/tests/2021/day4.txt diff --git a/2023/tests/day21.txt b/src/holt59/aoc/inputs/tests/2021/day5.txt similarity index 100% rename from 2023/tests/day21.txt rename to src/holt59/aoc/inputs/tests/2021/day5.txt diff --git a/2021/tests/day6.txt b/src/holt59/aoc/inputs/tests/2021/day6.txt similarity index 100% rename from 2021/tests/day6.txt rename to src/holt59/aoc/inputs/tests/2021/day6.txt diff --git a/2021/tests/day7.txt b/src/holt59/aoc/inputs/tests/2021/day7.txt similarity index 100% rename from 2021/tests/day7.txt rename to src/holt59/aoc/inputs/tests/2021/day7.txt diff --git a/2021/tests/day8.txt b/src/holt59/aoc/inputs/tests/2021/day8.txt similarity index 100% rename from 2021/tests/day8.txt rename to src/holt59/aoc/inputs/tests/2021/day8.txt diff --git a/2023/tests/day22.txt b/src/holt59/aoc/inputs/tests/2021/day9.txt similarity index 100% rename from 2023/tests/day22.txt rename to src/holt59/aoc/inputs/tests/2021/day9.txt diff --git a/2022/tests/day1.txt b/src/holt59/aoc/inputs/tests/2022/day1.txt similarity index 100% rename from 2022/tests/day1.txt rename to src/holt59/aoc/inputs/tests/2022/day1.txt diff --git a/2022/tests/day10.txt b/src/holt59/aoc/inputs/tests/2022/day10.txt similarity index 100% rename from 2022/tests/day10.txt rename to src/holt59/aoc/inputs/tests/2022/day10.txt diff --git a/2022/tests/day11.txt b/src/holt59/aoc/inputs/tests/2022/day11.txt similarity index 100% rename from 2022/tests/day11.txt rename to src/holt59/aoc/inputs/tests/2022/day11.txt diff --git a/2022/tests/day12.txt b/src/holt59/aoc/inputs/tests/2022/day12.txt similarity index 100% rename from 2022/tests/day12.txt rename to src/holt59/aoc/inputs/tests/2022/day12.txt diff --git a/2022/tests/day13.txt b/src/holt59/aoc/inputs/tests/2022/day13.txt similarity index 100% rename from 2022/tests/day13.txt rename to src/holt59/aoc/inputs/tests/2022/day13.txt diff --git a/2022/tests/day14.txt b/src/holt59/aoc/inputs/tests/2022/day14.txt similarity index 100% rename from 2022/tests/day14.txt rename to src/holt59/aoc/inputs/tests/2022/day14.txt diff --git a/2022/tests/day15.txt b/src/holt59/aoc/inputs/tests/2022/day15.txt similarity index 100% rename from 2022/tests/day15.txt rename to src/holt59/aoc/inputs/tests/2022/day15.txt diff --git a/2022/tests/day16.txt b/src/holt59/aoc/inputs/tests/2022/day16.txt similarity index 100% rename from 2022/tests/day16.txt rename to src/holt59/aoc/inputs/tests/2022/day16.txt diff --git a/2022/tests/day17.txt b/src/holt59/aoc/inputs/tests/2022/day17.txt similarity index 100% rename from 2022/tests/day17.txt rename to src/holt59/aoc/inputs/tests/2022/day17.txt diff --git a/2022/tests/day18.txt b/src/holt59/aoc/inputs/tests/2022/day18.txt similarity index 100% rename from 2022/tests/day18.txt rename to src/holt59/aoc/inputs/tests/2022/day18.txt diff --git a/2022/tests/day19.txt b/src/holt59/aoc/inputs/tests/2022/day19.txt similarity index 100% rename from 2022/tests/day19.txt rename to src/holt59/aoc/inputs/tests/2022/day19.txt diff --git a/2022/tests/day2.txt b/src/holt59/aoc/inputs/tests/2022/day2.txt similarity index 100% rename from 2022/tests/day2.txt rename to src/holt59/aoc/inputs/tests/2022/day2.txt diff --git a/2022/tests/day20.txt b/src/holt59/aoc/inputs/tests/2022/day20.txt similarity index 100% rename from 2022/tests/day20.txt rename to src/holt59/aoc/inputs/tests/2022/day20.txt diff --git a/2022/tests/day21.txt b/src/holt59/aoc/inputs/tests/2022/day21.txt similarity index 100% rename from 2022/tests/day21.txt rename to src/holt59/aoc/inputs/tests/2022/day21.txt diff --git a/2022/tests/day22.txt b/src/holt59/aoc/inputs/tests/2022/day22.txt similarity index 100% rename from 2022/tests/day22.txt rename to src/holt59/aoc/inputs/tests/2022/day22.txt diff --git a/2022/tests/day23.txt b/src/holt59/aoc/inputs/tests/2022/day23.txt similarity index 100% rename from 2022/tests/day23.txt rename to src/holt59/aoc/inputs/tests/2022/day23.txt diff --git a/2022/tests/day24.txt b/src/holt59/aoc/inputs/tests/2022/day24.txt similarity index 100% rename from 2022/tests/day24.txt rename to src/holt59/aoc/inputs/tests/2022/day24.txt diff --git a/2022/tests/day25.txt b/src/holt59/aoc/inputs/tests/2022/day25.txt similarity index 100% rename from 2022/tests/day25.txt rename to src/holt59/aoc/inputs/tests/2022/day25.txt diff --git a/2022/tests/day3.txt b/src/holt59/aoc/inputs/tests/2022/day3.txt similarity index 100% rename from 2022/tests/day3.txt rename to src/holt59/aoc/inputs/tests/2022/day3.txt diff --git a/2022/tests/day4.txt b/src/holt59/aoc/inputs/tests/2022/day4.txt similarity index 100% rename from 2022/tests/day4.txt rename to src/holt59/aoc/inputs/tests/2022/day4.txt diff --git a/2022/tests/day5.txt b/src/holt59/aoc/inputs/tests/2022/day5.txt similarity index 100% rename from 2022/tests/day5.txt rename to src/holt59/aoc/inputs/tests/2022/day5.txt diff --git a/2022/tests/day6.txt b/src/holt59/aoc/inputs/tests/2022/day6.txt similarity index 100% rename from 2022/tests/day6.txt rename to src/holt59/aoc/inputs/tests/2022/day6.txt diff --git a/2022/tests/day7.txt b/src/holt59/aoc/inputs/tests/2022/day7.txt similarity index 100% rename from 2022/tests/day7.txt rename to src/holt59/aoc/inputs/tests/2022/day7.txt diff --git a/2022/tests/day8.txt b/src/holt59/aoc/inputs/tests/2022/day8.txt similarity index 100% rename from 2022/tests/day8.txt rename to src/holt59/aoc/inputs/tests/2022/day8.txt diff --git a/2022/tests/day9.txt b/src/holt59/aoc/inputs/tests/2022/day9.txt similarity index 100% rename from 2022/tests/day9.txt rename to src/holt59/aoc/inputs/tests/2022/day9.txt diff --git a/2023/tests/day1.txt b/src/holt59/aoc/inputs/tests/2023/day1.txt similarity index 100% rename from 2023/tests/day1.txt rename to src/holt59/aoc/inputs/tests/2023/day1.txt diff --git a/2023/tests/day10.txt b/src/holt59/aoc/inputs/tests/2023/day10.txt similarity index 100% rename from 2023/tests/day10.txt rename to src/holt59/aoc/inputs/tests/2023/day10.txt diff --git a/2023/tests/day10_1.txt b/src/holt59/aoc/inputs/tests/2023/day10_1.txt similarity index 100% rename from 2023/tests/day10_1.txt rename to src/holt59/aoc/inputs/tests/2023/day10_1.txt diff --git a/2023/tests/day10_2.txt b/src/holt59/aoc/inputs/tests/2023/day10_2.txt similarity index 100% rename from 2023/tests/day10_2.txt rename to src/holt59/aoc/inputs/tests/2023/day10_2.txt diff --git a/2023/tests/day10_3.txt b/src/holt59/aoc/inputs/tests/2023/day10_3.txt similarity index 100% rename from 2023/tests/day10_3.txt rename to src/holt59/aoc/inputs/tests/2023/day10_3.txt diff --git a/2023/tests/day11.txt b/src/holt59/aoc/inputs/tests/2023/day11.txt similarity index 100% rename from 2023/tests/day11.txt rename to src/holt59/aoc/inputs/tests/2023/day11.txt diff --git a/2023/tests/day12.txt b/src/holt59/aoc/inputs/tests/2023/day12.txt similarity index 100% rename from 2023/tests/day12.txt rename to src/holt59/aoc/inputs/tests/2023/day12.txt diff --git a/2023/tests/day13.txt b/src/holt59/aoc/inputs/tests/2023/day13.txt similarity index 100% rename from 2023/tests/day13.txt rename to src/holt59/aoc/inputs/tests/2023/day13.txt diff --git a/2023/tests/day14.txt b/src/holt59/aoc/inputs/tests/2023/day14.txt similarity index 100% rename from 2023/tests/day14.txt rename to src/holt59/aoc/inputs/tests/2023/day14.txt diff --git a/2023/tests/day15.txt b/src/holt59/aoc/inputs/tests/2023/day15.txt similarity index 100% rename from 2023/tests/day15.txt rename to src/holt59/aoc/inputs/tests/2023/day15.txt diff --git a/2023/tests/day16.txt b/src/holt59/aoc/inputs/tests/2023/day16.txt similarity index 100% rename from 2023/tests/day16.txt rename to src/holt59/aoc/inputs/tests/2023/day16.txt diff --git a/2023/tests/day17.txt b/src/holt59/aoc/inputs/tests/2023/day17.txt similarity index 100% rename from 2023/tests/day17.txt rename to src/holt59/aoc/inputs/tests/2023/day17.txt diff --git a/2023/tests/day18.txt b/src/holt59/aoc/inputs/tests/2023/day18.txt similarity index 100% rename from 2023/tests/day18.txt rename to src/holt59/aoc/inputs/tests/2023/day18.txt diff --git a/2023/tests/day19.txt b/src/holt59/aoc/inputs/tests/2023/day19.txt similarity index 100% rename from 2023/tests/day19.txt rename to src/holt59/aoc/inputs/tests/2023/day19.txt diff --git a/2023/tests/day1_p1.txt b/src/holt59/aoc/inputs/tests/2023/day1_p1.txt similarity index 100% rename from 2023/tests/day1_p1.txt rename to src/holt59/aoc/inputs/tests/2023/day1_p1.txt diff --git a/2023/tests/day2.txt b/src/holt59/aoc/inputs/tests/2023/day2.txt similarity index 100% rename from 2023/tests/day2.txt rename to src/holt59/aoc/inputs/tests/2023/day2.txt diff --git a/2023/tests/day23.txt b/src/holt59/aoc/inputs/tests/2023/day20.txt similarity index 100% rename from 2023/tests/day23.txt rename to src/holt59/aoc/inputs/tests/2023/day20.txt diff --git a/2023/tests/day24.txt b/src/holt59/aoc/inputs/tests/2023/day21.txt similarity index 100% rename from 2023/tests/day24.txt rename to src/holt59/aoc/inputs/tests/2023/day21.txt diff --git a/2023/tests/day25.txt b/src/holt59/aoc/inputs/tests/2023/day22.txt similarity index 100% rename from 2023/tests/day25.txt rename to src/holt59/aoc/inputs/tests/2023/day22.txt diff --git a/src/holt59/aoc/inputs/tests/2023/day23.txt b/src/holt59/aoc/inputs/tests/2023/day23.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/holt59/aoc/inputs/tests/2023/day24.txt b/src/holt59/aoc/inputs/tests/2023/day24.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/holt59/aoc/inputs/tests/2023/day25.txt b/src/holt59/aoc/inputs/tests/2023/day25.txt new file mode 100644 index 0000000..e69de29 diff --git a/2023/tests/day3.txt b/src/holt59/aoc/inputs/tests/2023/day3.txt similarity index 100% rename from 2023/tests/day3.txt rename to src/holt59/aoc/inputs/tests/2023/day3.txt diff --git a/2023/tests/day4.txt b/src/holt59/aoc/inputs/tests/2023/day4.txt similarity index 100% rename from 2023/tests/day4.txt rename to src/holt59/aoc/inputs/tests/2023/day4.txt diff --git a/2023/tests/day5.txt b/src/holt59/aoc/inputs/tests/2023/day5.txt similarity index 100% rename from 2023/tests/day5.txt rename to src/holt59/aoc/inputs/tests/2023/day5.txt diff --git a/2023/tests/day6.txt b/src/holt59/aoc/inputs/tests/2023/day6.txt similarity index 100% rename from 2023/tests/day6.txt rename to src/holt59/aoc/inputs/tests/2023/day6.txt diff --git a/2023/tests/day7.txt b/src/holt59/aoc/inputs/tests/2023/day7.txt similarity index 100% rename from 2023/tests/day7.txt rename to src/holt59/aoc/inputs/tests/2023/day7.txt diff --git a/2023/tests/day8.txt b/src/holt59/aoc/inputs/tests/2023/day8.txt similarity index 100% rename from 2023/tests/day8.txt rename to src/holt59/aoc/inputs/tests/2023/day8.txt diff --git a/2023/tests/day8_p1.txt b/src/holt59/aoc/inputs/tests/2023/day8_p1.txt similarity index 100% rename from 2023/tests/day8_p1.txt rename to src/holt59/aoc/inputs/tests/2023/day8_p1.txt diff --git a/2023/tests/day9.txt b/src/holt59/aoc/inputs/tests/2023/day9.txt similarity index 100% rename from 2023/tests/day9.txt rename to src/holt59/aoc/inputs/tests/2023/day9.txt