https://github.com/brucala/adventofcode2020.jl
Solutions to Advent of Code 2020 in Julia
https://github.com/brucala/adventofcode2020.jl
adventofcode julia
Last synced: 7 days ago
JSON representation
Solutions to Advent of Code 2020 in Julia
- Host: GitHub
- URL: https://github.com/brucala/adventofcode2020.jl
- Owner: brucala
- Created: 2020-12-02T13:24:20.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2021-01-02T15:29:27.000Z (over 5 years ago)
- Last Synced: 2025-03-02T15:48:22.923Z (over 1 year ago)
- Topics: adventofcode, julia
- Language: Julia
- Homepage:
- Size: 10.6 MB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Advent of Code 2020
Solutions to [Advent of Code 2020 edition](https://adventofcode.com/2020) in Julia.
> Disclaimer: these solutions are created just as a way to practice and become more familiar
with the awesome Julia language. They are not optimized for efficiency or for code beauty.
## Benchmarks
To run the benchmarks:
$ julia cli/benchmark.jl
```
┌─────┬──────┬────────────┬────────────┬─────────┐
│ day │ part │ time │ memory │ allocs │
├─────┼──────┼────────────┼────────────┼─────────┤
│ 1 │ 0 │ 9.084 μs │ 3.86 KiB │ 27 │
│ 1 │ 1 │ 28.583 μs │ 68.78 KiB │ 627 │
│ 1 │ 2 │ 157.325 μs │ 1.04 MiB │ 1191 │
├─────┼──────┼────────────┼────────────┼─────────┤
│ 2 │ 0 │ 14.829 μs │ 42.27 KiB │ 27 │
│ 2 │ 1 │ 1.270 ms │ 855.30 KiB │ 12028 │
│ 2 │ 2 │ 1.023 ms │ 855.30 KiB │ 12028 │
├─────┼──────┼────────────┼────────────┼─────────┤
│ 3 │ 0 │ 11.669 μs │ 22.27 KiB │ 27 │
│ 3 │ 1 │ 55.826 μs │ 63.97 KiB │ 980 │
│ 3 │ 2 │ 116.883 μs │ 64.25 KiB │ 982 │
├─────┼──────┼────────────┼────────────┼─────────┤
│ 4 │ 0 │ 14.328 μs │ 38.52 KiB │ 27 │
│ 4 │ 1 │ 1.405 ms │ 1.15 MiB │ 13565 │
│ 4 │ 2 │ 2.940 ms │ 1.83 MiB │ 24773 │
├─────┼──────┼────────────┼────────────┼─────────┤
│ 5 │ 0 │ 11.626 μs │ 20.89 KiB │ 27 │
│ 5 │ 1 │ 801.750 μs │ 700.89 KiB │ 12276 │
│ 5 │ 2 │ 851.077 μs │ 770.46 KiB │ 12305 │
├─────┼──────┼────────────┼────────────┼─────────┤
│ 6 │ 0 │ 14.161 μs │ 37.14 KiB │ 27 │
│ 6 │ 1 │ 573.742 μs │ 726.98 KiB │ 6023 │
│ 6 │ 2 │ 1.811 ms │ 1.61 MiB │ 18785 │
├─────┼──────┼────────────┼────────────┼─────────┤
│ 7 │ 0 │ 20.588 μs │ 88.77 KiB │ 27 │
│ 7 │ 1 │ 4.219 ms │ 3.43 MiB │ 46796 │
│ 7 │ 2 │ 3.015 ms │ 2.03 MiB │ 29537 │
├─────┼──────┼────────────┼────────────┼─────────┤
│ 8 │ 0 │ 10.645 μs │ 12.14 KiB │ 27 │
│ 8 │ 1 │ 482.889 μs │ 395.48 KiB │ 6575 │
│ 8 │ 2 │ 2.362 ms │ 3.53 MiB │ 28938 │
├─────┼──────┼────────────┼────────────┼─────────┤
│ 9 │ 0 │ 11.634 μs │ 19.27 KiB │ 27 │
│ 9 │ 1 │ 321.976 μs │ 537.77 KiB │ 4227 │
│ 9 │ 2 │ 323.349 μs │ 538.08 KiB │ 4229 │
├─────┼──────┼────────────┼────────────┼─────────┤
│ 10 │ 0 │ 8.170 μs │ 2.63 KiB │ 27 │
│ 10 │ 1 │ 13.015 μs │ 21.81 KiB │ 308 │
│ 10 │ 2 │ 41.129 μs │ 42.00 KiB │ 696 │
├─────┼──────┼────────────┼────────────┼─────────┤
│ 11 │ 0 │ 11.790 μs │ 18.78 KiB │ 27 │
│ 11 │ 1 │ 24.672 ms │ 144.19 KiB │ 474 │
│ 11 │ 2 │ 37.411 ms │ 144.19 KiB │ 474 │
├─────┼──────┼────────────┼────────────┼─────────┤
│ 12 │ 0 │ 9.485 μs │ 7.41 KiB │ 27 │
│ 12 │ 1 │ 206.969 μs │ 220.16 KiB │ 3684 │
│ 12 │ 2 │ 202.930 μs │ 216.97 KiB │ 3479 │
├─────┼──────┼────────────┼────────────┼─────────┤
│ 13 │ 0 │ 8.188 μs │ 2.25 KiB │ 27 │
│ 13 │ 1 │ 8.670 μs │ 15.67 KiB │ 162 │
│ 13 │ 2 │ 30.659 μs │ 15.36 KiB │ 160 │
├─────┼──────┼────────────┼────────────┼─────────┤
│ 14 │ 0 │ 12.961 μs │ 27.78 KiB │ 27 │
│ 14 │ 1 │ 416.098 μs │ 476.92 KiB │ 6687 │
│ 14 │ 2 │ 38.982 ms │ 32.09 MiB │ 812635 │
├─────┼──────┼────────────┼────────────┼─────────┤
│ 15 │ 0 │ 8.108 μs │ 2.00 KiB │ 27 │
│ 15 │ 1 │ 13.516 μs │ 8.72 KiB │ 7 │
│ 15 │ 2 │ 788.701 ms │ 114.44 MiB │ 8 │
├─────┼──────┼────────────┼────────────┼─────────┤
│ 16 │ 0 │ 14.282 μs │ 40.53 KiB │ 27 │
│ 16 │ 1 │ 822.866 μs │ 567.34 KiB │ 2921 │
│ 16 │ 2 │ 1.326 ms │ 1.27 MiB │ 5427 │
├─────┼──────┼────────────┼────────────┼─────────┤
│ 17 │ 0 │ 8.157 μs │ 2.09 KiB │ 27 │
│ 17 │ 1 │ 1.770 ms │ 310.77 KiB │ 4500 │
│ 17 │ 2 │ 54.911 ms │ 2.70 MiB │ 32084 │
├─────┼──────┼────────────┼────────────┼─────────┤
│ 18 │ 0 │ 14.064 μs │ 41.28 KiB │ 27 │
│ 18 │ 1 │ 1.993 ms │ 641.61 KiB │ 13334 │
│ 18 │ 2 │ 2.043 ms │ 694.20 KiB │ 14424 │
├─────┼──────┼────────────┼────────────┼─────────┤
│ 19 │ 0 │ 204.997 ms │ 15.95 MiB │ 291833 │
│ 19 │ 1 │ 363.072 ms │ 989.56 KiB │ 892 │
│ 19 │ 2 │ 611.156 ms │ 1.03 MiB │ 1441 │
├─────┼──────┼────────────┼────────────┼─────────┤
│ 20 │ 0 │ 658.605 μs │ 592.17 KiB │ 6228 │
│ 20 │ 1 │ 34.390 ms │ 54.74 MiB │ 681064 │
│ 20 │ 2 │ 43.886 ms │ 57.88 MiB │ 726401 │
├─────┼──────┼────────────┼────────────┼─────────┤
│ 21 │ 0 │ 13.305 μs │ 32.91 KiB │ 27 │
│ 21 │ 1 │ 1.473 ms │ 641.55 KiB │ 6818 │
│ 21 │ 2 │ 1.470 ms │ 643.87 KiB │ 6855 │
├─────┼──────┼────────────┼────────────┼─────────┤
│ 22 │ 0 │ 18.850 μs │ 9.63 KiB │ 102 │
│ 22 │ 1 │ 11.486 μs │ 6.06 KiB │ 13 │
│ 22 │ 2 │ 105.201 ms │ 206.48 MiB │ 1174906 │
├─────┼──────┼────────────┼────────────┼─────────┤
│ 23 │ 0 │ 8.480 μs │ 2.25 KiB │ 29 │
│ 23 │ 1 │ 1.673 μs │ 1.13 KiB │ 25 │
│ 23 │ 2 │ 340.134 ms │ 5.63 MiB │ 18 │
├─────┼──────┼────────────┼────────────┼─────────┤
│ 24 │ 0 │ 1.118 ms │ 566.30 KiB │ 10698 │
│ 24 │ 1 │ 113.698 μs │ 57.26 KiB │ 31 │
│ 24 │ 2 │ 169.482 ms │ 13.71 MiB │ 1769 │
├─────┼──────┼────────────┼────────────┼─────────┤
│ 25 │ 0 │ 8.893 μs │ 2.69 KiB │ 38 │
│ 25 │ 1 │ 42.924 ms │ 0 bytes │ 0 │
└─────┴──────┴────────────┴────────────┴─────────┘
```
> **Part 0** refers to the **parsing of the input data**. Only for days 19-20, 22-25 the
parsing is decoupled from the solutions. For the other days this benchmark only accounts
for reading the input file, and the actual parsing time is included in each solution.
## Other CLI tools
To generate (src and test) templates for a given day:
```
$ julia cli/generate_day.jl -h
usage: generate_day.jl [-h] nday
positional arguments:
nday day number for files to be generated
optional arguments:
-h, --help show this help message and exit
```
To download the input data of a given day:
```
$ julia cli/get_input.jl -h
usage: get_input.jl [-d DAY] [-h]
optional arguments:
-d, --day DAY day number for the input to be downloaded. If not
given take today's input (type: Int64)
-h, --help show this help message and exit
```