https://github.com/glguy/advent2019
Advent of Code 2019 solutions
https://github.com/glguy/advent2019
advent-of-code advent-of-code-2019 haskell
Last synced: 10 months ago
JSON representation
Advent of Code 2019 solutions
- Host: GitHub
- URL: https://github.com/glguy/advent2019
- Owner: glguy
- License: isc
- Created: 2019-12-01T05:16:26.000Z (about 6 years ago)
- Default Branch: master
- Last Pushed: 2021-08-07T15:48:40.000Z (over 4 years ago)
- Last Synced: 2025-03-01T08:04:44.060Z (11 months ago)
- Topics: advent-of-code, advent-of-code-2019, haskell
- Language: Haskell
- Size: 254 KB
- Stars: 43
- Watchers: 8
- Forks: 3
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Advent of Code 2019
These are my Advent of Code 2019 solutions. I try to focus on making clean and documented Haskell solutions to each puzzle.
We'll be chatting about AoC on IRC all December. You can find AoC discussion on [freenode](https://freenode.net)'s `##adventofcode` and `#haskell` ([webchat](https://webchat.freenode.net/#haskell,##adventofcode))
## Building
I recommend installing `ghc` with `ghcup`.
```
$ curl https://get-ghcup.haskell.org -sSf | sh
```
I'm using `GHC 8.8.1` this year
```
$ ghcup install 8.8.1
$ ghcup set 8.8.1
```
`cabal-install-3` is the best way to get things built
```
$ cabal update
$ cabal build
```
## Running solutions
All the solutions take an optional command line argument that can be an input file name or `-` to read the input from `stdin`.
```
$ cabal run Day01
...
3188480
4779847
```
## Intcode Interpreter
A few of my solutions rely on a Intcode interpreter library that I have extracted from this repository now that the contest is complete: [Intcode.hs](https://github.com/glguy/intcode/blob/master/src/Intcode.hs)
## Common libraries used
* **containers** - Almost all of the solutions will benefit from having access to `Map` and `Set` types from this package.
* **megaparsec** - Each problem features a simple text-file format input. Parser combinators make it easy to define the simple parser needed to consume these inputs.
* **doctest** - Having checked examples in the documentation makes it easier to understand what code does and easy to add unit tests.