Skip to content
This repository has been archived by the owner on Dec 31, 2021. It is now read-only.

Latest commit

 

History

History
78 lines (60 loc) · 6.07 KB

README.md

File metadata and controls

78 lines (60 loc) · 6.07 KB

NullTek Documentation Advent of Code 2021

Language Repo Tests License Code Style Stars

Had a stab at the 2021 advent of code challenge.

These are not ideal or reference solutions by any stretch of the imagination.

Progress

Day Name Status
1 --- Day 1: Sonar Sweep --- ⭐ ⭐ Complete
2 --- Day 2: Dive! --- ⭐ ⭐ Complete
3 --- Day 3: Binary Diagnostic --- ⭐ ⭐ Complete
4 --- Day 4: Giant Squid --- ⭐ ⭐ Complete
5 --- Day 5: Hydrothermal Venture --- ⭐ ⭐ Complete
6 --- Day 6: Lanternfish --- ⭐ ⭐ Complete
7 --- Day 7: The Treachery of Whales --- ⭐ ⭐ Complete
8 --- Day 8: Seven Segment Search --- ⭐ ⭐ Complete
9 --- Day 9: Smoke Basin --- ⭐ ⭐ Complete
10 --- Day 10: Syntax Scoring --- ⭐ ⭐ Complete
11 --- Day 11: Dumbo Octopus --- ⭐ ⭐ Complete
12 --- Day 12: Passage Pathing --- ⭐ ⭐ Complete
13 --- Day 13: Transparent Origami --- ⭐ ⭐ Complete
14 --- Day 14: Extended Polymerization --- ⭐ ⭐ Complete
15 --- Day 15: Chiton --- ⭐ ⭐ Complete
16 --- Day 16: Packet Decoder --- ⭐ ⭐ Complete
17 --- Day 17: Trick Shot --- ⭐ ⭐ Complete
18 --- Day 18: Snailfish --- ⭐ ⭐ Complete
19 --- Day 19: Beacon Scanner --- ⭐ ⭐ Complete
20 --- Day 20: Trench Map --- ⭐ ⭐ Complete
21 --- Day 21: Dirac Dice --- ⭐ ⭐ Complete
22 --- Day 22: Reactor Reboot --- ⭐ ⭐ Complete
23 --- Day 23: Amphipod --- ⭐ ⭐ Complete
24 --- Day 24: Arithmetic Logic Unit --- ⭐ ⭐ Complete
25 --- Day 25: Sea Cucumber --- ⭐ ⭐ Complete

Personal Rules

It's easy to get carried away on this challenge, but I have a full time job and a mountain of other hobbies, so...

  1. This is about having fun, challenging myself and learning new things.
  2. I may skip days, particularly if I am getting bogged down on the problem or life gets in the way (See Rule #1).
  3. This year I am open to using 3rd party non-core python libraries where they would reduce dev time on a problem.
  4. I will not look at any reference solutions until after the event is complete.
  5. I can research ways of efficiently solving general problems required by the task provided it doesn't conflict with Rule #4.

Structure

Every day has its own package in the src, this is used to define any unique code or functions for solving the daily problems. My personal data is included as a text file in each challenge's package under the data subdir, this is so anyone could verify my results without needing my AoC auth token.

The days code is executed using a module in the tests package that executes via a Pytest runner. This pytest modules verify the answers against those I computed in the challenge, you can see the result of all the automated tests in Github Actions.

Repository dependencies for execution are located in requirements.txt.

Used the following third party libs:

  • Numpy - Python lists are cool, but they're kinda terrible when it comes to higher dimensional numeric matrix mathmatics. Why waste your time when there is a well maintained library that is built for doing this efficiently?
  • Bitarray - Python does a lot of things well, but lacking a native way to work with bits via the list paradigm is a huge downside for serial-communications use-cases. Why mess around with huge python types and having to bitmask everything when you can use this beautiful c extension?
  • Frozen Dict - Python dicts are awesome collection types for hashed performance lookup of pretty much anything, however not being able to be hashed can be annoying. The frozendict package implements the rejected PEP for adding a frozen dictionary type, these work like normal dicts but are static such that you can hash them or pickle them ect.

Code formatting is handled via pre-commit see the hooks used on this repo.

License

The source of this repo uses the MIT open-source license, for details on the current licensing see LICENSE.md or click the badge above.