From fbf1c66a3968f0f300cbb6d1895e71c515278a9e Mon Sep 17 00:00:00 2001 From: Fedaya Date: Sat, 2 Dec 2023 12:45:07 +0100 Subject: [PATCH] Nouveau Repository Je perd l'historique, mais ne stocke plus les fichiers input.txt entre autre choses --- .gitignore | 163 ++++++++++++++++++++++++++++++++++++++++++++++++++ README.md | 3 + day1/part1.py | 16 +++++ day1/part2.py | 44 ++++++++++++++ day2/part1.py | 21 +++++++ day2/part2.py | 26 ++++++++ 6 files changed, 273 insertions(+) create mode 100644 .gitignore create mode 100644 day1/part1.py create mode 100644 day1/part2.py create mode 100755 day2/part1.py create mode 100755 day2/part2.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..53bc4c3 --- /dev/null +++ b/.gitignore @@ -0,0 +1,163 @@ +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.py,cover +.hypothesis/ +.pytest_cache/ +cover/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 +db.sqlite3-journal + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +.pybuilder/ +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# pyenv +# For a library or package, you might want to ignore these files since the code is +# intended to run in multiple environments; otherwise, check them in: +# .python-version + +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if having platform-specific dependencies or dependencies +# having no cross-platform support, pipenv may install dependencies that don't work, or not +# install all needed dependencies. +#Pipfile.lock + +# poetry +# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control. +# This is especially recommended for binary packages to ensure reproducibility, and is more +# commonly ignored for libraries. +# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control +#poetry.lock + +# pdm +# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control. +#pdm.lock +# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it +# in version control. +# https://pdm.fming.dev/#use-with-ide +.pdm.toml + +# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm +__pypackages__/ + +# Celery stuff +celerybeat-schedule +celerybeat.pid + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ + +# pytype static type analyzer +.pytype/ + +# Cython debug symbols +cython_debug/ + +# PyCharm +# JetBrains specific template is maintained in a separate JetBrains.gitignore that can +# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore +# and can be added to the global gitignore or merged into this file. For a more nuclear +# option (not recommended) you can uncomment the following to ignore the entire idea folder. +#.idea/ + +**/*Zone.Identifier +**/input* \ No newline at end of file diff --git a/README.md b/README.md index b699a86..6f1f546 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,5 @@ # AdventOfCode +Je stockerai ici mon Advent of Code 2023. + +Vous pouvez participer au challenge en vous rendant ici: https://adventofcode.com/2023/ diff --git a/day1/part1.py b/day1/part1.py new file mode 100644 index 0000000..0402ba1 --- /dev/null +++ b/day1/part1.py @@ -0,0 +1,16 @@ +import re + +accumulator = 0 +with open("input.txt") as input: + while line := input.readline(): + if match := re.match(".*?([0-9]).*([0-9]).*?", line): + # print(match.groups(1)) + number = int(match.groups(1)[0] + match.groups(1)[1]) + # print(number) + accumulator += number + elif match := re.match(".*([0-9]).*", line): + # print(match.groups(1)) + number = int(match.groups(1)[0] + match.groups(1)[0]) + # print(number) + accumulator += number +print(accumulator) diff --git a/day1/part2.py b/day1/part2.py new file mode 100644 index 0000000..80053a6 --- /dev/null +++ b/day1/part2.py @@ -0,0 +1,44 @@ +import re + +digits = { + "0": "0", + "1": "1", + "2": "2", + "3": "3", + "4": "4", + "5": "5", + "6": "6", + "7": "7", + "8": "8", + "9": "9", + "zero": "0", + "one": "1", + "two": "2", + "three": "3", + "four": "4", + "five": "5", + "six": "6", + "seven": "7", + "eight": "8", + "nine": "9", +} + +accumulator = 0 +with open("input.txt") as input: + while line := input.readline(): + if match := re.match( + ".*?([0-9]|zero|one|two|three|four|five|six|seven|eight|nine).*([0-9]|zero|one|two|three|four|five|six|seven|eight|nine).*?", + line, + ): + #print(match.groups(1)) + number = int(digits[match.groups(1)[0]] + digits[match.groups(1)[1]]) + #print(number) + accumulator += number + elif match := re.match(".*?([0-9]|zero|one|two|three|four|five|six|seven|eight|nine).*?", line): + #print(match.groups(1)) + number = int(digits[match.groups(1)[0]] + digits[match.groups(1)[0]]) + #print(number) + accumulator += number + else: + print(line) +print(accumulator) diff --git a/day2/part1.py b/day2/part1.py new file mode 100755 index 0000000..295b671 --- /dev/null +++ b/day2/part1.py @@ -0,0 +1,21 @@ +#!/usr/bin/env python3.11 +import re +maximums = { 'red': 12, 'green': 13, 'blue': 14} +def game_turn(game_id:int, data: str) -> int: + sets = data.split('; ') + for dset in sets: + cubes = dset.split(', ') + for cube in cubes: + print(cube.split(' ')) + number, color = cube.split(' ') + number = int(number) + if number > maximums[color]: + return 0 + return game_id + +id_sum = 0 +with open('input.txt', 'r') as input: + while line := input.readline(): + match = re.match("Game (\d+): (.*)", line) + id_sum += game_turn(int(match.groups(0)[0]), match.groups(0)[1]) +print(id_sum) \ No newline at end of file diff --git a/day2/part2.py b/day2/part2.py new file mode 100755 index 0000000..bd56452 --- /dev/null +++ b/day2/part2.py @@ -0,0 +1,26 @@ +#!/usr/bin/env python3.11 +import re + +maximums = { 'red': 12, 'green': 13, 'blue': 14} +def game_turn(game_id:int, data: str) -> int: + local_maximums = { + 'red': 0, + 'green': 0, + 'blue': 0 + } + sets = data.split('; ') + for dset in sets: + cubes = dset.split(', ') + for cube in cubes: + print(cube.split(' ')) + number, color = cube.split(' ') + number = int(number) + local_maximums[color] = max( local_maximums[color], number) + return local_maximums['red'] * local_maximums['green'] * local_maximums['blue'] + +id_sum = 0 +with open('input.txt', 'r') as input: + while line := input.readline(): + match = re.match("Game (\d+): (.*)", line) + id_sum += game_turn(int(match.groups(0)[0]), match.groups(0)[1]) +print(id_sum) \ No newline at end of file