Skip to content

All my Advent of Code solutions. Also a CLI tool for managing and testing Advent of Code challenges.

License

Notifications You must be signed in to change notification settings

jromero132/advent-of-code

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๐ŸŽ„ Advent of Code Solutions (โญ 272) and CLI ๐ŸŽ„

Buy Me a Coffee Advent of Code Made with Python Last commit Language count Badge


AoC 2015 AoC 2016 AoC 2017 AoC 2018 AoC 2019 AoC 2020
AoC 2021 AoC 2022 AoC 2023 AoC 2024 AoC 2025


This project contains all my solutions (โญ 272) for Advent of Code challenges.

Tip

If you are interested in other repositories containing solutions, you can check this compendium: https://github.com/jromero132/really-awesome-advent-of-code.

Warning

Note that this project can automatically download tasks and inputs and submit your solutions to the Advent of Code server. Please use it moderately.

A brief introduction taken from the website:

Advent of Code is an Advent calendar of small programming puzzles for a variety of skill sets and skill levels that can be solved in any programming language you like. People use them as interview prep, company training, university coursework, practice problems, a speed contest, or to challenge each other.

In addition, this project contains a command-line application for managing, testing, solving and submitting Advent of Code challenges. This tool allows users to create challenge setups, run tests, generate test files, and provides solutions for various tasks.

Important

Take into account that if all tests passed and you select the option -a or --answer then the puzzle will be solved, and the output will be copied to the clipboard, so it can be easily pasted in the Advent of Code website. Also note that if you select the option -s or --submit then this answer will be automatically submitted to the Advent of Code server and you will get a console message to let you know whether you answered the task correctly or not ๐Ÿ˜„

Table of Contents

๐ŸŽ„ Stats

From 2015 to 2024, the Advent of Code calendar had 25 challenges with 2 tasks per challenge, earning you up to 50 stars โญ๏ธ per year. Starting from 2025, it will have 12 challenges per year, for a maximum of 24 stars annually.

Year Stars Advent of Code Link
2015 โญ๏ธ20 https://adventofcode.com/2015
2016 โญ๏ธ20 https://adventofcode.com/2016
2017 โญ๏ธ20 https://adventofcode.com/2017
2018 โญ๏ธ20 https://adventofcode.com/2018
2019 โญ๏ธ20 https://adventofcode.com/2019
2020 โญ๏ธ20 https://adventofcode.com/2020
2021 โญ๏ธ20 https://adventofcode.com/2021
2022 โญ๏ธ28 https://adventofcode.com/2022
2023 โญ๏ธ44 https://adventofcode.com/2023
2024 โญ๏ธ50 https://adventofcode.com/2024
2025 โญ๏ธ10 https://adventofcode.com/2025

Features

  • Solutions: Includes implementations for solving Advent of Code challenges.
  • Create Challenges: Set up new Advent of Code challenges for a specified year and day.
  • Generate Test Files: Create multiple test files for a given task.
  • Run Tests: Execute tests for specific tasks with options to continue on failure and solve the task in case all tests passed. Take into account that if the puzzle is solved, then the output will be copied to the clipboard ๐Ÿ˜„
  • Submit Answer: Allows you to automatically submit your answer for a specific task in the Advent of Code challenges. This feature is essential if you who want to validate your solutions against the official Advent of Code server without having to do it manually.

The vscode_tasks directory along with the .vscode directory enhances the development experience for Advent of Code solutions by providing utility scripts and configurations specifically designed for use within Visual Studio Code. This feature streamlines the process of executing and testing solutions, making it easier to validate outputs and manage tasks. This will add a launch configuration to run the current open file solution and 2 tasks, one for running the solution and the other one for testing the solution.

Installation

This application is cross-platform, so it works on Linux, MacOS and Windows. To use it, ensure you have Python >= 3.10 installed. Clone the repository and install the required dependencies:

git clone https://github.com/jromero132/advent-of-code
cd advent-of-code
pip install -r requirements.txt
echo "AOC_COOKIE=<your-aoc-session-cookie>" > .env

Note

The AOC_COOKIE is your Advent of Code session cookie. You can search for it pressing F12 and going into the Network tab in your browser.

See the image below for reference:
Cookie Image

Usage

The application provides several commands. Use the --help option with the app or any command to see its usage.

