Skip to content

brucala/AdventOfCode2020.jl

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Advent of Code 2020

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.

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

About

Solutions to Advent of Code 2020 in Julia

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages