Git Product home page Git Product logo

adventofcode2022's Introduction

AdventOfCode 2022!

 *        +     *           *           *                *    ___ *    *
      *  ( )          | advent of code *           *         |   |
   *    (  •)    *    | 2022    *            +              .|-H-|.    *
       ( •   )      * | https://adventofcode.com/     *   \| (._.)
*     (     • )        +         *      *         *        \(  .  )--<  *
     (  •      )   *     *     +              *        *   (   .   )   +

Puzzles

S M T W Th F S
⭐⭐
Day 01
⭐⭐
Day 02
⭐⭐
Day 03
⭐⭐
Day 04
⭐⭐
Day 05
⭐⭐
Day 06
⭐⭐
Day 07
⭐⭐
Day 08
⭐⭐
Day 09
⭐⭐
Day 10
⭐⭐
Day 11
⭐⭐
Day 12
⭐⭐
Day 13
⭐⭐
Day 14
Got COVID :(
Day 15
Day 16 Day 17 Day 18
Day 19 Day 20 Day 21 Day 22 Day 23 Day 24 Day 25

Development

How to use

The code is commented abundantly, but you can find an overview about the features here as well.

Setup

Please visit the AdventOfCode site and log in. After that, get your cookie from the browser, and add it to the day_generator.dart file´s session variable. This will allow the script to populate your input file.

Boilterplate Generation

In the root of your directory, run dart run day_generator.dart <day>
This will create an input file and a solution file with all the needed boilerplate to have a quick start. It also adds the solution to the corresponding index file, so the solution get imported into main automatically.

Main

To add a new solution, all you have to do is add DayXX() to the day List. Running main automatically prints either all your solutions, or just the last one, depending on your settings.

You can run the main file by running dart run main.dart or dart main.dart in the root of your directory. By default the main file will only show the last solution. If you want to see all of them, you can use the -a or --all flag. You can list all the command line arguments by using the -h or --help flag.

Generic Day

The abstract class all individual days subclass from. When constructed with the correct day, it automatically ready the corresponding input file and provides it with the InputUtil. To access it, just call input inside your class.

Input Util

Automatically reads the input files and provides different methods to parse it.

  • .asString to get the whole input as a single String
  • .getPerLine() splits on \n characters, returning a List with single lines as elements.
  • .getPerWhitespace() splits on \s and \n, essentially returning a List with all the single characters.
  • .getBy(pattern) lets you define your own split logic. It essentially calls Dart´s native .split(pattern)

Parse Util

A place to store useful parsing operations, like creating a List<int> from a List<String>. There will be a lot of opportunities during AoC for you to extend this.

Field Class

A helper class for 2D data, as often present in AoC. Any data can be respresented. For Integers specifically, there are convenience methods in IntegerField. For all available methods, have a look at the abundantly-documented code.

Naming conventions

When using the Boilerplate generator, everything is done for you automatically. However, if you create a solution or input file by yourself: make sure it has a 2-digit number. Concretely, pad days 1-9 as Day01.dart for solutions and aoc01.txt for input.

Helper Packages

Tuple enables operations on pairs/triplets etc of any type. Absolutely needed for most of the puzzles. Collection provides many methods for ...collections... Most importantly, a groupBy and a collection equality interface. Quiver is an awesome toolbox of helper methods for Dart. We mostly use /iterables (similar to Pythons itertools).

Happy Holidays!

adventofcode2022's People

Contributors

nycynik avatar s-ecki avatar testeurmaniak avatar timokz avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.