diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml deleted file mode 100644 index 812c38c..0000000 --- a/.pre-commit-config.yaml +++ /dev/null @@ -1,17 +0,0 @@ -repos: - - repo: https://github.com/LiquidFun/aoc_tiles - rev: 0.6.2 - hooks: - - id: aoc-tiles - # Optionally use these arguments. Auto add tiles to git adds the tiles to git, - # possibly amends your commit by creating the tile images and updating the README. - # Language sorting shows the preference of the order of the languages to use. - # Exclude paterns are globs which can be used to exclude files when creating - # the tiles. See the customization section in the README for more flags. - # Simply remove the comments (#) below for args and the flags you want. - args: - - --auto-add-tiles-to-git=add - - --contrast-improvement-type=dark - - --overwrite-year=2024 - # - --language-sorting=py,jl,kt,rs - # - --exclude-patterns=2021/*/*.apl,2021/*/*.py,2021/*/*.cpp \ No newline at end of file diff --git a/README.md b/README.md index 7618388..b510bc7 100644 --- a/README.md +++ b/README.md @@ -1,29 +1 @@ -# aoc_template - -Template for yearly AoC-Repositories - -# Usage - -- Clone repository (or use as template in gitea) -- Run `pip install -r requirements.txt` -- Update main.py and start_day.py: set YEAR (near the top) to the respective year -- Create a file named ".session" next to your main.py containing the contents of your aoc-session cookie - -On a given day, just call `./start_day.py -d ` - -# Not using PyCharm? - -Just comment out the call() to CHARMS near the end of start_day.py - -# Want to add AoC-Tiles? - -Author: https://github.com/LiquidFun/aoc_tiles - -- Run `pre-commit install --hook-type post-commit` -- In .pre-commit-config.yaml change the --overwrite-year option as needed -- Optional: Copy your .session file to session.cookie -- For more options see: https://github.com/LiquidFun/aoc_tiles/blob/main/aoc_tiles/config.py - -Tiles will be added to this README between the following lines: - - \ No newline at end of file +# Codyssi 2025 Journey to Atlantis diff --git a/inputs/input1 b/inputs/input1 new file mode 100644 index 0000000..7a4fb56 --- /dev/null +++ b/inputs/input1 @@ -0,0 +1,601 @@ +9 +8 +9 +4 +7 +9 +1 +5 +5 +5 +2 +9 +8 +9 +6 +6 +1 +7 +7 +1 +2 +3 +5 +8 +7 +5 +5 +6 +9 +9 +4 +9 +4 +1 +4 +4 +5 +7 +9 +4 +4 +7 +9 +3 +4 +8 +2 +9 +1 +1 +8 +7 +5 +6 +7 +5 +5 +3 +1 +8 +4 +3 +1 +1 +7 +1 +5 +8 +1 +9 +7 +4 +8 +9 +3 +6 +3 +2 +2 +9 +7 +9 +5 +4 +4 +6 +1 +3 +5 +1 +6 +6 +1 +1 +2 +8 +6 +4 +9 +1 +2 +7 +4 +9 +4 +5 +7 +9 +3 +1 +4 +8 +1 +4 +7 +4 +9 +2 +5 +7 +3 +5 +8 +9 +3 +9 +9 +3 +8 +8 +1 +5 +9 +6 +6 +2 +9 +3 +4 +3 +5 +6 +1 +5 +1 +8 +9 +2 +3 +2 +9 +8 +3 +9 +6 +6 +8 +6 +9 +9 +8 +4 +2 +5 +6 +3 +1 +5 +5 +4 +2 +3 +9 +6 +6 +3 +1 +4 +2 +6 +5 +8 +8 +4 +3 +7 +7 +7 +8 +6 +7 +8 +7 +6 +1 +7 +5 +3 +8 +2 +8 +9 +5 +5 +9 +9 +8 +8 +7 +9 +1 +8 +3 +8 +8 +4 +4 +2 +6 +9 +6 +7 +4 +5 +1 +2 +1 +6 +9 +3 +6 +1 +9 +4 +6 +9 +5 +6 +8 +6 +2 +8 +3 +4 +7 +3 +3 +9 +8 +4 +4 +6 +1 +9 +4 +8 +1 +7 +7 +6 +3 +9 +7 +3 +5 +4 +9 +6 +5 +3 +3 +3 +6 +9 +6 +1 +8 +4 +3 +9 +8 +2 +8 +5 +7 +6 +4 +4 +2 +8 +1 +1 +5 +6 +6 +3 +8 +2 +1 +5 +6 +7 +1 +5 +3 +1 +7 +5 +8 +8 +2 +3 +9 +8 +4 +7 +7 +4 +5 +1 +1 +4 +4 +2 +3 +3 +7 +3 +7 +3 +7 +7 +5 +6 +3 +2 +1 +1 +9 +3 +3 +3 +9 +3 +7 +2 +4 +3 +8 +7 +8 +5 +1 +4 +6 +1 +3 +3 +4 +4 +4 +4 +6 +8 +7 +3 +3 +8 +3 +4 +4 +2 +2 +8 +7 +2 +1 +4 +2 +3 +7 +7 +6 +6 +7 +7 +8 +7 +3 +1 +1 +4 +3 +5 +5 +9 +3 +9 +2 +7 +7 +1 +4 +1 +2 +2 +4 +1 +9 +1 +7 +4 +3 +8 +5 +8 +7 +4 +9 +7 +2 +7 +8 +3 +8 +8 +6 +2 +7 +9 +4 +7 +8 +6 +5 +7 +5 +8 +6 +7 +1 +2 +1 +4 +4 +2 +7 +2 +2 +7 +1 +4 +6 +9 +5 +2 +8 +6 +5 +8 +7 +4 +6 +3 +8 +6 +9 +2 +2 +2 +8 +2 +5 +2 +9 +2 +9 +7 +4 +3 +9 +7 +9 +2 +2 +1 +2 +4 +5 +2 +4 +3 +6 +3 +5 +8 +4 +4 +5 +3 +6 +7 +4 +3 +4 +1 +5 +2 +9 +6 +7 +1 +3 +3 +5 +1 +9 +2 +8 +2 +6 +2 +7 +2 +9 +1 +4 +9 +5 +6 +6 +1 +7 +9 +4 +6 +6 +4 +8 +2 +1 +8 +9 +4 +2 +9 +5 +4 +5 +5 +6 +7 +2 +7 +7 +2 +4 +2 +7 +3 +7 +2 +7 +9 +3 +9 +2 +4 +3 +1 +4 +2 +3 +7 +8 +5 +1 +7 +6 +9 +8 +6 +4 +1 +9 +9 +7 +3 +2 +9 +3 +1 +5 +6 +7 +3 +9 +7 +9 +8 +-+-++--++----++-+++-+------+---+----++--++-++----+++++--++++++++-++--++--+--+----++--+--++-+-++-+-++--+++-++--++---+++--++--++-++++--+-++-+--+-+-+-----++++-+-+++++-+--+++++-++++-+-+-+++--+----+--+-+-+---+-+--++++------++-++-+-------+---+++++-----+-+-+++-+++---+---+++--++-+++----++-+++---++-++--+++++-++--+-+-+-+---+-+-++-++---+--+++-+++-+----++++---++-+-+-+++---+-+-+--+-++-+--+++-----++--+++-+++-+--+--++--+++-+---+----+----++-+++---++++-+++++++-+++-++++-++++-+--+-----+--+++-++++++-++--+--+----+++-+-+--+--++--++---+-+-+--++++-+-++++++---+-++-+--+--++---+-+++++++----+++--------+-+--+++-+++--++++ \ No newline at end of file diff --git a/inputs/input2 b/inputs/input2 new file mode 100644 index 0000000..b4c7c7a --- /dev/null +++ b/inputs/input2 @@ -0,0 +1,105 @@ +Function A: ADD 426 +Function B: MULTIPLY 65 +Function C: RAISE TO THE POWER OF 3 + +3267 +8809 +4378 +7706 +9260 +8478 +1359 +5536 +6885 +1543 +7785 +4652 +7835 +5611 +9961 +5078 +8655 +8528 +4923 +3560 +9469 +1198 +6587 +3615 +8560 +8357 +7244 +2669 +3791 +5753 +2945 +3870 +8299 +1837 +1074 +4389 +8457 +3931 +5995 +3470 +4184 +6082 +1261 +3007 +1328 +4955 +2369 +8456 +4869 +8580 +4021 +5845 +1535 +6569 +5068 +5625 +1457 +9159 +1455 +3278 +5125 +4457 +6232 +6212 +8248 +1526 +8198 +6158 +6978 +9148 +1737 +3236 +1326 +3521 +8234 +1763 +7300 +4732 +8541 +2127 +6178 +9496 +9407 +2778 +7576 +8226 +8210 +6491 +8626 +6517 +7309 +5447 +1058 +6932 +1871 +8908 +7429 +5188 +6026 +1026 +9183 \ No newline at end of file diff --git a/main.py b/main.py deleted file mode 100644 index c02586c..0000000 --- a/main.py +++ /dev/null @@ -1,41 +0,0 @@ -#!/usr/bin/env python3 - -import tools.aoc -import argparse -import importlib -import os - -YEAR = 2018 -TIMEIT_NUMBER = 50 - -argument_parser = argparse.ArgumentParser() -argument_parser.add_argument("-d", "--day", help="specify day to process; leave empty for ALL days", type=int) -argument_parser.add_argument("-p", "--part", help="run only part x", choices=[1, 2], type=int) -argument_parser.add_argument("--timeit", help="measure execution time", action="store_true", default=False) -argument_parser.add_argument( - "--timeit-number", - help="build average time over this many executions", - type=int, - default=TIMEIT_NUMBER -) -argument_parser.add_argument("-v", "--verbose", help="show test case outputs", action="store_true", default=False) -flags = argument_parser.parse_args() - -import_day = "" -if flags.day: - import_day = "%02d" % flags.day - -imported = [] -for _, _, files in os.walk(tools.aoc.BASE_PATH): - for f in files: - if f.startswith('day' + import_day) and f.endswith('.py'): - lib_name = f[:-3] - globals()[lib_name] = importlib.import_module(lib_name) - imported.append(lib_name) - - break - -for lib in sorted(imported): - day = int(lib[-2:]) - day_class = getattr(globals()[lib], "Day")(YEAR, day) - day_class.run(flags.part if flags.part else 3, flags.verbose, flags.timeit, flags.timeit_number) diff --git a/problem1.py b/problem1.py new file mode 100644 index 0000000..15c8dd4 --- /dev/null +++ b/problem1.py @@ -0,0 +1,21 @@ +my_input = open("inputs/input1", "r").read().splitlines() + +signs = my_input[-1] +p1 = int(my_input[0]) +p2 = p1 +p3 = p1 * 10 + int(my_input[1]) +my_input = list(map(int, my_input[1:-1])) + +for i, c in enumerate(signs): + p1 = p1 + my_input[i] if c == '+' else p1 - my_input[i] + p2 = p2 + my_input[-(i+1)] if c == '+' else p2 - my_input[-(i+1)] + +signs = "".join(reversed(signs)) +my_input = my_input[1:] +for i in range(0, len(my_input), 2): + num = my_input[i] * 10 + my_input[i+1] + p3 = p3 + num if signs[i//2] == '+' else p3 - num + +print(p1) +print(p2) +print(p3) diff --git a/problem2.py b/problem2.py new file mode 100644 index 0000000..ac22d1c --- /dev/null +++ b/problem2.py @@ -0,0 +1,32 @@ +my_input = open("inputs/input2", "r").read().splitlines() + +func_a_add = int(my_input[0].split(": ")[1].split()[-1]) +func_b_mul = int(my_input[1].split(": ")[1].split()[-1]) +func_c_pow = int(my_input[2].split(": ")[1].split()[-1]) + + +def expo_price(price: int) -> int: + price **= func_c_pow + price *= func_b_mul + price += func_a_add + return price + + +my_input = list(sorted(map(int, my_input[4:]))) +p1 = my_input[len(my_input)//2] + +p2 = 0 +for x in my_input: + if x % 2 == 0: + p2 += x + +p3 = 0 +p3_max = 15_000_000_000_000 +for x in my_input: + price = expo_price(x) + if price > p3 and price <= p3_max: + p3 = x + +print(expo_price(p1)) +print(expo_price(p2)) +print(p3) diff --git a/skel_day.py b/skel_day.py deleted file mode 100644 index bf3331b..0000000 --- a/skel_day.py +++ /dev/null @@ -1,24 +0,0 @@ -from tools.aoc import AOCDay -from typing import Any - - -class Day(AOCDay): - inputs = [ - [ - (None, "input%DAY%"), - ], - [ - (None, "input%DAY%"), - ] - ] - - def part1(self) -> Any: - return "" - - def part2(self) -> Any: - return "" - - -if __name__ == '__main__': - day = Day(%YEAR%, %DAY%) - day.run(verbose=True) diff --git a/start_day.py b/start_day.py deleted file mode 100644 index 8f8da4c..0000000 --- a/start_day.py +++ /dev/null @@ -1,58 +0,0 @@ -#!/usr/bin/env python3 -from argparse import ArgumentParser -from datetime import datetime -from os.path import exists -from platform import system -from subprocess import call -from time import sleep -from tools.tools import human_readable_time_from_delta -import webbrowser - - -YEAR = 2018 -CHARMS = { - 'Linux': '/usr/local/bin/charm', - 'Windows': r'C:\Users\pennywise\AppData\Local\JetBrains\Toolbox\scripts\pycharm.cmd' -} - -arg_parser = ArgumentParser() -arg_parser.add_argument("-d", "--day", help="start a specific day (default: today)", type=int) -args = arg_parser.parse_args() - -DAY = args.day or datetime.now().day - -if YEAR < 2015 or not 1 <= DAY <= 25: - print("Invalid year or day for year: %d, day: %d" % (YEAR, DAY)) - exit() - -day_file = "day%02d.py" % DAY -if exists(day_file): - print(day_file, "already exists. Use that one!") - exit() - -start = datetime(YEAR, 12, DAY, 6, 0, 0) -now = datetime.now() -if start > now: - time_wait = start - now - if time_wait.days > 0: - print("Do you really want to wait %d days?" % time_wait.days) - exit() - - while time_wait.seconds > 0: - print("Day %d starts in %s.\r" % (DAY, human_readable_time_from_delta(time_wait))) - if time_wait.seconds > 70: - wait = min(1, time_wait.seconds // 3600) * 3600 + min(1, time_wait.seconds // 60) * 60 - sleep(wait) - else: - sleep(1) - time_wait = start - datetime.now() - - -with open("skel_day.py", "r") as IN: - with open(day_file, "w") as OUT: - while in_line := IN.readline(): - OUT.write(in_line.replace("%YEAR%", str(YEAR)).replace("%DAY%", str(DAY))) - -call(["git", "add", day_file]) -webbrowser.open("https://adventofcode.com/%d/day/%d" % (YEAR, DAY)) -call([CHARMS[system()], day_file])