An open API service indexing awesome lists of open source software.

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

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
```