Solutions to Advent of Code 2020 edition 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.
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.
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