Commands

  • create: Create a new Advent of Code challenge.
    Current supported languages: (py | python) (cpp | c++)
    Examples:

    • python aoc.py create -d 13: It creates the Python solution for day 13 of the current year.
    • python aoc.py create -y 2021 -d 13: It creates the Python solution for day 13 of year 2021.
    • python aoc.py create -y 2021 -d 13 -l cpp: It creates the C++ solution for day 13 of year 2021. ย 
      ย 
  • test: Run tests for one Advent of Code challenge.
    Current supported languages: (py | python) (cpp | c++)
    Examples:

    • python aoc.py test -d 13: It tests the Python solution for task 1 of day 13 of the current year.
    • python aoc.py test -y 2021 -d 13: It tests the Python solution for task 1 of day 13 of year 2021.
    • python aoc.py test -y 2021 -d 13 -t 2: It tests the Python solution for task 2 of day 13 of year 2021.
    • python aoc.py test -y 2021 -d 13 -t 2 -l cpp: It tests the C++ solution for task 2 of day 13 of year 2021. ย 
      ย 
  • maketests: Create test files for one Advent of Code challenge.
    This barely creates empty files, so, pretty much not used ;)
    Examples:

    • python aoc.py maketests -n 2 -d 13 -t 1: It creates 2 tests for task 1 of day 13 of the current year.
    • python aoc.py maketests -n 2 -y 2021 -d 13 -t 1: It creates 2 tests for task 1 of day 13 of year 2021.

Solutions

This project includes all my solutions for Advent of Code challenges. You can run the solutions directly or use the CLI to test them against provided inputs.

Directory Structure

Each solution is organized by year, day and task, allowing easy access to the implementations.

advent-of-code
โ”œโ”€โ”€ โ‹ฎ
โ”œโ”€โ”€ year
โ”‚   โ”œโ”€โ”€ 2015
โ”‚   โ”‚   โ”œโ”€โ”€ day01
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ task1
โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ tests
โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ 01.in
โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ 01.out
โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ โ‹ฎ
โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ description.md
โ”‚   โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ main.py
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ task2
โ”‚   โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ โ‹ฎ
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ task.in
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ task1.out
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ task2.out
โ”‚   โ”‚   โ”œโ”€โ”€ โ‹ฎ
โ”‚   โ”‚   โ”œโ”€โ”€ โ‹ฎ
โ”‚   โ”‚   โ”œโ”€โ”€ โ‹ฎ
โ”‚   โ”‚   โ””โ”€โ”€ day25
โ”‚   โ”‚       โ””โ”€โ”€ โ‹ฎ
โ”‚   โ”œโ”€โ”€ โ‹ฎ
โ”‚   โ”œโ”€โ”€ โ‹ฎ
โ”‚   โ”œโ”€โ”€ โ‹ฎ
โ”‚   โ””โ”€โ”€ 2025
โ”‚       โ””โ”€โ”€ โ‹ฎ
โ””โ”€โ”€ โ‹ฎ

year/**: Contains subdirectories for each year of challenges. For instance, from 2015 to 2023.

day##/**: Contains the solutions and additional files for each specified day of the Advent of Code challenges. The days are numbered from 01 to 25. Inside each day directory you will find:

  • task1/**: This directory contains the solution for the first task of the Advent of Code challenge for a specific year and day.
    • tests/*: This directory contains input and output files used for validating the solutions of the Advent of Code tasks. It is organized to facilitate testing and comparison of the implemented solutions against expected results.
      • *.in: This file contains sample input data that can be used to test the functionality of the solutions.
      • *.out: This file contains the expected output corresponding to the input data in *.in. It serves as a reference for validating the correctness of the solution by comparing the actual output generated by the program against this expected result.
    • main.py: This file contains the implementation of the solution for the respective task. It processes the input data from task.in, tests/*.in or custom input provided through the standard input, executes the necessary logic to solve the challenge, and generates the output.
  • task2/**: This directory contains the solution for the second task of the Advent of Code challenge for a specific year and day. It has the same structure as the task1 directory.
  • task.in: This file contains my personal input data required for both tasks solutions for the specified year and day.
  • task1.out: This file contains my output or solution for the first task. It serves as a record of the result generated by my implementation based on the input provided in task.in.
  • task2.out: This file contains my output or solution for the second task. It serves as a record of the result generated by my implementation based on the input provided in task.in.

Contributing

Contributions are welcome! Please open an issue or submit a pull request for any improvements or bug fixes.

License

This project is licensed under the MIT License - see the license file for details.

Happy Coding! ๐Ÿš€