Solutions to Advent of Code 2021 edition in Julia.
To run the benchmarks:
$ julia cli/benchmark.jl
┌─────┬──────┬────────────┬────────────┬──────────┐
│ day │ part │ time │ memory │ allocs │
├─────┼──────┼────────────┼────────────┼──────────┤
│ 1 │ 0 │ 127.483 μs │ 434.36 KiB │ 6035 │
│ 1 │ 1 │ 1.608 μs │ 20.30 KiB │ 4 │
│ 1 │ 2 │ 43.942 μs │ 192.14 KiB │ 2003 │
├─────┼──────┼────────────┼────────────┼──────────┤
│ 2 │ 0 │ 277.509 μs │ 371.02 KiB │ 2033 │
│ 2 │ 1 │ 678.843 ns │ 0 bytes │ 0 │
│ 2 │ 2 │ 783.379 ns │ 0 bytes │ 0 │
├─────┼──────┼────────────┼────────────┼──────────┤
│ 3 │ 0 │ 229.407 μs │ 308.42 KiB │ 51 │
│ 3 │ 1 │ 4.280 μs │ 3.34 KiB │ 63 │
│ 3 │ 2 │ 55.354 μs │ 18.66 KiB │ 331 │
├─────┼──────┼────────────┼────────────┼──────────┤
│ 4 │ 0 │ 511.318 μs │ 565.81 KiB │ 8254 │
│ 4 │ 1 │ 159.582 μs │ 80.05 KiB │ 1516 │
│ 4 │ 2 │ 159.688 μs │ 80.48 KiB │ 1516 │
├─────┼──────┼────────────┼────────────┼──────────┤
│ 5 │ 0 │ 789.002 μs │ 916.69 KiB │ 14005 │
│ 5 │ 1 │ 6.964 ms │ 10.68 MiB │ 369 │
│ 5 │ 2 │ 13.882 ms │ 12.45 MiB │ 542 │
├─────┼──────┼────────────┼────────────┼──────────┤
│ 6 │ 0 │ 24.824 μs │ 27.30 KiB │ 31 │
│ 6 │ 1 │ 26.635 μs │ 45.62 KiB │ 326 │
│ 6 │ 2 │ 67.999 μs │ 139.12 KiB │ 1030 │
├─────┼──────┼────────────┼────────────┼──────────┤
│ 7 │ 0 │ 83.004 μs │ 82.14 KiB │ 32 │
│ 7 │ 1 │ 2.314 μs │ 15.88 KiB │ 2 │
│ 7 │ 2 │ 1.426 μs │ 15.88 KiB │ 2 │
├─────┼──────┼────────────┼────────────┼──────────┤
│ 8 │ 0 │ 1.094 ms │ 1.38 MiB │ 13834 │
│ 8 │ 1 │ 13.555 μs │ 37.50 KiB │ 400 │
│ 8 │ 2 │ 1.322 ms │ 1.66 MiB │ 19232 │
├─────┼──────┼────────────┼────────────┼──────────┤
│ 9 │ 0 │ 209.610 μs │ 307.77 KiB │ 48 │
│ 9 │ 1 │ 1.927 ms │ 6.85 MiB │ 80000 │
│ 9 │ 2 │ 3.384 ms │ 12.71 MiB │ 116597 │
├─────┼──────┼────────────┼────────────┼──────────┤
│ 10 │ 0 │ 97.995 μs │ 28.53 KiB │ 29 │
│ 10 │ 1 │ 130.774 μs │ 30.94 KiB │ 330 │
│ 10 │ 2 │ 166.011 μs │ 38.97 KiB │ 389 │
├─────┼──────┼────────────┼────────────┼──────────┤
│ 11 │ 0 │ 5.892 μs │ 5.98 KiB │ 39 │
│ 11 │ 1 │ 235.263 μs │ 442.89 KiB │ 5052 │
│ 11 │ 2 │ 597.653 μs │ 1.08 MiB │ 12595 │
├─────┼──────┼────────────┼────────────┼──────────┤
│ 12 │ 0 │ 15.251 μs │ 20.77 KiB │ 314 │
│ 12 │ 1 │ 3.193 ms │ 6.39 MiB │ 91585 │
│ 12 │ 2 │ 125.915 ms │ 204.99 MiB │ 2938737 │
├─────┼──────┼────────────┼────────────┼──────────┤
│ 13 │ 0 │ 483.460 μs │ 604.05 KiB │ 9553 │
│ 13 │ 1 │ 228.488 μs │ 245.12 KiB │ 8852 │
│ 13 │ 2 │ 1.152 ms │ 923.81 KiB │ 27387 │
├─────┼──────┼────────────┼────────────┼──────────┤
│ 14 │ 0 │ 47.717 μs │ 100.00 KiB │ 1537 │
│ 14 │ 1 │ 214.679 μs │ 464.92 KiB │ 2880 │
│ 14 │ 2 │ 1.305 ms │ 1.94 MiB │ 12486 │
├─────┼──────┼────────────┼────────────┼──────────┤
│ 15 │ 0 │ 193.718 μs │ 431.72 KiB │ 46 │
│ 15 │ 1 │ 6.076 ms │ 4.24 MiB │ 40099 │
│ 15 │ 2 │ 192.774 ms │ 105.34 MiB │ 1000641 │
├─────┼──────┼────────────┼────────────┼──────────┤
│ 16 │ 0 │ 3.533 μs │ 4.38 KiB │ 25 │
│ 16 │ 1 │ 812.626 μs │ 2.11 MiB │ 7574 │
│ 16 │ 2 │ 770.983 μs │ 2.03 MiB │ 6237 │
├─────┼──────┼────────────┼────────────┼──────────┤
│ 17 │ 0 │ 4.238 μs │ 3.67 KiB │ 51 │
│ 17 │ 1 │ 1.697 ns │ 0 bytes │ 0 │
│ 17 │ 2 │ 16.407 ms │ 363.98 KiB │ 22 │
├─────┼──────┼────────────┼────────────┼──────────┤
│ 18 │ 0 │ 177.818 μs │ 134.86 KiB │ 2418 │
│ 18 │ 1 │ 15.081 ms │ 10.65 MiB │ 349089 │
│ 18 │ 2 │ 239.023 ms │ 150.38 MiB │ 4927526 │
├─────┼──────┼────────────┼────────────┼──────────┤
│ 19 │ 0 │ 1.830 ms │ 2.88 MiB │ 18082 │
│ 19 │ 1 │ 413.023 ms │ 78.42 MiB │ 1071291 │
│ 19 │ 2 │ 22.885 μs │ 62.92 KiB │ 781 │
├─────┼──────┼────────────┼────────────┼──────────┤
│ 20 │ 0 │ 243.043 μs │ 91.98 KiB │ 159 │
│ 20 │ 1 │ 1.155 ms │ 16.81 KiB │ 108 │
│ 20 │ 2 │ 71.648 ms │ 751.11 KiB │ 2700 │
├─────┼──────┼────────────┼────────────┼──────────┤
│ 21 │ 0 │ 3.630 μs │ 1.97 KiB │ 28 │
│ 21 │ 1 │ 757.795 ns │ 160 bytes │ 2 │
│ 21 │ 2 │ 7.492 ms │ 10.58 MiB │ 93857 │
├─────┼──────┼────────────┼────────────┼──────────┤
│ 22 │ 0 │ 1.477 ms │ 1.17 MiB │ 17540 │
│ 22 │ 1 │ 2.345 ms │ 427.78 KiB │ 7143 │
│ 22 │ 2 │ 1.147 s │ 1.15 GiB │ 15635123 │
├─────┼──────┼────────────┼────────────┼──────────┤
│ 23 │ 0 │ 4.070 μs │ 2.81 KiB │ 34 │
│ 23 │ 1 │ 1.215 s │ 598.96 MiB │ 7341533 │
│ 23 │ 2 │ 1.829 s │ 1.12 GiB │ 11437893 │
├─────┼──────┼────────────┼────────────┼──────────┤
│ 24 │ 0 │ 204.136 μs │ 141.81 KiB │ 1195 │
│ 24 │ 1 │ 9.692 ms │ 4.65 MiB │ 125898 │
│ 24 │ 2 │ 2.103 s │ 798.28 MiB │ 22536832 │
├─────┼──────┼────────────┼────────────┼──────────┤
│ 25 │ 0 │ 285.275 μs │ 296.20 KiB │ 52 │
│ 25 │ 1 │ 96.228 ms │ 16.89 MiB │ 14616 │
└─────┴──────┴────────────┴────────────┴──────────┘
Part 0 refers to the parsing of the input data.
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