Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/bznein/aoc2020
AoC2020 Solves - in Go! This year the solves will most likely be late!
https://github.com/bznein/aoc2020
Last synced: 14 days ago
JSON representation
AoC2020 Solves - in Go! This year the solves will most likely be late!
- Host: GitHub
- URL: https://github.com/bznein/aoc2020
- Owner: bznein
- Created: 2020-11-30T12:02:27.000Z (about 4 years ago)
- Default Branch: main
- Last Pushed: 2020-12-25T10:57:10.000Z (about 4 years ago)
- Last Synced: 2024-06-20T19:15:15.697Z (8 months ago)
- Language: Go
- Size: 2.63 MB
- Stars: 2
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# AoC2020
AoC2020 Solves - in Go! This year the solves will most likely be late!## Structure
The repository is structured as follwos:- [pkg](./pkg) directory:
- One package, named Day##, for the ## day of the month (e.g. [Day01](./pkg/Day01))
- Every package presents the same interface: one exported method `func Solve(input string) (int,int)` which provides the answers for part 1 and part 2
- (note, Day08 returns, at the moment, `(int64,int64)`, but that will change as soon as I care)
- (note, Day21 has return type (int,string), given the nature of the puzzle)
- Auxiliary packages for visualization purposes and to gather common functionalities (or those that I believe will become shared in the future)
- [cmd](./cmd) directory:
- [solver.go](./cmd/solver.go) is the main entrance point, it can be compiled into an executable that can either execute a specific day, or present the execution time of all days
- [solver_test.go](./cmd/solver_test.go) provides unit testing to verify that refactoring doesn't break old days
- *NOTE*: these are NOT unit tests on the examples provided in the puzzle. I fill them after solving the day to make sure I do not break old days when refactoring.## Execution
To execute unit tests, simply run `go test ./...` from the `root` directory (note: most packages don't have tests so far, so you might just care about running it inside `cmd`)To execute the solver, go into the `cmd` directory and build the executable: `go build solver.go`. This will create an executable called `solver`, which can be either used to solve a single day or to time the execution times of all days (note: visualization is also possible, but enabled only for few days- nonexisting or broken for the others)
### To execute a single day:
`./solver --day XX`
Example:
```
./solver --day 12
2020/12/12 21:36:34 input.ReadInput took 57.068µs
2020/12/12 21:36:34 Day12.Solve took 59.761µs
Part 1: 1424, Part 2:63447
```### To test the execution time
```
2020/12/12 21:37:15 input.ReadInput took 42.736µs
2020/12/12 21:37:15 input.ReadInput took 44.901µs
2020/12/12 21:37:15 input.ReadInput took 34.208µs
2020/12/12 21:37:15 input.ReadInput took 57.248µs
2020/12/12 21:37:15 input.ReadInput took 49.373µs
2020/12/12 21:37:15 input.ReadInput took 49.267µs
2020/12/12 21:37:15 input.ReadInput took 95.57µs
2020/12/12 21:37:15 input.ReadInput took 41.62µs
2020/12/12 21:37:15 input.ReadInput took 42.685µs
2020/12/12 21:37:15 input.ReadInput took 42.908µs
2020/12/12 21:37:15 input.ReadInput took 47.453µs
2020/12/12 21:37:15 input.ReadInput took 53.19µs
2020/12/12 21:37:15 input.ReadInput took 39.559µs
2020/12/12 21:37:15 input.ReadInput took 38.081µs
2020/12/12 21:37:15 input.ReadInput took 29.059µs
2020/12/12 21:37:15 input.ReadInput took 25.396µs
2020/12/12 21:37:15 input.ReadInput took 31.637µs
2020/12/12 21:37:15 input.ReadInput took 35.344µs
2020/12/12 21:37:15 input.ReadInput took 30.806µs
2020/12/12 21:37:15 input.ReadInput took 25.045µs
2020/12/12 21:37:15 input.ReadInput took 22.865µs
2020/12/12 21:37:15 input.ReadInput took 23.192µs
2020/12/12 21:37:15 input.ReadInput took 28.213µs
2020/12/12 21:37:15 input.ReadInput took 38.441µs
2020/12/12 21:37:15 input.ReadInput took 40.461µs
2020/12/12 21:37:15 main.readAllInputs took 1.304148ms
2020/12/12 21:37:15 Day01.Solve took 33.287µs
2020/12/12 21:37:15 Day02.Solve took 249.415µs
2020/12/12 21:37:15 Day03.Solve took 37.676µs
2020/12/12 21:37:15 Day04.Solve took 572.614µs
2020/12/12 21:37:15 Day05.Solve took 529.631µs
2020/12/12 21:37:15 Day06.Solve took 1.093418ms
2020/12/12 21:37:15 Day07.Solve took 3.9658ms
2020/12/12 21:37:15 Day08.Solve took 15.741141ms
2020/12/12 21:37:15 Day09.Solve took 2.347936ms
2020/12/12 21:37:15 Day10.Solve took 19.757µs
2020/12/12 21:37:15 Day11.Solve took 41.333085ms
2020/12/12 21:37:15 Day12.Solve took 41.835µs
2020/12/12 21:37:15 Day13.Solve took 48ns
2020/12/12 21:37:15 Day14.Solve took 39ns
2020/12/12 21:37:15 Day15.Solve took 40ns
2020/12/12 21:37:15 Day16.Solve took 39ns
2020/12/12 21:37:15 Day17.Solve took 39ns
2020/12/12 21:37:15 Day18.Solve took 38ns
2020/12/12 21:37:15 Day19.Solve took 39ns
2020/12/12 21:37:15 Day20.Solve took 39ns
2020/12/12 21:37:15 Day21.Solve took 38ns
2020/12/12 21:37:15 Day22.Solve took 39ns
2020/12/12 21:37:15 Day23.Solve took 38ns
2020/12/12 21:37:15 Day24.Solve took 38ns
2020/12/12 21:37:15 Day25.Solve took 41ns
2020/12/12 21:37:15 main.timeSolves took 67.457204ms
```This will report the execution times of all the file reading and then of every single day (note: it automatically executes up to day25, even if only the stub is present, but the impact on execution time is negligible, less than `50ns` for each day)
[Note about Day18](./pkg/Day18/README.md)
#### Inputs
The program expects input files to be in an `/inputs` folder, each day named as `X.txt` (e.g. `1.txt`, `15.txt`, please note the absence of a leading zero here)