Skip to main content

Script your way to rescue Christmas as part of the ElfScript Brigade team.

Project description

ESB - ElfScript Brigade

Script your way to rescue Christmas as part of the ElfScript Brigade team.

This tool transforms Advent of Code into a CLI adventure

ElfScript Brigade Logo

PyPI - Version PyPI - Python Version License: GPL v3 GitHub Actions Workflow Status Codecov CodeFactor Grade


In the bureaucratic workshop of Santa's IT department, where the spirit of Christmas and the magic of coding converge, a special group of coding elves emerged known as the ElfScript Brigade. These skilled and whimsical elves were bestowed with the mission of safeguarding the joyous essence of Christmas through the power of scripting and coding.

esb is a CLI tool to help us elves to save Christmas for the Advent Of Code yearly events (Thank you Eric 😉!).

This tool allows us elves to:

  1. Fetch puzzle statement and puzzle data
  2. Create language agnostic boilerplate code*Check supported languages
  3. Test run and submit solutions
  4. Shiny dashboards
  5. Follow the rules of automation

Check out an example repo created using esb!

Table of Contents

Installation

pip install esb

Usage

TLDR;

mkdir my_aoc_repo && cd my_aoc_repo

# Initializes ESB repo
esb init

# Create boilerplate code and fetches input data
esb start --lang rust --year 2023 --day 13

# Code, code, code...

# Run code and submit answer
esb run --lang rust --year 2023 --day 13 --part 1 --submit

# Collect stars!

Initializing the repository

Create a git repository and initialize an esb repository too.

mkdir my_aoc_repo
cd my_aoc_repo
git init
esb init
git commit -m  "I now pledge to help, and I will forever help, saving christmas."

Add your credentials

Set your credentials by locating your session cookie or save it in a .env file. If the cookie expires, you'll have to redo this step for fetching and submitting data.

export AOC_SESSION_COOKIE="<my_current_cookie>"
# Or
echo "<my_current_cookie>" > .env

How to find your Session Cookie? Check SESSION_COOKIE.md.

Fetching problems

Downloads puzzle statement, data and correct answers (if already solved).

esb fetch --year 2016 --day 9

# Hint: Use brace expansion for fetching multiple days or years
esb fetch --year 2023 --day {1..25}

Also fetches default testing files. Check TESTING.md for more information.

Creating boilerplate code

Run start command to create code for the given language. It also fetches data if necessary

esb start --lang rust --year 2023 --day 13

Running tests

Runs tests or selected tests with:

esb test --lang rust --year 2016 --day 9 --part 1

To select tests, pass --filter and select the test name:

esb test --lang rust --year 2016 --day 9 --part 1 --filter "test_01"

Check TESTING.md for more information.

Running for real

Runs the code for the given input. Also can submit solutions.

esb run --lang rust --year 2016 --day 9 --part 1

# Run solution and then submit
esb run --lang rust --year 2016 --day 9 --part 1 --submit

💡 Hint: --lang, --year, --day and --part arguments are cached.

esb start --lang python --year 2018 --day 4
esb test  # Will test the solution created above

Check current cached arguments with esb status Eg:

= Working on: python, 2018 day 4 part 1 =

Check your progress in the command line

esb status shows current collected stars and some additional information.

esb status

esb stats

Viewing problem statement and inputs

To read the problem statements run esb show. The flags --show-input and --show-test might be helpful for viewing the inputs.

esb show --year 2019 --day 19

The dashboards

esb generates two dashboards.

  1. A section in README.md to place a summary of the solutions;
  2. A section in REPORT.md with detailed data on solution attempts and timing;

⚠️ Both files are editable and can be modified manually, except for the section in between the tags <!-- Do not delete ....

The dashboards are updated automatically when solutions are correct. It's possible to generate again by running:

esb dashboard

Currently supported languages

Currently there are built in 3 supported languages. They set up the basic code for a given day that allows esb to run and test solutions. Check the documentation for each language and how to create your own boilerplate.

Any program that supports the FIREPLACEv1 prococol can use esb tooling.

FAQ

  • This tool is so stupid! I can hack my stats anytime I want!

    As Acting Brigade Chief, I have no powers nor will to enforce any regulatory actions against cheating. I leave this job to Santa's higher council and, of course, the guilt of leaving kids without their gifts.

  • Can I use this tool to bash the servers

    No!.

  • But, why python 3.11? What about my Debian friends?

    Because the developer wanted to some of the newest features.

  • You could steal my session cookies right?

    Yes, but I won't. Remember to read this code. Also, watch out for malicious dependencies.

  • I'd like to store the datababse and cache data

    Please don't store it publicly because it goes against AoC's Code of Conduct. If you want to do it in private repos, just remove the .cache dir from .gitignore.

Rules of Automation

ElfScript Brigade does follow the automation guidelines on the /r/adventofcode community wiki Specifically:

Once inputs are downloaded, they are cached locally in the .cache directory.

⚠️ This cache data is .gitignonre'd along with the database used to track user progress. If you wish to store this information, please do it in private repositores given that sharing some of this data goes against the "Code of Conduct" for AoC.

If you suspect your input is corrupted, you can manually request a fresh copy using esb fetch ... --force The User-Agent header for the HTTP requests is set to me @luxedo since I maintain this tool :)

License

ESB - Script your way to rescue Christmas as part of the ElfScript Brigade team. Copyright (C) 2024 Luiz Eduardo Amaral luizamaral306@gmail.com

This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

esb-0.2.0.tar.gz (56.5 kB view details)

Uploaded Source

Built Distribution

esb-0.2.0-py3-none-any.whl (73.2 kB view details)

Uploaded Python 3

File details

Details for the file esb-0.2.0.tar.gz.

File metadata

  • Download URL: esb-0.2.0.tar.gz
  • Upload date:
  • Size: 56.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.1.1 CPython/3.12.7

File hashes

Hashes for esb-0.2.0.tar.gz
Algorithm Hash digest
SHA256 788de0029b6de330908b97e91d8f44b18ba8fd53938a3ed3c9417f04f3ec9e8c
MD5 806633d5995f58bdc70a89710e3a1b31
BLAKE2b-256 9f076d6b037b7009a27350a7cd72b02d0c46cba1718322e3ab7bd466700afd7e

See more details on using hashes here.

Provenance

The following attestation bundles were made for esb-0.2.0.tar.gz:

Publisher: publish.yml on luxedo/esb

Attestations:

File details

Details for the file esb-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: esb-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 73.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.1.1 CPython/3.12.7

File hashes

Hashes for esb-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 2bf464666c3fa483af2355a42e3d802e4cc053e8256ecb9c0b7d69b5d4b68a75
MD5 67ab3fc29dc3e4ba972be583e890a129
BLAKE2b-256 a27133c2d00596e4c755098e30281a54d99c7a30c1b703847ca41b42aded64e2

See more details on using hashes here.

Provenance

The following attestation bundles were made for esb-0.2.0-py3-none-any.whl:

Publisher: publish.yml on luxedo/esb

Attestations:

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page