├── .github ├── dependabot.yml └── workflows │ ├── hs-bench.yml │ ├── hs.yml │ ├── hyperfine.yml │ ├── kt-bench.yml │ ├── kt.yml │ ├── py-bench.yml │ ├── py.yml │ ├── rs-bench.yml │ └── rs.yml ├── .gitignore ├── Makefile ├── README.md ├── docs ├── .gitignore ├── .ruby-version ├── Gemfile ├── Gemfile.lock ├── _config.yml ├── aoc2020-bench.html ├── benchmark.svg ├── criterion │ ├── day 1 part 1 │ │ ├── base │ │ │ ├── benchmark.json │ │ │ ├── estimates.json │ │ │ ├── raw.csv │ │ │ ├── sample.json │ │ │ └── tukey.json │ │ ├── new │ │ │ ├── benchmark.json │ │ │ ├── estimates.json │ │ │ ├── raw.csv │ │ │ ├── sample.json │ │ │ └── tukey.json │ │ └── report │ │ │ ├── MAD.svg │ │ │ ├── SD.svg │ │ │ ├── index.html │ │ │ ├── mean.svg │ │ │ ├── median.svg │ │ │ ├── pdf.svg │ │ │ ├── pdf_small.svg │ │ │ ├── regression.svg │ │ │ ├── regression_small.svg │ │ │ ├── slope.svg │ │ │ └── typical.svg │ ├── day 1 part 2 │ │ ├── base │ │ │ ├── benchmark.json │ │ │ ├── estimates.json │ │ │ ├── raw.csv │ │ │ ├── sample.json │ │ │ └── tukey.json │ │ ├── new │ │ │ ├── benchmark.json │ │ │ ├── estimates.json │ │ │ ├── raw.csv │ │ │ ├── sample.json │ │ │ └── tukey.json │ │ └── report │ │ │ ├── MAD.svg │ │ │ ├── SD.svg │ │ │ ├── index.html │ │ │ ├── mean.svg │ │ │ ├── median.svg │ │ │ ├── pdf.svg │ │ │ ├── pdf_small.svg │ │ │ ├── regression.svg │ │ │ ├── regression_small.svg │ │ │ ├── slope.svg │ │ │ └── typical.svg │ ├── day 10 part 1 │ │ ├── base │ │ │ ├── benchmark.json │ │ │ ├── estimates.json │ │ │ ├── raw.csv │ │ │ ├── sample.json │ │ │ └── tukey.json │ │ ├── new │ │ │ ├── benchmark.json │ │ │ ├── estimates.json │ │ │ ├── raw.csv │ │ │ ├── sample.json │ │ │ └── tukey.json │ │ └── report │ │ │ ├── MAD.svg │ │ │ ├── SD.svg │ │ │ ├── index.html │ │ │ ├── mean.svg │ │ │ ├── median.svg │ │ │ ├── pdf.svg │ │ │ ├── pdf_small.svg │ │ │ ├── regression.svg │ │ │ ├── regression_small.svg │ │ │ ├── slope.svg │ │ │ └── typical.svg │ ├── day 10 part 2 │ │ ├── base │ │ │ ├── benchmark.json │ │ │ ├── estimates.json │ │ │ ├── raw.csv │ │ │ ├── sample.json │ │ │ └── tukey.json │ │ ├── new │ │ │ ├── benchmark.json │ │ │ ├── estimates.json │ │ │ ├── raw.csv │ │ │ ├── sample.json │ │ │ └── tukey.json │ │ └── report │ │ │ ├── MAD.svg │ │ │ ├── SD.svg │ │ │ ├── index.html │ │ │ ├── mean.svg │ │ │ ├── median.svg │ │ │ ├── pdf.svg │ │ │ ├── pdf_small.svg │ │ │ ├── regression.svg │ │ │ ├── regression_small.svg │ │ │ ├── slope.svg │ │ │ └── typical.svg │ ├── day 11 part 1 │ │ ├── base │ │ │ ├── benchmark.json │ │ │ ├── estimates.json │ │ │ ├── raw.csv │ │ │ ├── sample.json │ │ │ └── tukey.json │ │ ├── new │ │ │ ├── benchmark.json │ │ │ ├── estimates.json │ │ │ ├── raw.csv │ │ │ ├── sample.json │ │ │ └── tukey.json │ │ └── report │ │ │ ├── MAD.svg │ │ │ ├── SD.svg │ │ │ ├── index.html │ │ │ ├── iteration_times.svg │ │ │ ├── iteration_times_small.svg │ │ │ ├── mean.svg │ │ │ ├── median.svg │ │ │ ├── pdf.svg │ │ │ ├── pdf_small.svg │ │ │ └── typical.svg │ ├── day 11 part 2 │ │ ├── base │ │ │ ├── benchmark.json │ │ │ ├── estimates.json │ │ │ ├── raw.csv │ │ │ ├── sample.json │ │ │ └── tukey.json │ │ ├── new │ │ │ ├── benchmark.json │ │ │ ├── estimates.json │ │ │ ├── raw.csv │ │ │ ├── sample.json │ │ │ └── tukey.json │ │ └── report │ │ │ ├── MAD.svg │ │ │ ├── SD.svg │ │ │ ├── index.html │ │ │ ├── iteration_times.svg │ │ │ ├── iteration_times_small.svg │ │ │ ├── mean.svg │ │ │ ├── median.svg │ │ │ ├── pdf.svg │ │ │ ├── pdf_small.svg │ │ │ └── typical.svg │ ├── day 12 part 1 │ │ ├── base │ │ │ ├── benchmark.json │ │ │ ├── estimates.json │ │ │ ├── raw.csv │ │ │ ├── sample.json │ │ │ └── tukey.json │ │ ├── new │ │ │ ├── benchmark.json │ │ │ ├── estimates.json │ │ │ ├── raw.csv │ │ │ ├── sample.json │ │ │ └── tukey.json │ │ └── report │ │ │ ├── MAD.svg │ │ │ ├── SD.svg │ │ │ ├── index.html │ │ │ ├── mean.svg │ │ │ ├── median.svg │ │ │ ├── pdf.svg │ │ │ ├── pdf_small.svg │ │ │ ├── regression.svg │ │ │ ├── regression_small.svg │ │ │ ├── slope.svg │ │ │ └── typical.svg │ ├── day 12 part 2 │ │ ├── base │ │ │ ├── benchmark.json │ │ │ ├── estimates.json │ │ │ ├── raw.csv │ │ │ ├── sample.json │ │ │ └── tukey.json │ │ ├── new │ │ │ ├── benchmark.json │ │ │ ├── estimates.json │ │ │ ├── raw.csv │ │ │ ├── sample.json │ │ │ └── tukey.json │ │ └── report │ │ │ ├── MAD.svg │ │ │ ├── SD.svg │ │ │ ├── index.html │ │ │ ├── mean.svg │ │ │ ├── median.svg │ │ │ ├── pdf.svg │ │ │ ├── pdf_small.svg │ │ │ ├── regression.svg │ │ │ ├── regression_small.svg │ │ │ ├── slope.svg │ │ │ └── typical.svg │ ├── day 13 part 1 │ │ ├── base │ │ │ ├── benchmark.json │ │ │ ├── estimates.json │ │ │ ├── raw.csv │ │ │ ├── sample.json │ │ │ └── tukey.json │ │ ├── new │ │ │ ├── benchmark.json │ │ │ ├── estimates.json │ │ │ ├── raw.csv │ │ │ ├── sample.json │ │ │ └── tukey.json │ │ └── report │ │ │ ├── MAD.svg │ │ │ ├── SD.svg │ │ │ ├── index.html │ │ │ ├── mean.svg │ │ │ ├── median.svg │ │ │ ├── pdf.svg │ │ │ ├── pdf_small.svg │ │ │ ├── regression.svg │ │ │ ├── regression_small.svg │ │ │ ├── slope.svg │ │ │ └── typical.svg │ ├── day 13 part 2 │ │ ├── base │ │ │ ├── benchmark.json │ │ │ ├── estimates.json │ │ │ ├── raw.csv │ │ │ ├── sample.json │ │ │ └── tukey.json │ │ ├── new │ │ │ ├── benchmark.json │ │ │ ├── estimates.json │ │ │ ├── raw.csv │ │ │ ├── sample.json │ │ │ └── tukey.json │ │ └── report │ │ │ ├── MAD.svg │ │ │ ├── SD.svg │ │ │ ├── index.html │ │ │ ├── mean.svg │ │ │ ├── median.svg │ │ │ ├── pdf.svg │ │ │ ├── pdf_small.svg │ │ │ ├── regression.svg │ │ │ ├── regression_small.svg │ │ │ ├── slope.svg │ │ │ └── typical.svg │ ├── day 14 part 1 │ │ ├── base │ │ │ ├── benchmark.json │ │ │ ├── estimates.json │ │ │ ├── raw.csv │ │ │ ├── sample.json │ │ │ └── tukey.json │ │ ├── new │ │ │ ├── benchmark.json │ │ │ ├── estimates.json │ │ │ ├── raw.csv │ │ │ ├── sample.json │ │ │ └── tukey.json │ │ └── report │ │ │ ├── MAD.svg │ │ │ ├── SD.svg │ │ │ ├── index.html │ │ │ ├── mean.svg │ │ │ ├── median.svg │ │ │ ├── pdf.svg │ │ │ ├── pdf_small.svg │ │ │ ├── regression.svg │ │ │ ├── regression_small.svg │ │ │ ├── slope.svg │ │ │ └── typical.svg │ ├── day 14 part 2 │ │ ├── base │ │ │ ├── benchmark.json │ │ │ ├── estimates.json │ │ │ ├── raw.csv │ │ │ ├── sample.json │ │ │ └── tukey.json │ │ ├── new │ │ │ ├── benchmark.json │ │ │ ├── estimates.json │ │ │ ├── raw.csv │ │ │ ├── sample.json │ │ │ └── tukey.json │ │ └── report │ │ │ ├── MAD.svg │ │ │ ├── SD.svg │ │ │ ├── index.html │ │ │ ├── iteration_times.svg │ │ │ ├── iteration_times_small.svg │ │ │ ├── mean.svg │ │ │ ├── median.svg │ │ │ ├── pdf.svg │ │ │ ├── pdf_small.svg │ │ │ └── typical.svg │ ├── day 15 part 1 │ │ ├── base │ │ │ ├── benchmark.json │ │ │ ├── estimates.json │ │ │ ├── raw.csv │ │ │ ├── sample.json │ │ │ └── tukey.json │ │ ├── new │ │ │ ├── benchmark.json │ │ │ ├── estimates.json │ │ │ ├── raw.csv │ │ │ ├── sample.json │ │ │ └── tukey.json │ │ └── report │ │ │ ├── MAD.svg │ │ │ ├── SD.svg │ │ │ ├── index.html │ │ │ ├── mean.svg │ │ │ ├── median.svg │ │ │ ├── pdf.svg │ │ │ ├── pdf_small.svg │ │ │ ├── regression.svg │ │ │ ├── regression_small.svg │ │ │ ├── slope.svg │ │ │ └── typical.svg │ ├── day 15 part 2 │ │ ├── base │ │ │ ├── benchmark.json │ │ │ ├── estimates.json │ │ │ ├── raw.csv │ │ │ ├── sample.json │ │ │ └── tukey.json │ │ ├── new │ │ │ ├── benchmark.json │ │ │ ├── estimates.json │ │ │ ├── raw.csv │ │ │ ├── sample.json │ │ │ └── tukey.json │ │ └── report │ │ │ ├── MAD.svg │ │ │ ├── SD.svg │ │ │ ├── index.html │ │ │ ├── iteration_times.svg │ │ │ ├── iteration_times_small.svg │ │ │ ├── mean.svg │ │ │ ├── median.svg │ │ │ ├── pdf.svg │ │ │ ├── pdf_small.svg │ │ │ └── typical.svg │ ├── day 16 part 1 │ │ ├── base │ │ │ ├── benchmark.json │ │ │ ├── estimates.json │ │ │ ├── raw.csv │ │ │ ├── sample.json │ │ │ └── tukey.json │ │ ├── new │ │ │ ├── benchmark.json │ │ │ ├── estimates.json │ │ │ ├── raw.csv │ │ │ ├── sample.json │ │ │ └── tukey.json │ │ └── report │ │ │ ├── MAD.svg │ │ │ ├── SD.svg │ │ │ ├── index.html │ │ │ ├── mean.svg │ │ │ ├── median.svg │ │ │ ├── pdf.svg │ │ │ ├── pdf_small.svg │ │ │ ├── regression.svg │ │ │ ├── regression_small.svg │ │ │ ├── slope.svg │ │ │ └── typical.svg │ ├── day 16 part 2 │ │ ├── base │ │ │ ├── benchmark.json │ │ │ ├── estimates.json │ │ │ ├── raw.csv │ │ │ ├── sample.json │ │ │ └── tukey.json │ │ ├── new │ │ │ ├── benchmark.json │ │ │ ├── estimates.json │ │ │ ├── raw.csv │ │ │ ├── sample.json │ │ │ └── tukey.json │ │ └── report │ │ │ ├── MAD.svg │ │ │ ├── SD.svg │ │ │ ├── index.html │ │ │ ├── mean.svg │ │ │ ├── median.svg │ │ │ ├── pdf.svg │ │ │ ├── pdf_small.svg │ │ │ ├── regression.svg │ │ │ ├── regression_small.svg │ │ │ ├── slope.svg │ │ │ └── typical.svg │ ├── day 17 part 1 │ │ ├── base │ │ │ ├── benchmark.json │ │ │ ├── estimates.json │ │ │ ├── raw.csv │ │ │ ├── sample.json │ │ │ └── tukey.json │ │ ├── new │ │ │ ├── benchmark.json │ │ │ ├── estimates.json │ │ │ ├── raw.csv │ │ │ ├── sample.json │ │ │ └── tukey.json │ │ └── report │ │ │ ├── MAD.svg │ │ │ ├── SD.svg │ │ │ ├── index.html │ │ │ ├── iteration_times.svg │ │ │ ├── iteration_times_small.svg │ │ │ ├── mean.svg │ │ │ ├── median.svg │ │ │ ├── pdf.svg │ │ │ ├── pdf_small.svg │ │ │ └── typical.svg │ ├── day 17 part 2 │ │ ├── base │ │ │ ├── benchmark.json │ │ │ ├── estimates.json │ │ │ ├── raw.csv │ │ │ ├── sample.json │ │ │ └── tukey.json │ │ ├── new │ │ │ ├── benchmark.json │ │ │ ├── estimates.json │ │ │ ├── raw.csv │ │ │ ├── sample.json │ │ │ └── tukey.json │ │ └── report │ │ │ ├── MAD.svg │ │ │ ├── SD.svg │ │ │ ├── index.html │ │ │ ├── iteration_times.svg │ │ │ ├── iteration_times_small.svg │ │ │ ├── mean.svg │ │ │ ├── median.svg │ │ │ ├── pdf.svg │ │ │ ├── pdf_small.svg │ │ │ └── typical.svg │ ├── day 18 part 1 │ │ ├── base │ │ │ ├── benchmark.json │ │ │ ├── estimates.json │ │ │ ├── raw.csv │ │ │ ├── sample.json │ │ │ └── tukey.json │ │ ├── new │ │ │ ├── benchmark.json │ │ │ ├── estimates.json │ │ │ ├── raw.csv │ │ │ ├── sample.json │ │ │ └── tukey.json │ │ └── report │ │ │ ├── MAD.svg │ │ │ ├── SD.svg │ │ │ ├── index.html │ │ │ ├── mean.svg │ │ │ ├── median.svg │ │ │ ├── pdf.svg │ │ │ ├── pdf_small.svg │ │ │ ├── regression.svg │ │ │ ├── regression_small.svg │ │ │ ├── slope.svg │ │ │ └── typical.svg │ ├── day 18 part 2 │ │ ├── base │ │ │ ├── benchmark.json │ │ │ ├── estimates.json │ │ │ ├── raw.csv │ │ │ ├── sample.json │ │ │ └── tukey.json │ │ ├── new │ │ │ ├── benchmark.json │ │ │ ├── estimates.json │ │ │ ├── raw.csv │ │ │ ├── sample.json │ │ │ └── tukey.json │ │ └── report │ │ │ ├── MAD.svg │ │ │ ├── SD.svg │ │ │ ├── index.html │ │ │ ├── mean.svg │ │ │ ├── median.svg │ │ │ ├── pdf.svg │ │ │ ├── pdf_small.svg │ │ │ ├── regression.svg │ │ │ ├── regression_small.svg │ │ │ ├── slope.svg │ │ │ └── typical.svg │ ├── day 19 part 1 │ │ ├── base │ │ │ ├── benchmark.json │ │ │ ├── estimates.json │ │ │ ├── raw.csv │ │ │ ├── sample.json │ │ │ └── tukey.json │ │ ├── new │ │ │ ├── benchmark.json │ │ │ ├── estimates.json │ │ │ ├── raw.csv │ │ │ ├── sample.json │ │ │ └── tukey.json │ │ └── report │ │ │ ├── MAD.svg │ │ │ ├── SD.svg │ │ │ ├── index.html │ │ │ ├── iteration_times.svg │ │ │ ├── iteration_times_small.svg │ │ │ ├── mean.svg │ │ │ ├── median.svg │ │ │ ├── pdf.svg │ │ │ ├── pdf_small.svg │ │ │ └── typical.svg │ ├── day 19 part 2 │ │ ├── base │ │ │ ├── benchmark.json │ │ │ ├── estimates.json │ │ │ ├── raw.csv │ │ │ ├── sample.json │ │ │ └── tukey.json │ │ ├── new │ │ │ ├── benchmark.json │ │ │ ├── estimates.json │ │ │ ├── raw.csv │ │ │ ├── sample.json │ │ │ └── tukey.json │ │ └── report │ │ │ ├── MAD.svg │ │ │ ├── SD.svg │ │ │ ├── index.html │ │ │ ├── iteration_times.svg │ │ │ ├── iteration_times_small.svg │ │ │ ├── mean.svg │ │ │ ├── median.svg │ │ │ ├── pdf.svg │ │ │ ├── pdf_small.svg │ │ │ └── typical.svg │ ├── day 2 part 1 │ │ ├── base │ │ │ ├── benchmark.json │ │ │ ├── estimates.json │ │ │ ├── raw.csv │ │ │ ├── sample.json │ │ │ └── tukey.json │ │ ├── new │ │ │ ├── benchmark.json │ │ │ ├── estimates.json │ │ │ ├── raw.csv │ │ │ ├── sample.json │ │ │ └── tukey.json │ │ └── report │ │ │ ├── MAD.svg │ │ │ ├── SD.svg │ │ │ ├── index.html │ │ │ ├── mean.svg │ │ │ ├── median.svg │ │ │ ├── pdf.svg │ │ │ ├── pdf_small.svg │ │ │ ├── regression.svg │ │ │ ├── regression_small.svg │ │ │ ├── slope.svg │ │ │ └── typical.svg │ ├── day 2 part 2 │ │ ├── base │ │ │ ├── benchmark.json │ │ │ ├── estimates.json │ │ │ ├── raw.csv │ │ │ ├── sample.json │ │ │ └── tukey.json │ │ ├── new │ │ │ ├── benchmark.json │ │ │ ├── estimates.json │ │ │ ├── raw.csv │ │ │ ├── sample.json │ │ │ └── tukey.json │ │ └── report │ │ │ ├── MAD.svg │ │ │ ├── SD.svg │ │ │ ├── index.html │ │ │ ├── mean.svg │ │ │ ├── median.svg │ │ │ ├── pdf.svg │ │ │ ├── pdf_small.svg │ │ │ ├── regression.svg │ │ │ ├── regression_small.svg │ │ │ ├── slope.svg │ │ │ └── typical.svg │ ├── day 20 part 1 │ │ ├── base │ │ │ ├── benchmark.json │ │ │ ├── estimates.json │ │ │ ├── raw.csv │ │ │ ├── sample.json │ │ │ └── tukey.json │ │ ├── new │ │ │ ├── benchmark.json │ │ │ ├── estimates.json │ │ │ ├── raw.csv │ │ │ ├── sample.json │ │ │ └── tukey.json │ │ └── report │ │ │ ├── MAD.svg │ │ │ ├── SD.svg │ │ │ ├── index.html │ │ │ ├── iteration_times.svg │ │ │ ├── iteration_times_small.svg │ │ │ ├── mean.svg │ │ │ ├── median.svg │ │ │ ├── pdf.svg │ │ │ ├── pdf_small.svg │ │ │ └── typical.svg │ ├── day 20 part 2 │ │ ├── base │ │ │ ├── benchmark.json │ │ │ ├── estimates.json │ │ │ ├── raw.csv │ │ │ ├── sample.json │ │ │ └── tukey.json │ │ ├── new │ │ │ ├── benchmark.json │ │ │ ├── estimates.json │ │ │ ├── raw.csv │ │ │ ├── sample.json │ │ │ └── tukey.json │ │ └── report │ │ │ ├── MAD.svg │ │ │ ├── SD.svg │ │ │ ├── index.html │ │ │ ├── iteration_times.svg │ │ │ ├── iteration_times_small.svg │ │ │ ├── mean.svg │ │ │ ├── median.svg │ │ │ ├── pdf.svg │ │ │ ├── pdf_small.svg │ │ │ └── typical.svg │ ├── day 21 part 1 │ │ ├── base │ │ │ ├── benchmark.json │ │ │ ├── estimates.json │ │ │ ├── raw.csv │ │ │ ├── sample.json │ │ │ └── tukey.json │ │ ├── new │ │ │ ├── benchmark.json │ │ │ ├── estimates.json │ │ │ ├── raw.csv │ │ │ ├── sample.json │ │ │ └── tukey.json │ │ └── report │ │ │ ├── MAD.svg │ │ │ ├── SD.svg │ │ │ ├── index.html │ │ │ ├── mean.svg │ │ │ ├── median.svg │ │ │ ├── pdf.svg │ │ │ ├── pdf_small.svg │ │ │ ├── regression.svg │ │ │ ├── regression_small.svg │ │ │ ├── slope.svg │ │ │ └── typical.svg │ ├── day 21 part 2 │ │ ├── base │ │ │ ├── benchmark.json │ │ │ ├── estimates.json │ │ │ ├── raw.csv │ │ │ ├── sample.json │ │ │ └── tukey.json │ │ ├── new │ │ │ ├── benchmark.json │ │ │ ├── estimates.json │ │ │ ├── raw.csv │ │ │ ├── sample.json │ │ │ └── tukey.json │ │ └── report │ │ │ ├── MAD.svg │ │ │ ├── SD.svg │ │ │ ├── index.html │ │ │ ├── mean.svg │ │ │ ├── median.svg │ │ │ ├── pdf.svg │ │ │ ├── pdf_small.svg │ │ │ ├── regression.svg │ │ │ ├── regression_small.svg │ │ │ ├── slope.svg │ │ │ └── typical.svg │ ├── day 22 part 1 │ │ ├── base │ │ │ ├── benchmark.json │ │ │ ├── estimates.json │ │ │ ├── raw.csv │ │ │ ├── sample.json │ │ │ └── tukey.json │ │ ├── new │ │ │ ├── benchmark.json │ │ │ ├── estimates.json │ │ │ ├── raw.csv │ │ │ ├── sample.json │ │ │ └── tukey.json │ │ └── report │ │ │ ├── MAD.svg │ │ │ ├── SD.svg │ │ │ ├── index.html │ │ │ ├── mean.svg │ │ │ ├── median.svg │ │ │ ├── pdf.svg │ │ │ ├── pdf_small.svg │ │ │ ├── regression.svg │ │ │ ├── regression_small.svg │ │ │ ├── slope.svg │ │ │ └── typical.svg │ ├── day 22 part 2 │ │ ├── base │ │ │ ├── benchmark.json │ │ │ ├── estimates.json │ │ │ ├── raw.csv │ │ │ ├── sample.json │ │ │ └── tukey.json │ │ ├── new │ │ │ ├── benchmark.json │ │ │ ├── estimates.json │ │ │ ├── raw.csv │ │ │ ├── sample.json │ │ │ └── tukey.json │ │ └── report │ │ │ ├── MAD.svg │ │ │ ├── SD.svg │ │ │ ├── index.html │ │ │ ├── iteration_times.svg │ │ │ ├── iteration_times_small.svg │ │ │ ├── mean.svg │ │ │ ├── median.svg │ │ │ ├── pdf.svg │ │ │ ├── pdf_small.svg │ │ │ └── typical.svg │ ├── day 23 part 1 │ │ ├── base │ │ │ ├── benchmark.json │ │ │ ├── estimates.json │ │ │ ├── raw.csv │ │ │ ├── sample.json │ │ │ └── tukey.json │ │ ├── new │ │ │ ├── benchmark.json │ │ │ ├── estimates.json │ │ │ ├── raw.csv │ │ │ ├── sample.json │ │ │ └── tukey.json │ │ └── report │ │ │ ├── MAD.svg │ │ │ ├── SD.svg │ │ │ ├── index.html │ │ │ ├── mean.svg │ │ │ ├── median.svg │ │ │ ├── pdf.svg │ │ │ ├── pdf_small.svg │ │ │ ├── regression.svg │ │ │ ├── regression_small.svg │ │ │ ├── slope.svg │ │ │ └── typical.svg │ ├── day 23 part 2 │ │ ├── base │ │ │ ├── benchmark.json │ │ │ ├── estimates.json │ │ │ ├── raw.csv │ │ │ ├── sample.json │ │ │ └── tukey.json │ │ ├── new │ │ │ ├── benchmark.json │ │ │ ├── estimates.json │ │ │ ├── raw.csv │ │ │ ├── sample.json │ │ │ └── tukey.json │ │ └── report │ │ │ ├── MAD.svg │ │ │ ├── SD.svg │ │ │ ├── index.html │ │ │ ├── iteration_times.svg │ │ │ ├── iteration_times_small.svg │ │ │ ├── mean.svg │ │ │ ├── median.svg │ │ │ ├── pdf.svg │ │ │ ├── pdf_small.svg │ │ │ └── typical.svg │ ├── day 24 part 1 │ │ ├── base │ │ │ ├── benchmark.json │ │ │ ├── estimates.json │ │ │ ├── raw.csv │ │ │ ├── sample.json │ │ │ └── tukey.json │ │ ├── new │ │ │ ├── benchmark.json │ │ │ ├── estimates.json │ │ │ ├── raw.csv │ │ │ ├── sample.json │ │ │ └── tukey.json │ │ └── report │ │ │ ├── MAD.svg │ │ │ ├── SD.svg │ │ │ ├── index.html │ │ │ ├── mean.svg │ │ │ ├── median.svg │ │ │ ├── pdf.svg │ │ │ ├── pdf_small.svg │ │ │ ├── regression.svg │ │ │ ├── regression_small.svg │ │ │ ├── slope.svg │ │ │ └── typical.svg │ ├── day 24 part 2 │ │ ├── base │ │ │ ├── benchmark.json │ │ │ ├── estimates.json │ │ │ ├── raw.csv │ │ │ ├── sample.json │ │ │ └── tukey.json │ │ ├── new │ │ │ ├── benchmark.json │ │ │ ├── estimates.json │ │ │ ├── raw.csv │ │ │ ├── sample.json │ │ │ └── tukey.json │ │ └── report │ │ │ ├── MAD.svg │ │ │ ├── SD.svg │ │ │ ├── index.html │ │ │ ├── iteration_times.svg │ │ │ ├── iteration_times_small.svg │ │ │ ├── mean.svg │ │ │ ├── median.svg │ │ │ ├── pdf.svg │ │ │ ├── pdf_small.svg │ │ │ └── typical.svg │ ├── day 25 part 1 │ │ ├── base │ │ │ ├── benchmark.json │ │ │ ├── estimates.json │ │ │ ├── raw.csv │ │ │ ├── sample.json │ │ │ └── tukey.json │ │ ├── new │ │ │ ├── benchmark.json │ │ │ ├── estimates.json │ │ │ ├── raw.csv │ │ │ ├── sample.json │ │ │ └── tukey.json │ │ └── report │ │ │ ├── MAD.svg │ │ │ ├── SD.svg │ │ │ ├── index.html │ │ │ ├── iteration_times.svg │ │ │ ├── iteration_times_small.svg │ │ │ ├── mean.svg │ │ │ ├── median.svg │ │ │ ├── pdf.svg │ │ │ ├── pdf_small.svg │ │ │ └── typical.svg │ ├── day 3 part 1 │ │ ├── base │ │ │ ├── benchmark.json │ │ │ ├── estimates.json │ │ │ ├── raw.csv │ │ │ ├── sample.json │ │ │ └── tukey.json │ │ ├── new │ │ │ ├── benchmark.json │ │ │ ├── estimates.json │ │ │ ├── raw.csv │ │ │ ├── sample.json │ │ │ └── tukey.json │ │ └── report │ │ │ ├── MAD.svg │ │ │ ├── SD.svg │ │ │ ├── index.html │ │ │ ├── mean.svg │ │ │ ├── median.svg │ │ │ ├── pdf.svg │ │ │ ├── pdf_small.svg │ │ │ ├── regression.svg │ │ │ ├── regression_small.svg │ │ │ ├── slope.svg │ │ │ └── typical.svg │ ├── day 3 part 2 │ │ ├── base │ │ │ ├── benchmark.json │ │ │ ├── estimates.json │ │ │ ├── raw.csv │ │ │ ├── sample.json │ │ │ └── tukey.json │ │ ├── new │ │ │ ├── benchmark.json │ │ │ ├── estimates.json │ │ │ ├── raw.csv │ │ │ ├── sample.json │ │ │ └── tukey.json │ │ └── report │ │ │ ├── MAD.svg │ │ │ ├── SD.svg │ │ │ ├── index.html │ │ │ ├── mean.svg │ │ │ ├── median.svg │ │ │ ├── pdf.svg │ │ │ ├── pdf_small.svg │ │ │ ├── regression.svg │ │ │ ├── regression_small.svg │ │ │ ├── slope.svg │ │ │ └── typical.svg │ ├── day 4 part 1 │ │ ├── base │ │ │ ├── benchmark.json │ │ │ ├── estimates.json │ │ │ ├── raw.csv │ │ │ ├── sample.json │ │ │ └── tukey.json │ │ ├── new │ │ │ ├── benchmark.json │ │ │ ├── estimates.json │ │ │ ├── raw.csv │ │ │ ├── sample.json │ │ │ └── tukey.json │ │ └── report │ │ │ ├── MAD.svg │ │ │ ├── SD.svg │ │ │ ├── index.html │ │ │ ├── mean.svg │ │ │ ├── median.svg │ │ │ ├── pdf.svg │ │ │ ├── pdf_small.svg │ │ │ ├── regression.svg │ │ │ ├── regression_small.svg │ │ │ ├── slope.svg │ │ │ └── typical.svg │ ├── day 4 part 2 │ │ ├── base │ │ │ ├── benchmark.json │ │ │ ├── estimates.json │ │ │ ├── raw.csv │ │ │ ├── sample.json │ │ │ └── tukey.json │ │ ├── new │ │ │ ├── benchmark.json │ │ │ ├── estimates.json │ │ │ ├── raw.csv │ │ │ ├── sample.json │ │ │ └── tukey.json │ │ └── report │ │ │ ├── MAD.svg │ │ │ ├── SD.svg │ │ │ ├── index.html │ │ │ ├── mean.svg │ │ │ ├── median.svg │ │ │ ├── pdf.svg │ │ │ ├── pdf_small.svg │ │ │ ├── regression.svg │ │ │ ├── regression_small.svg │ │ │ ├── slope.svg │ │ │ └── typical.svg │ ├── day 5 part 1 │ │ ├── base │ │ │ ├── benchmark.json │ │ │ ├── estimates.json │ │ │ ├── raw.csv │ │ │ ├── sample.json │ │ │ └── tukey.json │ │ ├── new │ │ │ ├── benchmark.json │ │ │ ├── estimates.json │ │ │ ├── raw.csv │ │ │ ├── sample.json │ │ │ └── tukey.json │ │ └── report │ │ │ ├── MAD.svg │ │ │ ├── SD.svg │ │ │ ├── index.html │ │ │ ├── mean.svg │ │ │ ├── median.svg │ │ │ ├── pdf.svg │ │ │ ├── pdf_small.svg │ │ │ ├── regression.svg │ │ │ ├── regression_small.svg │ │ │ ├── slope.svg │ │ │ └── typical.svg │ ├── day 5 part 2 │ │ ├── base │ │ │ ├── benchmark.json │ │ │ ├── estimates.json │ │ │ ├── raw.csv │ │ │ ├── sample.json │ │ │ └── tukey.json │ │ ├── new │ │ │ ├── benchmark.json │ │ │ ├── estimates.json │ │ │ ├── raw.csv │ │ │ ├── sample.json │ │ │ └── tukey.json │ │ └── report │ │ │ ├── MAD.svg │ │ │ ├── SD.svg │ │ │ ├── index.html │ │ │ ├── mean.svg │ │ │ ├── median.svg │ │ │ ├── pdf.svg │ │ │ ├── pdf_small.svg │ │ │ ├── regression.svg │ │ │ ├── regression_small.svg │ │ │ ├── slope.svg │ │ │ └── typical.svg │ ├── day 6 part 1 │ │ ├── base │ │ │ ├── benchmark.json │ │ │ ├── estimates.json │ │ │ ├── raw.csv │ │ │ ├── sample.json │ │ │ └── tukey.json │ │ ├── new │ │ │ ├── benchmark.json │ │ │ ├── estimates.json │ │ │ ├── raw.csv │ │ │ ├── sample.json │ │ │ └── tukey.json │ │ └── report │ │ │ ├── MAD.svg │ │ │ ├── SD.svg │ │ │ ├── index.html │ │ │ ├── mean.svg │ │ │ ├── median.svg │ │ │ ├── pdf.svg │ │ │ ├── pdf_small.svg │ │ │ ├── regression.svg │ │ │ ├── regression_small.svg │ │ │ ├── slope.svg │ │ │ └── typical.svg │ ├── day 6 part 2 │ │ ├── base │ │ │ ├── benchmark.json │ │ │ ├── estimates.json │ │ │ ├── raw.csv │ │ │ ├── sample.json │ │ │ └── tukey.json │ │ ├── new │ │ │ ├── benchmark.json │ │ │ ├── estimates.json │ │ │ ├── raw.csv │ │ │ ├── sample.json │ │ │ └── tukey.json │ │ └── report │ │ │ ├── MAD.svg │ │ │ ├── SD.svg │ │ │ ├── index.html │ │ │ ├── mean.svg │ │ │ ├── median.svg │ │ │ ├── pdf.svg │ │ │ ├── pdf_small.svg │ │ │ ├── regression.svg │ │ │ ├── regression_small.svg │ │ │ ├── slope.svg │ │ │ └── typical.svg │ ├── day 7 part 1 │ │ ├── base │ │ │ ├── benchmark.json │ │ │ ├── estimates.json │ │ │ ├── raw.csv │ │ │ ├── sample.json │ │ │ └── tukey.json │ │ ├── new │ │ │ ├── benchmark.json │ │ │ ├── estimates.json │ │ │ ├── raw.csv │ │ │ ├── sample.json │ │ │ └── tukey.json │ │ └── report │ │ │ ├── MAD.svg │ │ │ ├── SD.svg │ │ │ ├── index.html │ │ │ ├── iteration_times.svg │ │ │ ├── iteration_times_small.svg │ │ │ ├── mean.svg │ │ │ ├── median.svg │ │ │ ├── pdf.svg │ │ │ ├── pdf_small.svg │ │ │ └── typical.svg │ ├── day 7 part 2 │ │ ├── base │ │ │ ├── benchmark.json │ │ │ ├── estimates.json │ │ │ ├── raw.csv │ │ │ ├── sample.json │ │ │ └── tukey.json │ │ ├── new │ │ │ ├── benchmark.json │ │ │ ├── estimates.json │ │ │ ├── raw.csv │ │ │ ├── sample.json │ │ │ └── tukey.json │ │ └── report │ │ │ ├── MAD.svg │ │ │ ├── SD.svg │ │ │ ├── index.html │ │ │ ├── iteration_times.svg │ │ │ ├── iteration_times_small.svg │ │ │ ├── mean.svg │ │ │ ├── median.svg │ │ │ ├── pdf.svg │ │ │ ├── pdf_small.svg │ │ │ └── typical.svg │ ├── day 8 part 1 │ │ ├── base │ │ │ ├── benchmark.json │ │ │ ├── estimates.json │ │ │ ├── raw.csv │ │ │ ├── sample.json │ │ │ └── tukey.json │ │ ├── new │ │ │ ├── benchmark.json │ │ │ ├── estimates.json │ │ │ ├── raw.csv │ │ │ ├── sample.json │ │ │ └── tukey.json │ │ └── report │ │ │ ├── MAD.svg │ │ │ ├── SD.svg │ │ │ ├── index.html │ │ │ ├── mean.svg │ │ │ ├── median.svg │ │ │ ├── pdf.svg │ │ │ ├── pdf_small.svg │ │ │ ├── regression.svg │ │ │ ├── regression_small.svg │ │ │ ├── slope.svg │ │ │ └── typical.svg │ ├── day 8 part 2 │ │ ├── base │ │ │ ├── benchmark.json │ │ │ ├── estimates.json │ │ │ ├── raw.csv │ │ │ ├── sample.json │ │ │ └── tukey.json │ │ ├── new │ │ │ ├── benchmark.json │ │ │ ├── estimates.json │ │ │ ├── raw.csv │ │ │ ├── sample.json │ │ │ └── tukey.json │ │ └── report │ │ │ ├── MAD.svg │ │ │ ├── SD.svg │ │ │ ├── index.html │ │ │ ├── mean.svg │ │ │ ├── median.svg │ │ │ ├── pdf.svg │ │ │ ├── pdf_small.svg │ │ │ ├── regression.svg │ │ │ ├── regression_small.svg │ │ │ ├── slope.svg │ │ │ └── typical.svg │ ├── day 9 part 1 │ │ ├── base │ │ │ ├── benchmark.json │ │ │ ├── estimates.json │ │ │ ├── raw.csv │ │ │ ├── sample.json │ │ │ └── tukey.json │ │ ├── new │ │ │ ├── benchmark.json │ │ │ ├── estimates.json │ │ │ ├── raw.csv │ │ │ ├── sample.json │ │ │ └── tukey.json │ │ └── report │ │ │ ├── MAD.svg │ │ │ ├── SD.svg │ │ │ ├── index.html │ │ │ ├── mean.svg │ │ │ ├── median.svg │ │ │ ├── pdf.svg │ │ │ ├── pdf_small.svg │ │ │ ├── regression.svg │ │ │ ├── regression_small.svg │ │ │ ├── slope.svg │ │ │ └── typical.svg │ ├── day 9 part 2 │ │ ├── base │ │ │ ├── benchmark.json │ │ │ ├── estimates.json │ │ │ ├── raw.csv │ │ │ ├── sample.json │ │ │ └── tukey.json │ │ ├── new │ │ │ ├── benchmark.json │ │ │ ├── estimates.json │ │ │ ├── raw.csv │ │ │ ├── sample.json │ │ │ └── tukey.json │ │ └── report │ │ │ ├── MAD.svg │ │ │ ├── SD.svg │ │ │ ├── index.html │ │ │ ├── mean.svg │ │ │ ├── median.svg │ │ │ ├── pdf.svg │ │ │ ├── pdf_small.svg │ │ │ ├── regression.svg │ │ │ ├── regression_small.svg │ │ │ ├── slope.svg │ │ │ └── typical.svg │ └── report │ │ └── index.html ├── hyperfine.md ├── index.md ├── results.txt └── viz │ └── day5.svg ├── hs ├── .gitignore ├── ChangeLog.md ├── LICENSE ├── README.md ├── Setup.hs ├── app │ ├── Main.lhs │ └── cbits │ │ └── main.c ├── bench │ ├── Main.hs │ └── cbits │ │ └── main.c ├── day1.txt ├── day10.txt ├── day11.txt ├── day12.txt ├── day13.txt ├── day14.txt ├── day15.txt ├── day16.txt ├── day17.txt ├── day18.txt ├── day19.txt ├── day2.txt ├── day20.txt ├── day21.txt ├── day22.txt ├── day23.txt ├── day24.txt ├── day25.txt ├── day3.txt ├── day4.txt ├── day5.txt ├── day6.txt ├── day7.txt ├── day8.txt ├── day9.txt ├── package.yaml ├── src │ ├── Common.hs │ ├── Day1.hs │ ├── Day10.hs │ ├── Day11.hs │ ├── Day12.hs │ ├── Day13.hs │ ├── Day14.hs │ ├── Day15.hs │ ├── Day16.hs │ ├── Day17.hs │ ├── Day18.hs │ ├── Day19.hs │ ├── Day2.hs │ ├── Day20.hs │ ├── Day21.hs │ ├── Day22.hs │ ├── Day23.hs │ ├── Day24.hs │ ├── Day25.hs │ ├── Day3.hs │ ├── Day4.hs │ ├── Day5.hs │ ├── Day6.hs │ ├── Day7.hs │ ├── Day8.hs │ ├── Day9.hs │ └── Machine.hs ├── stack.yaml ├── stack.yaml.lock └── test │ ├── CommonSpec.hs │ ├── Day10Spec.hs │ ├── Day11Spec.hs │ ├── Day12Spec.hs │ ├── Day13Spec.hs │ ├── Day14Spec.hs │ ├── Day15Spec.hs │ ├── Day16Spec.hs │ ├── Day17Spec.hs │ ├── Day18Spec.hs │ ├── Day19Spec.hs │ ├── Day1Spec.hs │ ├── Day20Spec.hs │ ├── Day21Spec.hs │ ├── Day22Spec.hs │ ├── Day23Spec.hs │ ├── Day24Spec.hs │ ├── Day25Spec.hs │ ├── Day2Spec.hs │ ├── Day3Spec.hs │ ├── Day4Spec.hs │ ├── Day5Spec.hs │ ├── Day6Spec.hs │ ├── Day7Spec.hs │ ├── Day8Spec.hs │ ├── Day9Spec.hs │ └── Main.hs ├── kt ├── .gitignore ├── README.md ├── build.gradle.kts ├── detekt-baseline.xml ├── detekt.yml ├── gradle.properties ├── gradle │ └── wrapper │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── settings.gradle.kts └── src │ ├── jmh │ └── kotlin │ │ └── io │ │ └── github │ │ └── ephemient │ │ └── aoc2020 │ │ ├── Day10Bench.kt │ │ ├── Day11Bench.kt │ │ ├── Day12Bench.kt │ │ ├── Day13Bench.kt │ │ ├── Day14Bench.kt │ │ ├── Day15Bench.kt │ │ ├── Day16Bench.kt │ │ ├── Day17Bench.kt │ │ ├── Day18Bench.kt │ │ ├── Day19Bench.kt │ │ ├── Day1Bench.kt │ │ ├── Day20Bench.kt │ │ ├── Day21Bench.kt │ │ ├── Day22Bench.kt │ │ ├── Day23Bench.kt │ │ ├── Day24Bench.kt │ │ ├── Day25Bench.kt │ │ ├── Day2Bench.kt │ │ ├── Day3Bench.kt │ │ ├── Day4Bench.kt │ │ ├── Day5Bench.kt │ │ ├── Day6Bench.kt │ │ ├── Day7Bench.kt │ │ ├── Day8Bench.kt │ │ └── Day9Bench.kt │ ├── main │ ├── kotlin │ │ └── io │ │ │ └── github │ │ │ └── ephemient │ │ │ └── aoc2020 │ │ │ ├── Day1.kt │ │ │ ├── Day10.kt │ │ │ ├── Day11.kt │ │ │ ├── Day12.kt │ │ │ ├── Day13.kt │ │ │ ├── Day14.kt │ │ │ ├── Day15.kt │ │ │ ├── Day16.kt │ │ │ ├── Day17.kt │ │ │ ├── Day18.kt │ │ │ ├── Day19.kt │ │ │ ├── Day2.kt │ │ │ ├── Day20.kt │ │ │ ├── Day21.kt │ │ │ ├── Day22.kt │ │ │ ├── Day23.kt │ │ │ ├── Day24.kt │ │ │ ├── Day25.kt │ │ │ ├── Day3.kt │ │ │ ├── Day4.kt │ │ │ ├── Day5.kt │ │ │ ├── Day6.kt │ │ │ ├── Day7.kt │ │ │ ├── Day8.kt │ │ │ ├── Day9.kt │ │ │ ├── Machine.kt │ │ │ └── main.kt │ └── resources │ │ ├── day1.txt │ │ ├── day10.txt │ │ ├── day11.txt │ │ ├── day12.txt │ │ ├── day13.txt │ │ ├── day14.txt │ │ ├── day15.txt │ │ ├── day16.txt │ │ ├── day17.txt │ │ ├── day18.txt │ │ ├── day19.txt │ │ ├── day2.txt │ │ ├── day20.txt │ │ ├── day21.txt │ │ ├── day22.txt │ │ ├── day23.txt │ │ ├── day24.txt │ │ ├── day25.txt │ │ ├── day3.txt │ │ ├── day4.txt │ │ ├── day5.txt │ │ ├── day6.txt │ │ ├── day7.txt │ │ ├── day8.txt │ │ └── day9.txt │ └── test │ └── kotlin │ └── io │ └── github │ └── ephemient │ └── aoc2020 │ ├── Day10Test.kt │ ├── Day11Test.kt │ ├── Day12Test.kt │ ├── Day13Test.kt │ ├── Day14Test.kt │ ├── Day15Test.kt │ ├── Day16Test.kt │ ├── Day17Test.kt │ ├── Day18Test.kt │ ├── Day19Test.kt │ ├── Day1Test.kt │ ├── Day20Test.kt │ ├── Day21Test.kt │ ├── Day22Test.kt │ ├── Day23Test.kt │ ├── Day24Test.kt │ ├── Day25Test.kt │ ├── Day2Test.kt │ ├── Day3Test.kt │ ├── Day4Test.kt │ ├── Day5Test.kt │ ├── Day6Test.kt │ ├── Day7Test.kt │ ├── Day8Test.kt │ └── Day9Test.kt ├── py ├── .gitignore ├── LICENSE ├── MANIFEST.in ├── Pipfile ├── Pipfile.lock ├── README.md ├── pyproject.toml ├── setup.cfg ├── setup.py ├── src │ └── aoc2020 │ │ ├── __init__.py │ │ ├── day1.py │ │ ├── day1.txt │ │ ├── day10.py │ │ ├── day10.txt │ │ ├── day11.py │ │ ├── day11.txt │ │ ├── day12.py │ │ ├── day12.txt │ │ ├── day13.py │ │ ├── day13.txt │ │ ├── day14.py │ │ ├── day14.txt │ │ ├── day15.py │ │ ├── day15.txt │ │ ├── day16.py │ │ ├── day16.txt │ │ ├── day17.py │ │ ├── day17.txt │ │ ├── day18.py │ │ ├── day18.txt │ │ ├── day19.py │ │ ├── day19.txt │ │ ├── day2.py │ │ ├── day2.txt │ │ ├── day20.py │ │ ├── day20.txt │ │ ├── day21.py │ │ ├── day21.txt │ │ ├── day22.py │ │ ├── day22.txt │ │ ├── day23.py │ │ ├── day23.txt │ │ ├── day24.py │ │ ├── day24.txt │ │ ├── day25.py │ │ ├── day25.txt │ │ ├── day3.py │ │ ├── day3.txt │ │ ├── day4.py │ │ ├── day4.txt │ │ ├── day5.py │ │ ├── day5.txt │ │ ├── day6.py │ │ ├── day6.txt │ │ ├── day7.py │ │ ├── day7.txt │ │ ├── day8.py │ │ ├── day8.txt │ │ ├── day9.py │ │ ├── day9.txt │ │ ├── machine.py │ │ ├── main.py │ │ └── math.py └── tests │ ├── test_benchmark.py │ └── test_day20.py └── rs ├── .gitignore ├── Cargo.lock ├── Cargo.toml ├── README.md ├── benches └── criterion.rs ├── build.rs ├── day1.txt ├── day10.txt ├── day11.txt ├── day12.txt ├── day13.txt ├── day14.txt ├── day15.txt ├── day16.txt ├── day17.txt ├── day18.txt ├── day19.txt ├── day2.txt ├── day20.txt ├── day21.txt ├── day22.txt ├── day23.txt ├── day24.txt ├── day25.txt ├── day3.txt ├── day4.txt ├── day5.txt ├── day6.txt ├── day7.txt ├── day8.txt ├── day9.txt ├── src ├── day1.rs ├── day10.rs ├── day11.rs ├── day12.rs ├── day13.rs ├── day14.rs ├── day15.rs ├── day16.rs ├── day17.rs ├── day18.rs ├── day19.rs ├── day2.rs ├── day20.rs ├── day21.rs ├── day22.rs ├── day23.rs ├── day24.rs ├── day25.rs ├── day3.rs ├── day4.rs ├── day5.rs ├── day6.rs ├── day7.rs ├── day8.rs ├── day9.rs ├── lib.rs ├── machine.rs ├── main.rs └── util.rs └── tests └── day20_test.rs /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | - package-ecosystem: bundler 4 | directory: /docs 5 | schedule: 6 | interval: daily 7 | - package-ecosystem: gradle 8 | directory: /kt 9 | schedule: 10 | interval: daily 11 | - package-ecosystem: pip 12 | directory: /py 13 | schedule: 14 | interval: daily 15 | - package-ecosystem: cargo 16 | directory: /rs 17 | schedule: 18 | interval: daily 19 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /day*.txt 2 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | ifndef SESSION 2 | SESSION = $(file < $(HOME)/.aocrc) 3 | endif 4 | YEAR := 2020 5 | DAYS := $(shell seq 1 $$(expr '(' $$(date +%s) - $$(TZ=UTC+5 date +%s --date=$(YEAR)-12-01) ')' / 86400 + 1) | head -n25) 6 | 7 | all: $(DAYS:%=day%.txt) 8 | 9 | day%.txt: 10 | $(if $(findstring $(@:day%.txt=%),$(DAYS)),,sleep $$(($$(date +%s --date=$(YEAR)-12-$(@:day%.txt=%)) - $$(date +%s)))) 11 | curl -b "session=$(SESSION)" -o "day$(@:day%.txt=%).txt" -f "https://adventofcode.com/$(YEAR)/day/$(@:day%.txt=%)/input" 12 | 13 | .PHONY: all 14 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # [Advent of Code 2020](https://adventofcode.com/2020) 2 | ### my answers 3 | 4 | Development occurs in language-specific directories: 5 | 6 | - [Haskell](https://github.com/ephemient/aoc2020/tree/main/hs) ![Haskell CI](https://github.com/ephemient/aoc2020/workflows/Haskell%20CI/badge.svg) 7 | - [Kotlin](https://github.com/ephemient/aoc2020/tree/main/kt) ![Kotlin CI](https://github.com/ephemient/aoc2020/workflows/Kotlin%20CI/badge.svg) 8 | - [Python](https://github.com/ephemient/aoc2020/tree/main/py) ![Python CI](https://github.com/ephemient/aoc2020/workflows/Python%20CI/badge.svg) 9 | - [Rust](https://github.com/ephemient/aoc2020/tree/main/rs) ![Rust CI](https://github.com/ephemient/aoc2020/workflows/Rust%20CI/badge.svg) 10 | -------------------------------------------------------------------------------- /docs/.gitignore: -------------------------------------------------------------------------------- 1 | _site 2 | .sass-cache 3 | .jekyll-metadata 4 | -------------------------------------------------------------------------------- /docs/.ruby-version: -------------------------------------------------------------------------------- 1 | 2.7.1 2 | -------------------------------------------------------------------------------- /docs/Gemfile: -------------------------------------------------------------------------------- 1 | source "https://rubygems.org" 2 | 3 | gem "jekyll" 4 | 5 | group :jekyll_plugins do 6 | gem "github-pages" 7 | gem "jekyll-mentions" 8 | gem "jemoji" 9 | end 10 | -------------------------------------------------------------------------------- /docs/_config.yml: -------------------------------------------------------------------------------- 1 | theme: jekyll-theme-minimal 2 | plugins: 3 | - jekyll-mentions 4 | - jemoji 5 | -------------------------------------------------------------------------------- /docs/criterion/day 1 part 1/base/benchmark.json: -------------------------------------------------------------------------------- 1 | {"group_id":"day 1 part 1","function_id":null,"value_str":null,"throughput":null,"full_id":"day 1 part 1","directory_name":"day 1 part 1","title":"day 1 part 1"} -------------------------------------------------------------------------------- /docs/criterion/day 1 part 1/base/estimates.json: -------------------------------------------------------------------------------- 1 | {"mean":{"confidence_interval":{"confidence_level":0.95,"lower_bound":4566.511716659158,"upper_bound":4749.937675904247},"point_estimate":4650.4075837117,"standard_error":46.94170123691443},"median":{"confidence_interval":{"confidence_level":0.95,"lower_bound":4505.424657534247,"upper_bound":4581.102093023256},"point_estimate":4528.760131974374,"standard_error":17.94617952482117},"median_abs_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":123.75789777533366,"upper_bound":231.5269685330536},"point_estimate":163.62640399618735,"standard_error":29.421089883109282},"slope":{"confidence_interval":{"confidence_level":0.95,"lower_bound":4524.39474211661,"upper_bound":4637.039711637385},"point_estimate":4576.689180283249,"standard_error":28.750785171468056},"std_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":260.7414648192509,"upper_bound":647.59516334542},"point_estimate":469.97457991100976,"standard_error":99.31952075211686}} -------------------------------------------------------------------------------- /docs/criterion/day 1 part 1/base/tukey.json: -------------------------------------------------------------------------------- 1 | [3693.8453765227005,4070.43970791805,5074.691258305648,5451.285589700998] -------------------------------------------------------------------------------- /docs/criterion/day 1 part 1/new/benchmark.json: -------------------------------------------------------------------------------- 1 | {"group_id":"day 1 part 1","function_id":null,"value_str":null,"throughput":null,"full_id":"day 1 part 1","directory_name":"day 1 part 1","title":"day 1 part 1"} -------------------------------------------------------------------------------- /docs/criterion/day 1 part 1/new/estimates.json: -------------------------------------------------------------------------------- 1 | {"mean":{"confidence_interval":{"confidence_level":0.95,"lower_bound":4566.511716659158,"upper_bound":4749.937675904247},"point_estimate":4650.4075837117,"standard_error":46.94170123691443},"median":{"confidence_interval":{"confidence_level":0.95,"lower_bound":4505.424657534247,"upper_bound":4581.102093023256},"point_estimate":4528.760131974374,"standard_error":17.94617952482117},"median_abs_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":123.75789777533366,"upper_bound":231.5269685330536},"point_estimate":163.62640399618735,"standard_error":29.421089883109282},"slope":{"confidence_interval":{"confidence_level":0.95,"lower_bound":4524.39474211661,"upper_bound":4637.039711637385},"point_estimate":4576.689180283249,"standard_error":28.750785171468056},"std_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":260.7414648192509,"upper_bound":647.59516334542},"point_estimate":469.97457991100976,"standard_error":99.31952075211686}} -------------------------------------------------------------------------------- /docs/criterion/day 1 part 1/new/tukey.json: -------------------------------------------------------------------------------- 1 | [3693.8453765227005,4070.43970791805,5074.691258305648,5451.285589700998] -------------------------------------------------------------------------------- /docs/criterion/day 1 part 2/base/benchmark.json: -------------------------------------------------------------------------------- 1 | {"group_id":"day 1 part 2","function_id":null,"value_str":null,"throughput":null,"full_id":"day 1 part 2","directory_name":"day 1 part 2","title":"day 1 part 2"} -------------------------------------------------------------------------------- /docs/criterion/day 1 part 2/base/estimates.json: -------------------------------------------------------------------------------- 1 | {"mean":{"confidence_interval":{"confidence_level":0.95,"lower_bound":4590.584595398004,"upper_bound":4736.69079846815},"point_estimate":4660.5902879769565,"standard_error":37.36161874811021},"median":{"confidence_interval":{"confidence_level":0.95,"lower_bound":4571.253576020572,"upper_bound":4740.739258799219},"point_estimate":4659.591567345893,"standard_error":41.4264369024599},"median_abs_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":228.60220930725066,"upper_bound":366.12061148704305},"point_estimate":306.66263513336065,"standard_error":34.892141186992184},"slope":{"confidence_interval":{"confidence_level":0.95,"lower_bound":4688.67591306798,"upper_bound":4808.869491995645},"point_estimate":4749.346839303772,"standard_error":30.52351354405674},"std_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":275.0017416581977,"upper_bound":481.17274144012697},"point_estimate":376.3755803898318,"standard_error":53.987385364822735}} -------------------------------------------------------------------------------- /docs/criterion/day 1 part 2/base/tukey.json: -------------------------------------------------------------------------------- 1 | [3217.7023270709196,3820.242819845871,5427.0174672457415,6029.557960020693] -------------------------------------------------------------------------------- /docs/criterion/day 1 part 2/new/benchmark.json: -------------------------------------------------------------------------------- 1 | {"group_id":"day 1 part 2","function_id":null,"value_str":null,"throughput":null,"full_id":"day 1 part 2","directory_name":"day 1 part 2","title":"day 1 part 2"} -------------------------------------------------------------------------------- /docs/criterion/day 1 part 2/new/estimates.json: -------------------------------------------------------------------------------- 1 | {"mean":{"confidence_interval":{"confidence_level":0.95,"lower_bound":4590.584595398004,"upper_bound":4736.69079846815},"point_estimate":4660.5902879769565,"standard_error":37.36161874811021},"median":{"confidence_interval":{"confidence_level":0.95,"lower_bound":4571.253576020572,"upper_bound":4740.739258799219},"point_estimate":4659.591567345893,"standard_error":41.4264369024599},"median_abs_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":228.60220930725066,"upper_bound":366.12061148704305},"point_estimate":306.66263513336065,"standard_error":34.892141186992184},"slope":{"confidence_interval":{"confidence_level":0.95,"lower_bound":4688.67591306798,"upper_bound":4808.869491995645},"point_estimate":4749.346839303772,"standard_error":30.52351354405674},"std_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":275.0017416581977,"upper_bound":481.17274144012697},"point_estimate":376.3755803898318,"standard_error":53.987385364822735}} -------------------------------------------------------------------------------- /docs/criterion/day 1 part 2/new/tukey.json: -------------------------------------------------------------------------------- 1 | [3217.7023270709196,3820.242819845871,5427.0174672457415,6029.557960020693] -------------------------------------------------------------------------------- /docs/criterion/day 10 part 1/base/benchmark.json: -------------------------------------------------------------------------------- 1 | {"group_id":"day 10 part 1","function_id":null,"value_str":null,"throughput":null,"full_id":"day 10 part 1","directory_name":"day 10 part 1","title":"day 10 part 1"} -------------------------------------------------------------------------------- /docs/criterion/day 10 part 1/base/tukey.json: -------------------------------------------------------------------------------- 1 | [2012.2814687161617,2283.4849239513824,3006.6941379119708,3277.8975931471914] -------------------------------------------------------------------------------- /docs/criterion/day 10 part 1/new/benchmark.json: -------------------------------------------------------------------------------- 1 | {"group_id":"day 10 part 1","function_id":null,"value_str":null,"throughput":null,"full_id":"day 10 part 1","directory_name":"day 10 part 1","title":"day 10 part 1"} -------------------------------------------------------------------------------- /docs/criterion/day 10 part 1/new/tukey.json: -------------------------------------------------------------------------------- 1 | [2012.2814687161617,2283.4849239513824,3006.6941379119708,3277.8975931471914] -------------------------------------------------------------------------------- /docs/criterion/day 10 part 2/base/benchmark.json: -------------------------------------------------------------------------------- 1 | {"group_id":"day 10 part 2","function_id":null,"value_str":null,"throughput":null,"full_id":"day 10 part 2","directory_name":"day 10 part 2","title":"day 10 part 2"} -------------------------------------------------------------------------------- /docs/criterion/day 10 part 2/base/tukey.json: -------------------------------------------------------------------------------- 1 | [3039.7968147188867,3435.0090169369605,4488.908222851825,4884.120425069899] -------------------------------------------------------------------------------- /docs/criterion/day 10 part 2/new/benchmark.json: -------------------------------------------------------------------------------- 1 | {"group_id":"day 10 part 2","function_id":null,"value_str":null,"throughput":null,"full_id":"day 10 part 2","directory_name":"day 10 part 2","title":"day 10 part 2"} -------------------------------------------------------------------------------- /docs/criterion/day 10 part 2/new/tukey.json: -------------------------------------------------------------------------------- 1 | [3039.7968147188867,3435.0090169369605,4488.908222851825,4884.120425069899] -------------------------------------------------------------------------------- /docs/criterion/day 11 part 1/base/benchmark.json: -------------------------------------------------------------------------------- 1 | {"group_id":"day 11 part 1","function_id":null,"value_str":null,"throughput":null,"full_id":"day 11 part 1","directory_name":"day 11 part 1","title":"day 11 part 1"} -------------------------------------------------------------------------------- /docs/criterion/day 11 part 1/base/estimates.json: -------------------------------------------------------------------------------- 1 | {"mean":{"confidence_interval":{"confidence_level":0.95,"lower_bound":24913647.175499998,"upper_bound":25441432.695},"point_estimate":25161698.895,"standard_error":134702.91758469865},"median":{"confidence_interval":{"confidence_level":0.95,"lower_bound":24720110.25,"upper_bound":25004115.5},"point_estimate":24814431.25,"standard_error":60500.079819933235},"median_abs_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":444113.97113040095,"upper_bound":865234.9664390087},"point_estimate":704557.4529916048,"standard_error":117869.33369668663},"slope":null,"std_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":870568.2172347339,"upper_bound":1791765.4215930745},"point_estimate":1353573.3546775929,"standard_error":237406.96259518992}} -------------------------------------------------------------------------------- /docs/criterion/day 11 part 1/base/tukey.json: -------------------------------------------------------------------------------- 1 | [22005851.0,23274834.6875,26658791.1875,27927774.875] -------------------------------------------------------------------------------- /docs/criterion/day 11 part 1/new/benchmark.json: -------------------------------------------------------------------------------- 1 | {"group_id":"day 11 part 1","function_id":null,"value_str":null,"throughput":null,"full_id":"day 11 part 1","directory_name":"day 11 part 1","title":"day 11 part 1"} -------------------------------------------------------------------------------- /docs/criterion/day 11 part 1/new/estimates.json: -------------------------------------------------------------------------------- 1 | {"mean":{"confidence_interval":{"confidence_level":0.95,"lower_bound":24913647.175499998,"upper_bound":25441432.695},"point_estimate":25161698.895,"standard_error":134702.91758469865},"median":{"confidence_interval":{"confidence_level":0.95,"lower_bound":24720110.25,"upper_bound":25004115.5},"point_estimate":24814431.25,"standard_error":60500.079819933235},"median_abs_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":444113.97113040095,"upper_bound":865234.9664390087},"point_estimate":704557.4529916048,"standard_error":117869.33369668663},"slope":null,"std_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":870568.2172347339,"upper_bound":1791765.4215930745},"point_estimate":1353573.3546775929,"standard_error":237406.96259518992}} -------------------------------------------------------------------------------- /docs/criterion/day 11 part 1/new/tukey.json: -------------------------------------------------------------------------------- 1 | [22005851.0,23274834.6875,26658791.1875,27927774.875] -------------------------------------------------------------------------------- /docs/criterion/day 11 part 2/base/benchmark.json: -------------------------------------------------------------------------------- 1 | {"group_id":"day 11 part 2","function_id":null,"value_str":null,"throughput":null,"full_id":"day 11 part 2","directory_name":"day 11 part 2","title":"day 11 part 2"} -------------------------------------------------------------------------------- /docs/criterion/day 11 part 2/base/estimates.json: -------------------------------------------------------------------------------- 1 | {"mean":{"confidence_interval":{"confidence_level":0.95,"lower_bound":26575171.141625,"upper_bound":26996409.498},"point_estimate":26782992.0,"standard_error":107358.67020697091},"median":{"confidence_interval":{"confidence_level":0.95,"lower_bound":26449328.25,"upper_bound":27013122.0},"point_estimate":26753350.0,"standard_error":166415.75377488267},"median_abs_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":782555.1843568683,"upper_bound":1246565.239419043},"point_estimate":1040315.9386307001,"standard_error":121502.63650667355},"slope":null,"std_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":871159.4132708728,"upper_bound":1282943.2533710883},"point_estimate":1075140.2799298665,"standard_error":105829.84608949552}} -------------------------------------------------------------------------------- /docs/criterion/day 11 part 2/base/tukey.json: -------------------------------------------------------------------------------- 1 | [22134829.0,24134386.75,29466540.75,31466098.5] -------------------------------------------------------------------------------- /docs/criterion/day 11 part 2/new/benchmark.json: -------------------------------------------------------------------------------- 1 | {"group_id":"day 11 part 2","function_id":null,"value_str":null,"throughput":null,"full_id":"day 11 part 2","directory_name":"day 11 part 2","title":"day 11 part 2"} -------------------------------------------------------------------------------- /docs/criterion/day 11 part 2/new/estimates.json: -------------------------------------------------------------------------------- 1 | {"mean":{"confidence_interval":{"confidence_level":0.95,"lower_bound":26575171.141625,"upper_bound":26996409.498},"point_estimate":26782992.0,"standard_error":107358.67020697091},"median":{"confidence_interval":{"confidence_level":0.95,"lower_bound":26449328.25,"upper_bound":27013122.0},"point_estimate":26753350.0,"standard_error":166415.75377488267},"median_abs_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":782555.1843568683,"upper_bound":1246565.239419043},"point_estimate":1040315.9386307001,"standard_error":121502.63650667355},"slope":null,"std_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":871159.4132708728,"upper_bound":1282943.2533710883},"point_estimate":1075140.2799298665,"standard_error":105829.84608949552}} -------------------------------------------------------------------------------- /docs/criterion/day 11 part 2/new/tukey.json: -------------------------------------------------------------------------------- 1 | [22134829.0,24134386.75,29466540.75,31466098.5] -------------------------------------------------------------------------------- /docs/criterion/day 12 part 1/base/benchmark.json: -------------------------------------------------------------------------------- 1 | {"group_id":"day 12 part 1","function_id":null,"value_str":null,"throughput":null,"full_id":"day 12 part 1","directory_name":"day 12 part 1","title":"day 12 part 1"} -------------------------------------------------------------------------------- /docs/criterion/day 12 part 1/base/estimates.json: -------------------------------------------------------------------------------- 1 | {"mean":{"confidence_interval":{"confidence_level":0.95,"lower_bound":13818.970813510005,"upper_bound":14776.370827147985},"point_estimate":14188.716082266052,"standard_error":255.7142435849552},"median":{"confidence_interval":{"confidence_level":0.95,"lower_bound":13679.955184108527,"upper_bound":14074.475054576935},"point_estimate":13860.66400462963,"standard_error":89.67126830048251},"median_abs_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":585.4982552777657,"upper_bound":940.090440224783},"point_estimate":750.6482891165117,"standard_error":94.94905105420636},"slope":{"confidence_interval":{"confidence_level":0.95,"lower_bound":13415.284679801685,"upper_bound":13890.653781128694},"point_estimate":13640.07101279904,"standard_error":120.61849938495934},"std_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":755.6250028406375,"upper_bound":4230.715778756324},"point_estimate":2555.915455122809,"standard_error":1184.7477955826575}} -------------------------------------------------------------------------------- /docs/criterion/day 12 part 1/base/tukey.json: -------------------------------------------------------------------------------- 1 | [10156.566607067967,11770.574875274944,16074.596923826883,17688.605192033858] -------------------------------------------------------------------------------- /docs/criterion/day 12 part 1/new/benchmark.json: -------------------------------------------------------------------------------- 1 | {"group_id":"day 12 part 1","function_id":null,"value_str":null,"throughput":null,"full_id":"day 12 part 1","directory_name":"day 12 part 1","title":"day 12 part 1"} -------------------------------------------------------------------------------- /docs/criterion/day 12 part 1/new/estimates.json: -------------------------------------------------------------------------------- 1 | {"mean":{"confidence_interval":{"confidence_level":0.95,"lower_bound":13818.970813510005,"upper_bound":14776.370827147985},"point_estimate":14188.716082266052,"standard_error":255.7142435849552},"median":{"confidence_interval":{"confidence_level":0.95,"lower_bound":13679.955184108527,"upper_bound":14074.475054576935},"point_estimate":13860.66400462963,"standard_error":89.67126830048251},"median_abs_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":585.4982552777657,"upper_bound":940.090440224783},"point_estimate":750.6482891165117,"standard_error":94.94905105420636},"slope":{"confidence_interval":{"confidence_level":0.95,"lower_bound":13415.284679801685,"upper_bound":13890.653781128694},"point_estimate":13640.07101279904,"standard_error":120.61849938495934},"std_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":755.6250028406375,"upper_bound":4230.715778756324},"point_estimate":2555.915455122809,"standard_error":1184.7477955826575}} -------------------------------------------------------------------------------- /docs/criterion/day 12 part 1/new/tukey.json: -------------------------------------------------------------------------------- 1 | [10156.566607067967,11770.574875274944,16074.596923826883,17688.605192033858] -------------------------------------------------------------------------------- /docs/criterion/day 12 part 2/base/benchmark.json: -------------------------------------------------------------------------------- 1 | {"group_id":"day 12 part 2","function_id":null,"value_str":null,"throughput":null,"full_id":"day 12 part 2","directory_name":"day 12 part 2","title":"day 12 part 2"} -------------------------------------------------------------------------------- /docs/criterion/day 12 part 2/base/estimates.json: -------------------------------------------------------------------------------- 1 | {"mean":{"confidence_interval":{"confidence_level":0.95,"lower_bound":12586.139780875032,"upper_bound":12824.127499157517},"point_estimate":12701.718374931206,"standard_error":60.71335387132549},"median":{"confidence_interval":{"confidence_level":0.95,"lower_bound":12516.75177621681,"upper_bound":12759.75769831786},"point_estimate":12610.558712319718,"standard_error":67.82478008343695},"median_abs_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":345.0720045456839,"upper_bound":562.8844329057569},"point_estimate":445.23488073186417,"standard_error":56.27521750070747},"slope":{"confidence_interval":{"confidence_level":0.95,"lower_bound":12566.956216149998,"upper_bound":12830.1584147661},"point_estimate":12690.304896297732,"standard_error":66.96330660740738},"std_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":488.9567373502032,"upper_bound":725.5950806427413},"point_estimate":611.6860104468968,"standard_error":60.34816748820908}} -------------------------------------------------------------------------------- /docs/criterion/day 12 part 2/base/tukey.json: -------------------------------------------------------------------------------- 1 | [10520.61918691464,11437.531233559643,13882.63002461298,14799.54207125798] -------------------------------------------------------------------------------- /docs/criterion/day 12 part 2/new/benchmark.json: -------------------------------------------------------------------------------- 1 | {"group_id":"day 12 part 2","function_id":null,"value_str":null,"throughput":null,"full_id":"day 12 part 2","directory_name":"day 12 part 2","title":"day 12 part 2"} -------------------------------------------------------------------------------- /docs/criterion/day 12 part 2/new/estimates.json: -------------------------------------------------------------------------------- 1 | {"mean":{"confidence_interval":{"confidence_level":0.95,"lower_bound":12586.139780875032,"upper_bound":12824.127499157517},"point_estimate":12701.718374931206,"standard_error":60.71335387132549},"median":{"confidence_interval":{"confidence_level":0.95,"lower_bound":12516.75177621681,"upper_bound":12759.75769831786},"point_estimate":12610.558712319718,"standard_error":67.82478008343695},"median_abs_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":345.0720045456839,"upper_bound":562.8844329057569},"point_estimate":445.23488073186417,"standard_error":56.27521750070747},"slope":{"confidence_interval":{"confidence_level":0.95,"lower_bound":12566.956216149998,"upper_bound":12830.1584147661},"point_estimate":12690.304896297732,"standard_error":66.96330660740738},"std_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":488.9567373502032,"upper_bound":725.5950806427413},"point_estimate":611.6860104468968,"standard_error":60.34816748820908}} -------------------------------------------------------------------------------- /docs/criterion/day 12 part 2/new/tukey.json: -------------------------------------------------------------------------------- 1 | [10520.61918691464,11437.531233559643,13882.63002461298,14799.54207125798] -------------------------------------------------------------------------------- /docs/criterion/day 13 part 1/base/benchmark.json: -------------------------------------------------------------------------------- 1 | {"group_id":"day 13 part 1","function_id":null,"value_str":null,"throughput":null,"full_id":"day 13 part 1","directory_name":"day 13 part 1","title":"day 13 part 1"} -------------------------------------------------------------------------------- /docs/criterion/day 13 part 1/base/tukey.json: -------------------------------------------------------------------------------- 1 | [1114.0453166023074,1218.0666974701267,1495.4570464509784,1599.478427318798] -------------------------------------------------------------------------------- /docs/criterion/day 13 part 1/new/benchmark.json: -------------------------------------------------------------------------------- 1 | {"group_id":"day 13 part 1","function_id":null,"value_str":null,"throughput":null,"full_id":"day 13 part 1","directory_name":"day 13 part 1","title":"day 13 part 1"} -------------------------------------------------------------------------------- /docs/criterion/day 13 part 1/new/tukey.json: -------------------------------------------------------------------------------- 1 | [1114.0453166023074,1218.0666974701267,1495.4570464509784,1599.478427318798] -------------------------------------------------------------------------------- /docs/criterion/day 13 part 2/base/benchmark.json: -------------------------------------------------------------------------------- 1 | {"group_id":"day 13 part 2","function_id":null,"value_str":null,"throughput":null,"full_id":"day 13 part 2","directory_name":"day 13 part 2","title":"day 13 part 2"} -------------------------------------------------------------------------------- /docs/criterion/day 13 part 2/base/estimates.json: -------------------------------------------------------------------------------- 1 | {"mean":{"confidence_interval":{"confidence_level":0.95,"lower_bound":7753.468299043267,"upper_bound":7899.8240056307295},"point_estimate":7824.415698558962,"standard_error":37.40117357921066},"median":{"confidence_interval":{"confidence_level":0.95,"lower_bound":7696.956627155172,"upper_bound":7862.514620535714},"point_estimate":7762.151041666666,"standard_error":37.88600814853679},"median_abs_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":186.6755298038951,"upper_bound":316.80215201580313},"point_estimate":250.9190295820472,"standard_error":31.895678111944022},"slope":{"confidence_interval":{"confidence_level":0.95,"lower_bound":7754.512389978937,"upper_bound":7882.165432887818},"point_estimate":7816.248531314652,"standard_error":32.65044687989841},"std_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":285.54486740012607,"upper_bound":457.46663308632435},"point_estimate":375.28627757802144,"standard_error":44.08181504281677}} -------------------------------------------------------------------------------- /docs/criterion/day 13 part 2/base/tukey.json: -------------------------------------------------------------------------------- 1 | [6669.146594441298,7157.343265831139,8459.201056204052,8947.397727593896] -------------------------------------------------------------------------------- /docs/criterion/day 13 part 2/new/benchmark.json: -------------------------------------------------------------------------------- 1 | {"group_id":"day 13 part 2","function_id":null,"value_str":null,"throughput":null,"full_id":"day 13 part 2","directory_name":"day 13 part 2","title":"day 13 part 2"} -------------------------------------------------------------------------------- /docs/criterion/day 13 part 2/new/estimates.json: -------------------------------------------------------------------------------- 1 | {"mean":{"confidence_interval":{"confidence_level":0.95,"lower_bound":7753.468299043267,"upper_bound":7899.8240056307295},"point_estimate":7824.415698558962,"standard_error":37.40117357921066},"median":{"confidence_interval":{"confidence_level":0.95,"lower_bound":7696.956627155172,"upper_bound":7862.514620535714},"point_estimate":7762.151041666666,"standard_error":37.88600814853679},"median_abs_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":186.6755298038951,"upper_bound":316.80215201580313},"point_estimate":250.9190295820472,"standard_error":31.895678111944022},"slope":{"confidence_interval":{"confidence_level":0.95,"lower_bound":7754.512389978937,"upper_bound":7882.165432887818},"point_estimate":7816.248531314652,"standard_error":32.65044687989841},"std_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":285.54486740012607,"upper_bound":457.46663308632435},"point_estimate":375.28627757802144,"standard_error":44.08181504281677}} -------------------------------------------------------------------------------- /docs/criterion/day 13 part 2/new/tukey.json: -------------------------------------------------------------------------------- 1 | [6669.146594441298,7157.343265831139,8459.201056204052,8947.397727593896] -------------------------------------------------------------------------------- /docs/criterion/day 14 part 1/base/benchmark.json: -------------------------------------------------------------------------------- 1 | {"group_id":"day 14 part 1","function_id":null,"value_str":null,"throughput":null,"full_id":"day 14 part 1","directory_name":"day 14 part 1","title":"day 14 part 1"} -------------------------------------------------------------------------------- /docs/criterion/day 14 part 1/base/tukey.json: -------------------------------------------------------------------------------- 1 | [151686.16756272406,166213.142921147,204951.74387694144,219478.71923536435] -------------------------------------------------------------------------------- /docs/criterion/day 14 part 1/new/benchmark.json: -------------------------------------------------------------------------------- 1 | {"group_id":"day 14 part 1","function_id":null,"value_str":null,"throughput":null,"full_id":"day 14 part 1","directory_name":"day 14 part 1","title":"day 14 part 1"} -------------------------------------------------------------------------------- /docs/criterion/day 14 part 1/new/tukey.json: -------------------------------------------------------------------------------- 1 | [151686.16756272406,166213.142921147,204951.74387694144,219478.71923536435] -------------------------------------------------------------------------------- /docs/criterion/day 14 part 2/base/benchmark.json: -------------------------------------------------------------------------------- 1 | {"group_id":"day 14 part 2","function_id":null,"value_str":null,"throughput":null,"full_id":"day 14 part 2","directory_name":"day 14 part 2","title":"day 14 part 2"} -------------------------------------------------------------------------------- /docs/criterion/day 14 part 2/base/estimates.json: -------------------------------------------------------------------------------- 1 | {"mean":{"confidence_interval":{"confidence_level":0.95,"lower_bound":9596296.54104167,"upper_bound":9777587.025541667},"point_estimate":9685008.973333335,"standard_error":46489.3354074546},"median":{"confidence_interval":{"confidence_level":0.95,"lower_bound":9510317.5,"upper_bound":9698651.166666666},"point_estimate":9595734.333333332,"standard_error":54627.134779469176},"median_abs_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":300820.1524093738,"upper_bound":514809.1192603111},"point_estimate":428410.3586941953,"standard_error":59118.98480985394},"slope":null,"std_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":389111.8538165798,"upper_bound":538270.5681131511},"point_estimate":468349.4258054216,"standard_error":38128.87064244689}} -------------------------------------------------------------------------------- /docs/criterion/day 14 part 2/base/tukey.json: -------------------------------------------------------------------------------- 1 | [7610296.999999996,8492936.249999998,10846640.91666667,11729280.166666672] -------------------------------------------------------------------------------- /docs/criterion/day 14 part 2/new/benchmark.json: -------------------------------------------------------------------------------- 1 | {"group_id":"day 14 part 2","function_id":null,"value_str":null,"throughput":null,"full_id":"day 14 part 2","directory_name":"day 14 part 2","title":"day 14 part 2"} -------------------------------------------------------------------------------- /docs/criterion/day 14 part 2/new/estimates.json: -------------------------------------------------------------------------------- 1 | {"mean":{"confidence_interval":{"confidence_level":0.95,"lower_bound":9596296.54104167,"upper_bound":9777587.025541667},"point_estimate":9685008.973333335,"standard_error":46489.3354074546},"median":{"confidence_interval":{"confidence_level":0.95,"lower_bound":9510317.5,"upper_bound":9698651.166666666},"point_estimate":9595734.333333332,"standard_error":54627.134779469176},"median_abs_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":300820.1524093738,"upper_bound":514809.1192603111},"point_estimate":428410.3586941953,"standard_error":59118.98480985394},"slope":null,"std_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":389111.8538165798,"upper_bound":538270.5681131511},"point_estimate":468349.4258054216,"standard_error":38128.87064244689}} -------------------------------------------------------------------------------- /docs/criterion/day 14 part 2/new/tukey.json: -------------------------------------------------------------------------------- 1 | [7610296.999999996,8492936.249999998,10846640.91666667,11729280.166666672] -------------------------------------------------------------------------------- /docs/criterion/day 15 part 1/base/benchmark.json: -------------------------------------------------------------------------------- 1 | {"group_id":"day 15 part 1","function_id":null,"value_str":null,"throughput":null,"full_id":"day 15 part 1","directory_name":"day 15 part 1","title":"day 15 part 1"} -------------------------------------------------------------------------------- /docs/criterion/day 15 part 1/base/estimates.json: -------------------------------------------------------------------------------- 1 | {"mean":{"confidence_interval":{"confidence_level":0.95,"lower_bound":7440.146154020099,"upper_bound":7592.621209986581},"point_estimate":7516.816162771921,"standard_error":38.822778145012876},"median":{"confidence_interval":{"confidence_level":0.95,"lower_bound":7448.865817263544,"upper_bound":7551.574279379158},"point_estimate":7492.452922077922,"standard_error":28.860962405830392},"median_abs_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":168.98490630968269,"upper_bound":320.4597953737896},"point_estimate":218.42942342825194,"standard_error":39.54145110725635},"slope":{"confidence_interval":{"confidence_level":0.95,"lower_bound":7379.961235332707,"upper_bound":7536.18032714815},"point_estimate":7456.657555404794,"standard_error":39.741317607042376},"std_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":312.6774304435955,"upper_bound":463.2480406309602},"point_estimate":390.86952567126167,"standard_error":38.50762541675306}} -------------------------------------------------------------------------------- /docs/criterion/day 15 part 1/base/tukey.json: -------------------------------------------------------------------------------- 1 | [6457.679099475759,6902.618359656116,8089.1230534704,8534.062313650757] -------------------------------------------------------------------------------- /docs/criterion/day 15 part 1/new/benchmark.json: -------------------------------------------------------------------------------- 1 | {"group_id":"day 15 part 1","function_id":null,"value_str":null,"throughput":null,"full_id":"day 15 part 1","directory_name":"day 15 part 1","title":"day 15 part 1"} -------------------------------------------------------------------------------- /docs/criterion/day 15 part 1/new/estimates.json: -------------------------------------------------------------------------------- 1 | {"mean":{"confidence_interval":{"confidence_level":0.95,"lower_bound":7440.146154020099,"upper_bound":7592.621209986581},"point_estimate":7516.816162771921,"standard_error":38.822778145012876},"median":{"confidence_interval":{"confidence_level":0.95,"lower_bound":7448.865817263544,"upper_bound":7551.574279379158},"point_estimate":7492.452922077922,"standard_error":28.860962405830392},"median_abs_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":168.98490630968269,"upper_bound":320.4597953737896},"point_estimate":218.42942342825194,"standard_error":39.54145110725635},"slope":{"confidence_interval":{"confidence_level":0.95,"lower_bound":7379.961235332707,"upper_bound":7536.18032714815},"point_estimate":7456.657555404794,"standard_error":39.741317607042376},"std_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":312.6774304435955,"upper_bound":463.2480406309602},"point_estimate":390.86952567126167,"standard_error":38.50762541675306}} -------------------------------------------------------------------------------- /docs/criterion/day 15 part 1/new/tukey.json: -------------------------------------------------------------------------------- 1 | [6457.679099475759,6902.618359656116,8089.1230534704,8534.062313650757] -------------------------------------------------------------------------------- /docs/criterion/day 15 part 2/base/benchmark.json: -------------------------------------------------------------------------------- 1 | {"group_id":"day 15 part 2","function_id":null,"value_str":null,"throughput":null,"full_id":"day 15 part 2","directory_name":"day 15 part 2","title":"day 15 part 2"} -------------------------------------------------------------------------------- /docs/criterion/day 15 part 2/base/estimates.json: -------------------------------------------------------------------------------- 1 | {"mean":{"confidence_interval":{"confidence_level":0.95,"lower_bound":476235109.39975005,"upper_bound":489091876.167},"point_estimate":482493467.92,"standard_error":3279059.2768144454},"median":{"confidence_interval":{"confidence_level":0.95,"lower_bound":468483304.0,"upper_bound":483929997.5},"point_estimate":478057697.5,"standard_error":3702140.3963116454},"median_abs_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":21446137.756454945,"upper_bound":34707252.479723096},"point_estimate":26811481.736201048,"standard_error":3238266.6440386306},"slope":null,"std_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":27248614.54609363,"upper_bound":37605924.810909554},"point_estimate":32813509.40128626,"standard_error":2665560.004205598}} -------------------------------------------------------------------------------- /docs/criterion/day 15 part 2/base/tukey.json: -------------------------------------------------------------------------------- 1 | [352032037.0,405784822.375,549125583.375,602878368.75] -------------------------------------------------------------------------------- /docs/criterion/day 15 part 2/new/benchmark.json: -------------------------------------------------------------------------------- 1 | {"group_id":"day 15 part 2","function_id":null,"value_str":null,"throughput":null,"full_id":"day 15 part 2","directory_name":"day 15 part 2","title":"day 15 part 2"} -------------------------------------------------------------------------------- /docs/criterion/day 15 part 2/new/estimates.json: -------------------------------------------------------------------------------- 1 | {"mean":{"confidence_interval":{"confidence_level":0.95,"lower_bound":476235109.39975005,"upper_bound":489091876.167},"point_estimate":482493467.92,"standard_error":3279059.2768144454},"median":{"confidence_interval":{"confidence_level":0.95,"lower_bound":468483304.0,"upper_bound":483929997.5},"point_estimate":478057697.5,"standard_error":3702140.3963116454},"median_abs_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":21446137.756454945,"upper_bound":34707252.479723096},"point_estimate":26811481.736201048,"standard_error":3238266.6440386306},"slope":null,"std_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":27248614.54609363,"upper_bound":37605924.810909554},"point_estimate":32813509.40128626,"standard_error":2665560.004205598}} -------------------------------------------------------------------------------- /docs/criterion/day 15 part 2/new/tukey.json: -------------------------------------------------------------------------------- 1 | [352032037.0,405784822.375,549125583.375,602878368.75] -------------------------------------------------------------------------------- /docs/criterion/day 16 part 1/base/benchmark.json: -------------------------------------------------------------------------------- 1 | {"group_id":"day 16 part 1","function_id":null,"value_str":null,"throughput":null,"full_id":"day 16 part 1","directory_name":"day 16 part 1","title":"day 16 part 1"} -------------------------------------------------------------------------------- /docs/criterion/day 16 part 1/base/estimates.json: -------------------------------------------------------------------------------- 1 | {"mean":{"confidence_interval":{"confidence_level":0.95,"lower_bound":257007.1705488588,"upper_bound":264562.072570215},"point_estimate":260582.6671807314,"standard_error":1934.5396198711758},"median":{"confidence_interval":{"confidence_level":0.95,"lower_bound":252876.2451923077,"upper_bound":258416.9975},"point_estimate":256361.79284869976,"standard_error":1262.8957182260683},"median_abs_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":10965.701879778368,"upper_bound":17523.939342759106},"point_estimate":14143.310000095224,"standard_error":1667.2770042699233},"slope":{"confidence_interval":{"confidence_level":0.95,"lower_bound":254232.444560192,"upper_bound":260692.8034825574},"point_estimate":257284.14799468007,"standard_error":1646.1382907785407},"std_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":13563.897676060382,"upper_bound":25026.645501362447},"point_estimate":19525.45034197515,"standard_error":2960.697425902565}} -------------------------------------------------------------------------------- /docs/criterion/day 16 part 1/base/tukey.json: -------------------------------------------------------------------------------- 1 | [191116.7206801069,219327.2492531918,294555.3254480849,322765.8540211698] -------------------------------------------------------------------------------- /docs/criterion/day 16 part 1/new/benchmark.json: -------------------------------------------------------------------------------- 1 | {"group_id":"day 16 part 1","function_id":null,"value_str":null,"throughput":null,"full_id":"day 16 part 1","directory_name":"day 16 part 1","title":"day 16 part 1"} -------------------------------------------------------------------------------- /docs/criterion/day 16 part 1/new/estimates.json: -------------------------------------------------------------------------------- 1 | {"mean":{"confidence_interval":{"confidence_level":0.95,"lower_bound":257007.1705488588,"upper_bound":264562.072570215},"point_estimate":260582.6671807314,"standard_error":1934.5396198711758},"median":{"confidence_interval":{"confidence_level":0.95,"lower_bound":252876.2451923077,"upper_bound":258416.9975},"point_estimate":256361.79284869976,"standard_error":1262.8957182260683},"median_abs_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":10965.701879778368,"upper_bound":17523.939342759106},"point_estimate":14143.310000095224,"standard_error":1667.2770042699233},"slope":{"confidence_interval":{"confidence_level":0.95,"lower_bound":254232.444560192,"upper_bound":260692.8034825574},"point_estimate":257284.14799468007,"standard_error":1646.1382907785407},"std_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":13563.897676060382,"upper_bound":25026.645501362447},"point_estimate":19525.45034197515,"standard_error":2960.697425902565}} -------------------------------------------------------------------------------- /docs/criterion/day 16 part 1/new/tukey.json: -------------------------------------------------------------------------------- 1 | [191116.7206801069,219327.2492531918,294555.3254480849,322765.8540211698] -------------------------------------------------------------------------------- /docs/criterion/day 16 part 2/base/benchmark.json: -------------------------------------------------------------------------------- 1 | {"group_id":"day 16 part 2","function_id":null,"value_str":null,"throughput":null,"full_id":"day 16 part 2","directory_name":"day 16 part 2","title":"day 16 part 2"} -------------------------------------------------------------------------------- /docs/criterion/day 16 part 2/base/estimates.json: -------------------------------------------------------------------------------- 1 | {"mean":{"confidence_interval":{"confidence_level":0.95,"lower_bound":620618.340856766,"upper_bound":636604.8907476941},"point_estimate":628251.7290332373,"standard_error":4080.1288111969848},"median":{"confidence_interval":{"confidence_level":0.95,"lower_bound":614368.5757575758,"upper_bound":628435.224137931},"point_estimate":623434.6041839272,"standard_error":3382.843672746258},"median_abs_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":19909.281594629192,"upper_bound":33006.50712576685},"point_estimate":27069.918819680242,"standard_error":3414.001866433415},"slope":{"confidence_interval":{"confidence_level":0.95,"lower_bound":622898.4344685526,"upper_bound":635341.0270962842},"point_estimate":628967.893339737,"standard_error":3159.466475708279},"std_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":29373.52000280215,"upper_bound":52006.64098943928},"point_estimate":41043.39618825916,"standard_error":5806.684612248652}} -------------------------------------------------------------------------------- /docs/criterion/day 16 part 2/base/tukey.json: -------------------------------------------------------------------------------- 1 | [498143.1753206658,552164.1604874975,696220.1209323818,750241.1060992135] -------------------------------------------------------------------------------- /docs/criterion/day 16 part 2/new/benchmark.json: -------------------------------------------------------------------------------- 1 | {"group_id":"day 16 part 2","function_id":null,"value_str":null,"throughput":null,"full_id":"day 16 part 2","directory_name":"day 16 part 2","title":"day 16 part 2"} -------------------------------------------------------------------------------- /docs/criterion/day 16 part 2/new/estimates.json: -------------------------------------------------------------------------------- 1 | {"mean":{"confidence_interval":{"confidence_level":0.95,"lower_bound":620618.340856766,"upper_bound":636604.8907476941},"point_estimate":628251.7290332373,"standard_error":4080.1288111969848},"median":{"confidence_interval":{"confidence_level":0.95,"lower_bound":614368.5757575758,"upper_bound":628435.224137931},"point_estimate":623434.6041839272,"standard_error":3382.843672746258},"median_abs_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":19909.281594629192,"upper_bound":33006.50712576685},"point_estimate":27069.918819680242,"standard_error":3414.001866433415},"slope":{"confidence_interval":{"confidence_level":0.95,"lower_bound":622898.4344685526,"upper_bound":635341.0270962842},"point_estimate":628967.893339737,"standard_error":3159.466475708279},"std_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":29373.52000280215,"upper_bound":52006.64098943928},"point_estimate":41043.39618825916,"standard_error":5806.684612248652}} -------------------------------------------------------------------------------- /docs/criterion/day 16 part 2/new/tukey.json: -------------------------------------------------------------------------------- 1 | [498143.1753206658,552164.1604874975,696220.1209323818,750241.1060992135] -------------------------------------------------------------------------------- /docs/criterion/day 17 part 1/base/benchmark.json: -------------------------------------------------------------------------------- 1 | {"group_id":"day 17 part 1","function_id":null,"value_str":null,"throughput":null,"full_id":"day 17 part 1","directory_name":"day 17 part 1","title":"day 17 part 1"} -------------------------------------------------------------------------------- /docs/criterion/day 17 part 1/base/estimates.json: -------------------------------------------------------------------------------- 1 | {"mean":{"confidence_interval":{"confidence_level":0.95,"lower_bound":2809205.983125,"upper_bound":2862748.70923611},"point_estimate":2835201.549999999,"standard_error":13676.845722455404},"median":{"confidence_interval":{"confidence_level":0.95,"lower_bound":2798848.666666667,"upper_bound":2834395.944444444},"point_estimate":2810837.583333333,"standard_error":8993.31259937622},"median_abs_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":57636.15634342027,"upper_bound":107938.24273454613},"point_estimate":78899.11096592713,"standard_error":12568.290244839296},"slope":null,"std_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":106545.50265237803,"upper_bound":165832.04638417464},"point_estimate":137399.19437767263,"standard_error":15174.381434304754}} -------------------------------------------------------------------------------- /docs/criterion/day 17 part 1/base/tukey.json: -------------------------------------------------------------------------------- 1 | [2461262.125,2617251.916666667,3033224.694444445,3189214.4861111115] -------------------------------------------------------------------------------- /docs/criterion/day 17 part 1/new/benchmark.json: -------------------------------------------------------------------------------- 1 | {"group_id":"day 17 part 1","function_id":null,"value_str":null,"throughput":null,"full_id":"day 17 part 1","directory_name":"day 17 part 1","title":"day 17 part 1"} -------------------------------------------------------------------------------- /docs/criterion/day 17 part 1/new/estimates.json: -------------------------------------------------------------------------------- 1 | {"mean":{"confidence_interval":{"confidence_level":0.95,"lower_bound":2809205.983125,"upper_bound":2862748.70923611},"point_estimate":2835201.549999999,"standard_error":13676.845722455404},"median":{"confidence_interval":{"confidence_level":0.95,"lower_bound":2798848.666666667,"upper_bound":2834395.944444444},"point_estimate":2810837.583333333,"standard_error":8993.31259937622},"median_abs_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":57636.15634342027,"upper_bound":107938.24273454613},"point_estimate":78899.11096592713,"standard_error":12568.290244839296},"slope":null,"std_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":106545.50265237803,"upper_bound":165832.04638417464},"point_estimate":137399.19437767263,"standard_error":15174.381434304754}} -------------------------------------------------------------------------------- /docs/criterion/day 17 part 1/new/tukey.json: -------------------------------------------------------------------------------- 1 | [2461262.125,2617251.916666667,3033224.694444445,3189214.4861111115] -------------------------------------------------------------------------------- /docs/criterion/day 17 part 2/base/benchmark.json: -------------------------------------------------------------------------------- 1 | {"group_id":"day 17 part 2","function_id":null,"value_str":null,"throughput":null,"full_id":"day 17 part 2","directory_name":"day 17 part 2","title":"day 17 part 2"} -------------------------------------------------------------------------------- /docs/criterion/day 17 part 2/base/estimates.json: -------------------------------------------------------------------------------- 1 | {"mean":{"confidence_interval":{"confidence_level":0.95,"lower_bound":38954742.357,"upper_bound":39617842.551},"point_estimate":39273412.36,"standard_error":168583.7210562802},"median":{"confidence_interval":{"confidence_level":0.95,"lower_bound":38600224.0,"upper_bound":39421691.25},"point_estimate":38880763.0,"standard_error":232868.83639755927},"median_abs_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":1003717.2169804573,"upper_bound":1738353.6582380533},"point_estimate":1237440.5778810382,"standard_error":182942.69870387416},"slope":null,"std_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":1308141.5916649478,"upper_bound":2102973.2285137633},"point_estimate":1692403.2044363646,"standard_error":206964.48283671602}} -------------------------------------------------------------------------------- /docs/criterion/day 17 part 2/base/tukey.json: -------------------------------------------------------------------------------- 1 | [32839001.0,35530101.125,42706368.125,45397468.25] -------------------------------------------------------------------------------- /docs/criterion/day 17 part 2/new/benchmark.json: -------------------------------------------------------------------------------- 1 | {"group_id":"day 17 part 2","function_id":null,"value_str":null,"throughput":null,"full_id":"day 17 part 2","directory_name":"day 17 part 2","title":"day 17 part 2"} -------------------------------------------------------------------------------- /docs/criterion/day 17 part 2/new/estimates.json: -------------------------------------------------------------------------------- 1 | {"mean":{"confidence_interval":{"confidence_level":0.95,"lower_bound":38954742.357,"upper_bound":39617842.551},"point_estimate":39273412.36,"standard_error":168583.7210562802},"median":{"confidence_interval":{"confidence_level":0.95,"lower_bound":38600224.0,"upper_bound":39421691.25},"point_estimate":38880763.0,"standard_error":232868.83639755927},"median_abs_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":1003717.2169804573,"upper_bound":1738353.6582380533},"point_estimate":1237440.5778810382,"standard_error":182942.69870387416},"slope":null,"std_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":1308141.5916649478,"upper_bound":2102973.2285137633},"point_estimate":1692403.2044363646,"standard_error":206964.48283671602}} -------------------------------------------------------------------------------- /docs/criterion/day 17 part 2/new/tukey.json: -------------------------------------------------------------------------------- 1 | [32839001.0,35530101.125,42706368.125,45397468.25] -------------------------------------------------------------------------------- /docs/criterion/day 18 part 1/base/benchmark.json: -------------------------------------------------------------------------------- 1 | {"group_id":"day 18 part 1","function_id":null,"value_str":null,"throughput":null,"full_id":"day 18 part 1","directory_name":"day 18 part 1","title":"day 18 part 1"} -------------------------------------------------------------------------------- /docs/criterion/day 18 part 1/base/tukey.json: -------------------------------------------------------------------------------- 1 | [123768.55579752734,139684.7172411673,182127.81442420717,198043.97586784713] -------------------------------------------------------------------------------- /docs/criterion/day 18 part 1/new/benchmark.json: -------------------------------------------------------------------------------- 1 | {"group_id":"day 18 part 1","function_id":null,"value_str":null,"throughput":null,"full_id":"day 18 part 1","directory_name":"day 18 part 1","title":"day 18 part 1"} -------------------------------------------------------------------------------- /docs/criterion/day 18 part 1/new/estimates.json: -------------------------------------------------------------------------------- 1 | {"mean":{"confidence_interval":{"confidence_level":0.95,"lower_bound":158532.1313424396,"upper_bound":162624.15139952936},"point_estimate":160586.8640265545,"standard_error":1036.387871149328},"median":{"confidence_interval":{"confidence_level":0.95,"lower_bound":159736.51034482758,"upper_bound":162649.11764705883},"point_estimate":161330.38968253968,"standard_error":788.4690407755048},"median_abs_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":6001.349388490188,"upper_bound":10206.915829949306},"point_estimate":7608.495309713872,"standard_error":1079.5603584897224},"slope":{"confidence_interval":{"confidence_level":0.95,"lower_bound":163823.38906710618,"upper_bound":167677.7213669023},"point_estimate":165695.74289556462,"standard_error":988.043392350842},"std_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":8755.112632854725,"upper_bound":11948.272432051699},"point_estimate":10455.605381777426,"standard_error":818.1965656959104}} -------------------------------------------------------------------------------- /docs/criterion/day 18 part 1/new/tukey.json: -------------------------------------------------------------------------------- 1 | [123768.55579752734,139684.7172411673,182127.81442420717,198043.97586784713] -------------------------------------------------------------------------------- /docs/criterion/day 18 part 2/base/benchmark.json: -------------------------------------------------------------------------------- 1 | {"group_id":"day 18 part 2","function_id":null,"value_str":null,"throughput":null,"full_id":"day 18 part 2","directory_name":"day 18 part 2","title":"day 18 part 2"} -------------------------------------------------------------------------------- /docs/criterion/day 18 part 2/base/tukey.json: -------------------------------------------------------------------------------- 1 | [204812.44874799353,220727.26508828247,263166.775329053,279081.59166934196] -------------------------------------------------------------------------------- /docs/criterion/day 18 part 2/new/benchmark.json: -------------------------------------------------------------------------------- 1 | {"group_id":"day 18 part 2","function_id":null,"value_str":null,"throughput":null,"full_id":"day 18 part 2","directory_name":"day 18 part 2","title":"day 18 part 2"} -------------------------------------------------------------------------------- /docs/criterion/day 18 part 2/new/estimates.json: -------------------------------------------------------------------------------- 1 | {"mean":{"confidence_interval":{"confidence_level":0.95,"lower_bound":241577.35505536993,"upper_bound":246652.97304627407},"point_estimate":244032.5506782625,"standard_error":1301.7569027038187},"median":{"confidence_interval":{"confidence_level":0.95,"lower_bound":240461.62233309576,"upper_bound":243698.26666666666},"point_estimate":242616.51983755076,"standard_error":752.6304911870562},"median_abs_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":6034.664536942894,"upper_bound":10232.577635252404},"point_estimate":8034.255006163467,"standard_error":1075.862993115635},"slope":{"confidence_interval":{"confidence_level":0.95,"lower_bound":241058.34556645047,"upper_bound":245837.41052418},"point_estimate":243447.41868065612,"standard_error":1213.1850089709144},"std_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":9895.803414792786,"upper_bound":16007.344169466985},"point_estimate":13081.13090910614,"standard_error":1569.336476648237}} -------------------------------------------------------------------------------- /docs/criterion/day 18 part 2/new/tukey.json: -------------------------------------------------------------------------------- 1 | [204812.44874799353,220727.26508828247,263166.775329053,279081.59166934196] -------------------------------------------------------------------------------- /docs/criterion/day 19 part 1/base/benchmark.json: -------------------------------------------------------------------------------- 1 | {"group_id":"day 19 part 1","function_id":null,"value_str":null,"throughput":null,"full_id":"day 19 part 1","directory_name":"day 19 part 1","title":"day 19 part 1"} -------------------------------------------------------------------------------- /docs/criterion/day 19 part 1/base/estimates.json: -------------------------------------------------------------------------------- 1 | {"mean":{"confidence_interval":{"confidence_level":0.95,"lower_bound":16376289.019562501,"upper_bound":16685337.6533125},"point_estimate":16524005.4075,"standard_error":78692.68504803823},"median":{"confidence_interval":{"confidence_level":0.95,"lower_bound":16219424.5,"upper_bound":16503600.0},"point_estimate":16339374.625,"standard_error":75257.32904802439},"median_abs_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":376930.2869081497,"upper_bound":669273.6121930182},"point_estimate":564278.4766070545,"standard_error":73030.9401928632},"slope":null,"std_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":581283.8090852408,"upper_bound":976467.8067845023},"point_estimate":789020.751135209,"standard_error":101364.98680141197}} -------------------------------------------------------------------------------- /docs/criterion/day 19 part 1/base/tukey.json: -------------------------------------------------------------------------------- 1 | [14015077.5,15052413.375,17818642.375,18855978.25] -------------------------------------------------------------------------------- /docs/criterion/day 19 part 1/new/benchmark.json: -------------------------------------------------------------------------------- 1 | {"group_id":"day 19 part 1","function_id":null,"value_str":null,"throughput":null,"full_id":"day 19 part 1","directory_name":"day 19 part 1","title":"day 19 part 1"} -------------------------------------------------------------------------------- /docs/criterion/day 19 part 1/new/estimates.json: -------------------------------------------------------------------------------- 1 | {"mean":{"confidence_interval":{"confidence_level":0.95,"lower_bound":16376289.019562501,"upper_bound":16685337.6533125},"point_estimate":16524005.4075,"standard_error":78692.68504803823},"median":{"confidence_interval":{"confidence_level":0.95,"lower_bound":16219424.5,"upper_bound":16503600.0},"point_estimate":16339374.625,"standard_error":75257.32904802439},"median_abs_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":376930.2869081497,"upper_bound":669273.6121930182},"point_estimate":564278.4766070545,"standard_error":73030.9401928632},"slope":null,"std_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":581283.8090852408,"upper_bound":976467.8067845023},"point_estimate":789020.751135209,"standard_error":101364.98680141197}} -------------------------------------------------------------------------------- /docs/criterion/day 19 part 1/new/tukey.json: -------------------------------------------------------------------------------- 1 | [14015077.5,15052413.375,17818642.375,18855978.25] -------------------------------------------------------------------------------- /docs/criterion/day 19 part 2/base/benchmark.json: -------------------------------------------------------------------------------- 1 | {"group_id":"day 19 part 2","function_id":null,"value_str":null,"throughput":null,"full_id":"day 19 part 2","directory_name":"day 19 part 2","title":"day 19 part 2"} -------------------------------------------------------------------------------- /docs/criterion/day 19 part 2/base/estimates.json: -------------------------------------------------------------------------------- 1 | {"mean":{"confidence_interval":{"confidence_level":0.95,"lower_bound":20818424.359250005,"upper_bound":21185110.57383333},"point_estimate":20997348.22666667,"standard_error":93819.31227203028},"median":{"confidence_interval":{"confidence_level":0.95,"lower_bound":20666367.0,"upper_bound":21060933.666666668},"point_estimate":20845984.333333336,"standard_error":106582.67007966072},"median_abs_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":636745.8567930019,"upper_bound":987930.2453607302},"point_estimate":849283.1791222142,"standard_error":92624.34311539074},"slope":null,"std_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":741493.7203390638,"upper_bound":1132529.6581012928},"point_estimate":944726.1533422568,"standard_error":100331.47567662124}} -------------------------------------------------------------------------------- /docs/criterion/day 19 part 2/base/tukey.json: -------------------------------------------------------------------------------- 1 | [16802278.333333325,18558106.08333333,23240313.41666667,24996141.166666675] -------------------------------------------------------------------------------- /docs/criterion/day 19 part 2/new/benchmark.json: -------------------------------------------------------------------------------- 1 | {"group_id":"day 19 part 2","function_id":null,"value_str":null,"throughput":null,"full_id":"day 19 part 2","directory_name":"day 19 part 2","title":"day 19 part 2"} -------------------------------------------------------------------------------- /docs/criterion/day 19 part 2/new/estimates.json: -------------------------------------------------------------------------------- 1 | {"mean":{"confidence_interval":{"confidence_level":0.95,"lower_bound":20818424.359250005,"upper_bound":21185110.57383333},"point_estimate":20997348.22666667,"standard_error":93819.31227203028},"median":{"confidence_interval":{"confidence_level":0.95,"lower_bound":20666367.0,"upper_bound":21060933.666666668},"point_estimate":20845984.333333336,"standard_error":106582.67007966072},"median_abs_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":636745.8567930019,"upper_bound":987930.2453607302},"point_estimate":849283.1791222142,"standard_error":92624.34311539074},"slope":null,"std_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":741493.7203390638,"upper_bound":1132529.6581012928},"point_estimate":944726.1533422568,"standard_error":100331.47567662124}} -------------------------------------------------------------------------------- /docs/criterion/day 19 part 2/new/tukey.json: -------------------------------------------------------------------------------- 1 | [16802278.333333325,18558106.08333333,23240313.41666667,24996141.166666675] -------------------------------------------------------------------------------- /docs/criterion/day 2 part 1/base/benchmark.json: -------------------------------------------------------------------------------- 1 | {"group_id":"day 2 part 1","function_id":null,"value_str":null,"throughput":null,"full_id":"day 2 part 1","directory_name":"day 2 part 1","title":"day 2 part 1"} -------------------------------------------------------------------------------- /docs/criterion/day 2 part 1/base/estimates.json: -------------------------------------------------------------------------------- 1 | {"mean":{"confidence_interval":{"confidence_level":0.95,"lower_bound":867999.7915473842,"upper_bound":885891.2427599672},"point_estimate":877184.2607571769,"standard_error":4573.909811904734},"median":{"confidence_interval":{"confidence_level":0.95,"lower_bound":875065.43713838,"upper_bound":892128.1847439546},"point_estimate":884723.0047169812,"standard_error":4276.103317222753},"median_abs_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":24768.762356209518,"upper_bound":42415.92728333036},"point_estimate":30271.556822824863,"standard_error":4557.456015157203},"slope":{"confidence_interval":{"confidence_level":0.95,"lower_bound":888152.0589024422,"upper_bound":901650.4104760011},"point_estimate":894692.309058667,"standard_error":3432.7524358815294},"std_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":37428.45481101221,"upper_bound":53251.31583351609},"point_estimate":46035.8818593699,"standard_error":4058.3228386730893}} -------------------------------------------------------------------------------- /docs/criterion/day 2 part 1/base/tukey.json: -------------------------------------------------------------------------------- 1 | [737229.8738456462,799688.1909999172,966243.7034113067,1028702.0205655778] -------------------------------------------------------------------------------- /docs/criterion/day 2 part 1/new/benchmark.json: -------------------------------------------------------------------------------- 1 | {"group_id":"day 2 part 1","function_id":null,"value_str":null,"throughput":null,"full_id":"day 2 part 1","directory_name":"day 2 part 1","title":"day 2 part 1"} -------------------------------------------------------------------------------- /docs/criterion/day 2 part 1/new/estimates.json: -------------------------------------------------------------------------------- 1 | {"mean":{"confidence_interval":{"confidence_level":0.95,"lower_bound":867999.7915473842,"upper_bound":885891.2427599672},"point_estimate":877184.2607571769,"standard_error":4573.909811904734},"median":{"confidence_interval":{"confidence_level":0.95,"lower_bound":875065.43713838,"upper_bound":892128.1847439546},"point_estimate":884723.0047169812,"standard_error":4276.103317222753},"median_abs_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":24768.762356209518,"upper_bound":42415.92728333036},"point_estimate":30271.556822824863,"standard_error":4557.456015157203},"slope":{"confidence_interval":{"confidence_level":0.95,"lower_bound":888152.0589024422,"upper_bound":901650.4104760011},"point_estimate":894692.309058667,"standard_error":3432.7524358815294},"std_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":37428.45481101221,"upper_bound":53251.31583351609},"point_estimate":46035.8818593699,"standard_error":4058.3228386730893}} -------------------------------------------------------------------------------- /docs/criterion/day 2 part 1/new/tukey.json: -------------------------------------------------------------------------------- 1 | [737229.8738456462,799688.1909999172,966243.7034113067,1028702.0205655778] -------------------------------------------------------------------------------- /docs/criterion/day 2 part 2/base/benchmark.json: -------------------------------------------------------------------------------- 1 | {"group_id":"day 2 part 2","function_id":null,"value_str":null,"throughput":null,"full_id":"day 2 part 2","directory_name":"day 2 part 2","title":"day 2 part 2"} -------------------------------------------------------------------------------- /docs/criterion/day 2 part 2/base/estimates.json: -------------------------------------------------------------------------------- 1 | {"mean":{"confidence_interval":{"confidence_level":0.95,"lower_bound":917281.3180544764,"upper_bound":934162.8135104612},"point_estimate":925675.9734930327,"standard_error":4313.068235668244},"median":{"confidence_interval":{"confidence_level":0.95,"lower_bound":911649.5434782609,"upper_bound":927690.494108116},"point_estimate":919787.2589285714,"standard_error":5064.34516698076},"median_abs_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":23974.745348260214,"upper_bound":46164.05174325301},"point_estimate":37019.88395869071,"standard_error":5875.902536021135},"slope":{"confidence_interval":{"confidence_level":0.95,"lower_bound":922298.73851997,"upper_bound":937708.3015388583},"point_estimate":929857.9463853998,"standard_error":3951.5698018424714},"std_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":36673.247985479116,"upper_bound":49284.443446203695},"point_estimate":43360.309375283956,"standard_error":3227.6547065389486}} -------------------------------------------------------------------------------- /docs/criterion/day 2 part 2/base/tukey.json: -------------------------------------------------------------------------------- 1 | [746545.0716328929,823605.3694203426,1029099.4968535416,1106159.7946409911] -------------------------------------------------------------------------------- /docs/criterion/day 2 part 2/new/benchmark.json: -------------------------------------------------------------------------------- 1 | {"group_id":"day 2 part 2","function_id":null,"value_str":null,"throughput":null,"full_id":"day 2 part 2","directory_name":"day 2 part 2","title":"day 2 part 2"} -------------------------------------------------------------------------------- /docs/criterion/day 2 part 2/new/estimates.json: -------------------------------------------------------------------------------- 1 | {"mean":{"confidence_interval":{"confidence_level":0.95,"lower_bound":917281.3180544764,"upper_bound":934162.8135104612},"point_estimate":925675.9734930327,"standard_error":4313.068235668244},"median":{"confidence_interval":{"confidence_level":0.95,"lower_bound":911649.5434782609,"upper_bound":927690.494108116},"point_estimate":919787.2589285714,"standard_error":5064.34516698076},"median_abs_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":23974.745348260214,"upper_bound":46164.05174325301},"point_estimate":37019.88395869071,"standard_error":5875.902536021135},"slope":{"confidence_interval":{"confidence_level":0.95,"lower_bound":922298.73851997,"upper_bound":937708.3015388583},"point_estimate":929857.9463853998,"standard_error":3951.5698018424714},"std_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":36673.247985479116,"upper_bound":49284.443446203695},"point_estimate":43360.309375283956,"standard_error":3227.6547065389486}} -------------------------------------------------------------------------------- /docs/criterion/day 2 part 2/new/tukey.json: -------------------------------------------------------------------------------- 1 | [746545.0716328929,823605.3694203426,1029099.4968535416,1106159.7946409911] -------------------------------------------------------------------------------- /docs/criterion/day 20 part 1/base/benchmark.json: -------------------------------------------------------------------------------- 1 | {"group_id":"day 20 part 1","function_id":null,"value_str":null,"throughput":null,"full_id":"day 20 part 1","directory_name":"day 20 part 1","title":"day 20 part 1"} -------------------------------------------------------------------------------- /docs/criterion/day 20 part 1/base/estimates.json: -------------------------------------------------------------------------------- 1 | {"mean":{"confidence_interval":{"confidence_level":0.95,"lower_bound":297158736.61750007,"upper_bound":410722858.2475},"point_estimate":352292469.51,"standard_error":28863612.390033588},"median":{"confidence_interval":{"confidence_level":0.95,"lower_bound":240145758.0,"upper_bound":358947730.0},"point_estimate":294336705.0,"standard_error":29317588.81330015},"median_abs_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":197562358.360067,"upper_bound":343831923.00916314},"point_estimate":269647159.306106,"standard_error":36912543.96533642},"slope":null,"std_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":241443880.17345816,"upper_bound":334207895.21246564},"point_estimate":290403786.05709624,"standard_error":23811143.435612895}} -------------------------------------------------------------------------------- /docs/criterion/day 20 part 1/base/tukey.json: -------------------------------------------------------------------------------- 1 | [-976047966.75,-431081763.0,1022161447.0,1567127650.75] -------------------------------------------------------------------------------- /docs/criterion/day 20 part 1/new/benchmark.json: -------------------------------------------------------------------------------- 1 | {"group_id":"day 20 part 1","function_id":null,"value_str":null,"throughput":null,"full_id":"day 20 part 1","directory_name":"day 20 part 1","title":"day 20 part 1"} -------------------------------------------------------------------------------- /docs/criterion/day 20 part 1/new/estimates.json: -------------------------------------------------------------------------------- 1 | {"mean":{"confidence_interval":{"confidence_level":0.95,"lower_bound":297158736.61750007,"upper_bound":410722858.2475},"point_estimate":352292469.51,"standard_error":28863612.390033588},"median":{"confidence_interval":{"confidence_level":0.95,"lower_bound":240145758.0,"upper_bound":358947730.0},"point_estimate":294336705.0,"standard_error":29317588.81330015},"median_abs_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":197562358.360067,"upper_bound":343831923.00916314},"point_estimate":269647159.306106,"standard_error":36912543.96533642},"slope":null,"std_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":241443880.17345816,"upper_bound":334207895.21246564},"point_estimate":290403786.05709624,"standard_error":23811143.435612895}} -------------------------------------------------------------------------------- /docs/criterion/day 20 part 1/new/tukey.json: -------------------------------------------------------------------------------- 1 | [-976047966.75,-431081763.0,1022161447.0,1567127650.75] -------------------------------------------------------------------------------- /docs/criterion/day 20 part 2/base/benchmark.json: -------------------------------------------------------------------------------- 1 | {"group_id":"day 20 part 2","function_id":null,"value_str":null,"throughput":null,"full_id":"day 20 part 2","directory_name":"day 20 part 2","title":"day 20 part 2"} -------------------------------------------------------------------------------- /docs/criterion/day 20 part 2/base/estimates.json: -------------------------------------------------------------------------------- 1 | {"mean":{"confidence_interval":{"confidence_level":0.95,"lower_bound":257388765.89975002,"upper_bound":363309494.13175},"point_estimate":308544379.4,"standard_error":27023763.39528069},"median":{"confidence_interval":{"confidence_level":0.95,"lower_bound":173595971.0,"upper_bound":315484434.5},"point_estimate":222538140.5,"standard_error":40364504.45664326},"median_abs_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":175389395.98161578,"upper_bound":307221846.25544935},"point_estimate":213162641.48530662,"standard_error":33304069.211935345},"slope":null,"std_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":221284567.79692537,"upper_bound":322861589.97803134},"point_estimate":273290671.28063506,"standard_error":26180852.774844036}} -------------------------------------------------------------------------------- /docs/criterion/day 20 part 2/base/tukey.json: -------------------------------------------------------------------------------- 1 | [-803454181.5,-351242718.375,854654516.625,1306865979.75] -------------------------------------------------------------------------------- /docs/criterion/day 20 part 2/new/benchmark.json: -------------------------------------------------------------------------------- 1 | {"group_id":"day 20 part 2","function_id":null,"value_str":null,"throughput":null,"full_id":"day 20 part 2","directory_name":"day 20 part 2","title":"day 20 part 2"} -------------------------------------------------------------------------------- /docs/criterion/day 20 part 2/new/estimates.json: -------------------------------------------------------------------------------- 1 | {"mean":{"confidence_interval":{"confidence_level":0.95,"lower_bound":257388765.89975002,"upper_bound":363309494.13175},"point_estimate":308544379.4,"standard_error":27023763.39528069},"median":{"confidence_interval":{"confidence_level":0.95,"lower_bound":173595971.0,"upper_bound":315484434.5},"point_estimate":222538140.5,"standard_error":40364504.45664326},"median_abs_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":175389395.98161578,"upper_bound":307221846.25544935},"point_estimate":213162641.48530662,"standard_error":33304069.211935345},"slope":null,"std_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":221284567.79692537,"upper_bound":322861589.97803134},"point_estimate":273290671.28063506,"standard_error":26180852.774844036}} -------------------------------------------------------------------------------- /docs/criterion/day 20 part 2/new/tukey.json: -------------------------------------------------------------------------------- 1 | [-803454181.5,-351242718.375,854654516.625,1306865979.75] -------------------------------------------------------------------------------- /docs/criterion/day 21 part 1/base/benchmark.json: -------------------------------------------------------------------------------- 1 | {"group_id":"day 21 part 1","function_id":null,"value_str":null,"throughput":null,"full_id":"day 21 part 1","directory_name":"day 21 part 1","title":"day 21 part 1"} -------------------------------------------------------------------------------- /docs/criterion/day 21 part 1/base/tukey.json: -------------------------------------------------------------------------------- 1 | [316651.19173520646,367728.47880411113,503934.57765452366,555011.8647234284] -------------------------------------------------------------------------------- /docs/criterion/day 21 part 1/new/benchmark.json: -------------------------------------------------------------------------------- 1 | {"group_id":"day 21 part 1","function_id":null,"value_str":null,"throughput":null,"full_id":"day 21 part 1","directory_name":"day 21 part 1","title":"day 21 part 1"} -------------------------------------------------------------------------------- /docs/criterion/day 21 part 1/new/tukey.json: -------------------------------------------------------------------------------- 1 | [316651.19173520646,367728.47880411113,503934.57765452366,555011.8647234284] -------------------------------------------------------------------------------- /docs/criterion/day 21 part 2/base/benchmark.json: -------------------------------------------------------------------------------- 1 | {"group_id":"day 21 part 2","function_id":null,"value_str":null,"throughput":null,"full_id":"day 21 part 2","directory_name":"day 21 part 2","title":"day 21 part 2"} -------------------------------------------------------------------------------- /docs/criterion/day 21 part 2/base/tukey.json: -------------------------------------------------------------------------------- 1 | [283341.3594423161,317273.31144158816,407758.5167729803,441690.4687722523] -------------------------------------------------------------------------------- /docs/criterion/day 21 part 2/new/benchmark.json: -------------------------------------------------------------------------------- 1 | {"group_id":"day 21 part 2","function_id":null,"value_str":null,"throughput":null,"full_id":"day 21 part 2","directory_name":"day 21 part 2","title":"day 21 part 2"} -------------------------------------------------------------------------------- /docs/criterion/day 21 part 2/new/tukey.json: -------------------------------------------------------------------------------- 1 | [283341.3594423161,317273.31144158816,407758.5167729803,441690.4687722523] -------------------------------------------------------------------------------- /docs/criterion/day 22 part 1/base/benchmark.json: -------------------------------------------------------------------------------- 1 | {"group_id":"day 22 part 1","function_id":null,"value_str":null,"throughput":null,"full_id":"day 22 part 1","directory_name":"day 22 part 1","title":"day 22 part 1"} -------------------------------------------------------------------------------- /docs/criterion/day 22 part 1/base/tukey.json: -------------------------------------------------------------------------------- 1 | [1885.275397420517,2133.920718700323,2796.9749087798064,3045.620230059613] -------------------------------------------------------------------------------- /docs/criterion/day 22 part 1/new/benchmark.json: -------------------------------------------------------------------------------- 1 | {"group_id":"day 22 part 1","function_id":null,"value_str":null,"throughput":null,"full_id":"day 22 part 1","directory_name":"day 22 part 1","title":"day 22 part 1"} -------------------------------------------------------------------------------- /docs/criterion/day 22 part 1/new/tukey.json: -------------------------------------------------------------------------------- 1 | [1885.275397420517,2133.920718700323,2796.9749087798064,3045.620230059613] -------------------------------------------------------------------------------- /docs/criterion/day 22 part 2/base/benchmark.json: -------------------------------------------------------------------------------- 1 | {"group_id":"day 22 part 2","function_id":null,"value_str":null,"throughput":null,"full_id":"day 22 part 2","directory_name":"day 22 part 2","title":"day 22 part 2"} -------------------------------------------------------------------------------- /docs/criterion/day 22 part 2/base/estimates.json: -------------------------------------------------------------------------------- 1 | {"mean":{"confidence_interval":{"confidence_level":0.95,"lower_bound":730748265.3865,"upper_bound":739233353.3282499},"point_estimate":734962659.35,"standard_error":2151122.5391371544},"median":{"confidence_interval":{"confidence_level":0.95,"lower_bound":730756384.7500005,"upper_bound":739225674.0},"point_estimate":735627757.0,"standard_error":2173420.891903651},"median_abs_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":15288042.307552993,"upper_bound":23229508.98763127},"point_estimate":20218288.488453627,"standard_error":2036085.278920975},"slope":null,"std_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":17666416.607231315,"upper_bound":25262466.304574147},"point_estimate":21557361.58875448,"standard_error":1949816.9384860932}} -------------------------------------------------------------------------------- /docs/criterion/day 22 part 2/base/tukey.json: -------------------------------------------------------------------------------- 1 | [641048024.0,681483866.375,789312779.375,829748621.75] -------------------------------------------------------------------------------- /docs/criterion/day 22 part 2/new/benchmark.json: -------------------------------------------------------------------------------- 1 | {"group_id":"day 22 part 2","function_id":null,"value_str":null,"throughput":null,"full_id":"day 22 part 2","directory_name":"day 22 part 2","title":"day 22 part 2"} -------------------------------------------------------------------------------- /docs/criterion/day 22 part 2/new/estimates.json: -------------------------------------------------------------------------------- 1 | {"mean":{"confidence_interval":{"confidence_level":0.95,"lower_bound":730748265.3865,"upper_bound":739233353.3282499},"point_estimate":734962659.35,"standard_error":2151122.5391371544},"median":{"confidence_interval":{"confidence_level":0.95,"lower_bound":730756384.7500005,"upper_bound":739225674.0},"point_estimate":735627757.0,"standard_error":2173420.891903651},"median_abs_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":15288042.307552993,"upper_bound":23229508.98763127},"point_estimate":20218288.488453627,"standard_error":2036085.278920975},"slope":null,"std_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":17666416.607231315,"upper_bound":25262466.304574147},"point_estimate":21557361.58875448,"standard_error":1949816.9384860932}} -------------------------------------------------------------------------------- /docs/criterion/day 22 part 2/new/tukey.json: -------------------------------------------------------------------------------- 1 | [641048024.0,681483866.375,789312779.375,829748621.75] -------------------------------------------------------------------------------- /docs/criterion/day 23 part 1/base/benchmark.json: -------------------------------------------------------------------------------- 1 | {"group_id":"day 23 part 1","function_id":null,"value_str":null,"throughput":null,"full_id":"day 23 part 1","directory_name":"day 23 part 1","title":"day 23 part 1"} -------------------------------------------------------------------------------- /docs/criterion/day 23 part 1/base/tukey.json: -------------------------------------------------------------------------------- 1 | [935.4672247288092,985.240529603053,1117.9693426010363,1167.7426474752801] -------------------------------------------------------------------------------- /docs/criterion/day 23 part 1/new/benchmark.json: -------------------------------------------------------------------------------- 1 | {"group_id":"day 23 part 1","function_id":null,"value_str":null,"throughput":null,"full_id":"day 23 part 1","directory_name":"day 23 part 1","title":"day 23 part 1"} -------------------------------------------------------------------------------- /docs/criterion/day 23 part 1/new/tukey.json: -------------------------------------------------------------------------------- 1 | [935.4672247288092,985.240529603053,1117.9693426010363,1167.7426474752801] -------------------------------------------------------------------------------- /docs/criterion/day 23 part 2/base/benchmark.json: -------------------------------------------------------------------------------- 1 | {"group_id":"day 23 part 2","function_id":null,"value_str":null,"throughput":null,"full_id":"day 23 part 2","directory_name":"day 23 part 2","title":"day 23 part 2"} -------------------------------------------------------------------------------- /docs/criterion/day 23 part 2/base/estimates.json: -------------------------------------------------------------------------------- 1 | {"mean":{"confidence_interval":{"confidence_level":0.95,"lower_bound":304208388.5565,"upper_bound":307922845.004},"point_estimate":305999285.48,"standard_error":949983.1929904061},"median":{"confidence_interval":{"confidence_level":0.95,"lower_bound":302799459.5,"upper_bound":308003871.5},"point_estimate":306056376.5,"standard_error":1409576.1040334664},"median_abs_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":6633666.744428873,"upper_bound":9835935.91017723},"point_estimate":8463865.988436341,"standard_error":818785.2947690308},"slope":null,"std_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":7263397.682829849,"upper_bound":11694992.286516242},"point_estimate":9528780.69312336,"standard_error":1136736.6923029958}} -------------------------------------------------------------------------------- /docs/criterion/day 23 part 2/base/tukey.json: -------------------------------------------------------------------------------- 1 | [265347694.5,282499513.5,328237697.5,345389516.5] -------------------------------------------------------------------------------- /docs/criterion/day 23 part 2/new/benchmark.json: -------------------------------------------------------------------------------- 1 | {"group_id":"day 23 part 2","function_id":null,"value_str":null,"throughput":null,"full_id":"day 23 part 2","directory_name":"day 23 part 2","title":"day 23 part 2"} -------------------------------------------------------------------------------- /docs/criterion/day 23 part 2/new/estimates.json: -------------------------------------------------------------------------------- 1 | {"mean":{"confidence_interval":{"confidence_level":0.95,"lower_bound":304208388.5565,"upper_bound":307922845.004},"point_estimate":305999285.48,"standard_error":949983.1929904061},"median":{"confidence_interval":{"confidence_level":0.95,"lower_bound":302799459.5,"upper_bound":308003871.5},"point_estimate":306056376.5,"standard_error":1409576.1040334664},"median_abs_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":6633666.744428873,"upper_bound":9835935.91017723},"point_estimate":8463865.988436341,"standard_error":818785.2947690308},"slope":null,"std_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":7263397.682829849,"upper_bound":11694992.286516242},"point_estimate":9528780.69312336,"standard_error":1136736.6923029958}} -------------------------------------------------------------------------------- /docs/criterion/day 23 part 2/new/tukey.json: -------------------------------------------------------------------------------- 1 | [265347694.5,282499513.5,328237697.5,345389516.5] -------------------------------------------------------------------------------- /docs/criterion/day 24 part 1/base/benchmark.json: -------------------------------------------------------------------------------- 1 | {"group_id":"day 24 part 1","function_id":null,"value_str":null,"throughput":null,"full_id":"day 24 part 1","directory_name":"day 24 part 1","title":"day 24 part 1"} -------------------------------------------------------------------------------- /docs/criterion/day 24 part 1/base/tukey.json: -------------------------------------------------------------------------------- 1 | [130876.89727891161,143329.15850340138,176535.18843537412,188987.4496598639] -------------------------------------------------------------------------------- /docs/criterion/day 24 part 1/new/benchmark.json: -------------------------------------------------------------------------------- 1 | {"group_id":"day 24 part 1","function_id":null,"value_str":null,"throughput":null,"full_id":"day 24 part 1","directory_name":"day 24 part 1","title":"day 24 part 1"} -------------------------------------------------------------------------------- /docs/criterion/day 24 part 1/new/estimates.json: -------------------------------------------------------------------------------- 1 | {"mean":{"confidence_interval":{"confidence_level":0.95,"lower_bound":159815.6578530792,"upper_bound":163483.47610006368},"point_estimate":161541.30967588173,"standard_error":936.405527124275},"median":{"confidence_interval":{"confidence_level":0.95,"lower_bound":157752.38095238095,"upper_bound":160711.65406423033},"point_estimate":159552.55117943283,"standard_error":786.955626961731},"median_abs_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":4125.226516943885,"upper_bound":7127.968806930565},"point_estimate":5811.7186607824015,"standard_error":804.8680801768717},"slope":{"confidence_interval":{"confidence_level":0.95,"lower_bound":159614.03839343195,"upper_bound":163202.53614565858},"point_estimate":161282.19083451203,"standard_error":914.6728334130485},"std_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":6609.178577259949,"upper_bound":11684.045244696259},"point_estimate":9338.057806179846,"standard_error":1296.4040294753875}} -------------------------------------------------------------------------------- /docs/criterion/day 24 part 1/new/tukey.json: -------------------------------------------------------------------------------- 1 | [130876.89727891161,143329.15850340138,176535.18843537412,188987.4496598639] -------------------------------------------------------------------------------- /docs/criterion/day 24 part 2/base/benchmark.json: -------------------------------------------------------------------------------- 1 | {"group_id":"day 24 part 2","function_id":null,"value_str":null,"throughput":null,"full_id":"day 24 part 2","directory_name":"day 24 part 2","title":"day 24 part 2"} -------------------------------------------------------------------------------- /docs/criterion/day 24 part 2/base/estimates.json: -------------------------------------------------------------------------------- 1 | {"mean":{"confidence_interval":{"confidence_level":0.95,"lower_bound":105606095.9935,"upper_bound":107144026.352},"point_estimate":106336305.69,"standard_error":391393.62823900965},"median":{"confidence_interval":{"confidence_level":0.95,"lower_bound":104651422.5,"upper_bound":106349975.0},"point_estimate":105208523.5,"standard_error":467332.99367909285},"median_abs_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":2198992.188297585,"upper_bound":3561724.751001729},"point_estimate":2811008.8087946177,"standard_error":349955.85879919183},"slope":null,"std_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":2868918.5312083177,"upper_bound":5009976.489900371},"point_estimate":3944149.252904647,"standard_error":553583.2885578142}} -------------------------------------------------------------------------------- /docs/criterion/day 24 part 2/base/tukey.json: -------------------------------------------------------------------------------- 1 | [91027043.25,97299382.125,114025619.125,120297958.0] -------------------------------------------------------------------------------- /docs/criterion/day 24 part 2/new/benchmark.json: -------------------------------------------------------------------------------- 1 | {"group_id":"day 24 part 2","function_id":null,"value_str":null,"throughput":null,"full_id":"day 24 part 2","directory_name":"day 24 part 2","title":"day 24 part 2"} -------------------------------------------------------------------------------- /docs/criterion/day 24 part 2/new/estimates.json: -------------------------------------------------------------------------------- 1 | {"mean":{"confidence_interval":{"confidence_level":0.95,"lower_bound":105606095.9935,"upper_bound":107144026.352},"point_estimate":106336305.69,"standard_error":391393.62823900965},"median":{"confidence_interval":{"confidence_level":0.95,"lower_bound":104651422.5,"upper_bound":106349975.0},"point_estimate":105208523.5,"standard_error":467332.99367909285},"median_abs_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":2198992.188297585,"upper_bound":3561724.751001729},"point_estimate":2811008.8087946177,"standard_error":349955.85879919183},"slope":null,"std_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":2868918.5312083177,"upper_bound":5009976.489900371},"point_estimate":3944149.252904647,"standard_error":553583.2885578142}} -------------------------------------------------------------------------------- /docs/criterion/day 24 part 2/new/tukey.json: -------------------------------------------------------------------------------- 1 | [91027043.25,97299382.125,114025619.125,120297958.0] -------------------------------------------------------------------------------- /docs/criterion/day 25 part 1/base/benchmark.json: -------------------------------------------------------------------------------- 1 | {"group_id":"day 25 part 1","function_id":null,"value_str":null,"throughput":null,"full_id":"day 25 part 1","directory_name":"day 25 part 1","title":"day 25 part 1"} -------------------------------------------------------------------------------- /docs/criterion/day 25 part 1/base/estimates.json: -------------------------------------------------------------------------------- 1 | {"mean":{"confidence_interval":{"confidence_level":0.95,"lower_bound":49243061.983125,"upper_bound":49840137.039375},"point_estimate":49532688.54,"standard_error":152787.19243376565},"median":{"confidence_interval":{"confidence_level":0.95,"lower_bound":48959251.25,"upper_bound":49635162.25},"point_estimate":49244239.0,"standard_error":201006.22291719986},"median_abs_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":918220.4949483275,"upper_bound":1665978.687272966},"point_estimate":1108700.1211166382,"standard_error":193124.94014437604},"slope":null,"std_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":1284353.925089201,"upper_bound":1751926.754816253},"point_estimate":1535732.941155539,"standard_error":119563.12314686803}} -------------------------------------------------------------------------------- /docs/criterion/day 25 part 1/base/tukey.json: -------------------------------------------------------------------------------- 1 | [43372852.5,45968627.25,52890693.25,55486468.0] -------------------------------------------------------------------------------- /docs/criterion/day 25 part 1/new/benchmark.json: -------------------------------------------------------------------------------- 1 | {"group_id":"day 25 part 1","function_id":null,"value_str":null,"throughput":null,"full_id":"day 25 part 1","directory_name":"day 25 part 1","title":"day 25 part 1"} -------------------------------------------------------------------------------- /docs/criterion/day 25 part 1/new/estimates.json: -------------------------------------------------------------------------------- 1 | {"mean":{"confidence_interval":{"confidence_level":0.95,"lower_bound":49243061.983125,"upper_bound":49840137.039375},"point_estimate":49532688.54,"standard_error":152787.19243376565},"median":{"confidence_interval":{"confidence_level":0.95,"lower_bound":48959251.25,"upper_bound":49635162.25},"point_estimate":49244239.0,"standard_error":201006.22291719986},"median_abs_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":918220.4949483275,"upper_bound":1665978.687272966},"point_estimate":1108700.1211166382,"standard_error":193124.94014437604},"slope":null,"std_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":1284353.925089201,"upper_bound":1751926.754816253},"point_estimate":1535732.941155539,"standard_error":119563.12314686803}} -------------------------------------------------------------------------------- /docs/criterion/day 25 part 1/new/tukey.json: -------------------------------------------------------------------------------- 1 | [43372852.5,45968627.25,52890693.25,55486468.0] -------------------------------------------------------------------------------- /docs/criterion/day 3 part 1/base/benchmark.json: -------------------------------------------------------------------------------- 1 | {"group_id":"day 3 part 1","function_id":null,"value_str":null,"throughput":null,"full_id":"day 3 part 1","directory_name":"day 3 part 1","title":"day 3 part 1"} -------------------------------------------------------------------------------- /docs/criterion/day 3 part 1/base/estimates.json: -------------------------------------------------------------------------------- 1 | {"mean":{"confidence_interval":{"confidence_level":0.95,"lower_bound":75690.78489290638,"upper_bound":77005.33018326778},"point_estimate":76322.17198126226,"standard_error":335.93736633581426},"median":{"confidence_interval":{"confidence_level":0.95,"lower_bound":75216.78151260504,"upper_bound":76762.592198897},"point_estimate":75808.55632532836,"standard_error":385.36282985520984},"median_abs_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":1899.6993047354863,"upper_bound":3460.240460631353},"point_estimate":2850.0441804584343,"standard_error":393.47742305698023},"slope":{"confidence_interval":{"confidence_level":0.95,"lower_bound":75355.72722676415,"upper_bound":76930.55954836012},"point_estimate":76099.98252971352,"standard_error":404.9594815281008},"std_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":2569.2042785001086,"upper_bound":4108.467323760888},"point_estimate":3353.450249459431,"standard_error":395.3414436399806}} -------------------------------------------------------------------------------- /docs/criterion/day 3 part 1/base/tukey.json: -------------------------------------------------------------------------------- 1 | [63147.44686247299,68671.1547004515,83401.04226839417,88924.75010637267] -------------------------------------------------------------------------------- /docs/criterion/day 3 part 1/new/benchmark.json: -------------------------------------------------------------------------------- 1 | {"group_id":"day 3 part 1","function_id":null,"value_str":null,"throughput":null,"full_id":"day 3 part 1","directory_name":"day 3 part 1","title":"day 3 part 1"} -------------------------------------------------------------------------------- /docs/criterion/day 3 part 1/new/estimates.json: -------------------------------------------------------------------------------- 1 | {"mean":{"confidence_interval":{"confidence_level":0.95,"lower_bound":75690.78489290638,"upper_bound":77005.33018326778},"point_estimate":76322.17198126226,"standard_error":335.93736633581426},"median":{"confidence_interval":{"confidence_level":0.95,"lower_bound":75216.78151260504,"upper_bound":76762.592198897},"point_estimate":75808.55632532836,"standard_error":385.36282985520984},"median_abs_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":1899.6993047354863,"upper_bound":3460.240460631353},"point_estimate":2850.0441804584343,"standard_error":393.47742305698023},"slope":{"confidence_interval":{"confidence_level":0.95,"lower_bound":75355.72722676415,"upper_bound":76930.55954836012},"point_estimate":76099.98252971352,"standard_error":404.9594815281008},"std_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":2569.2042785001086,"upper_bound":4108.467323760888},"point_estimate":3353.450249459431,"standard_error":395.3414436399806}} -------------------------------------------------------------------------------- /docs/criterion/day 3 part 1/new/tukey.json: -------------------------------------------------------------------------------- 1 | [63147.44686247299,68671.1547004515,83401.04226839417,88924.75010637267] -------------------------------------------------------------------------------- /docs/criterion/day 3 part 2/base/benchmark.json: -------------------------------------------------------------------------------- 1 | {"group_id":"day 3 part 2","function_id":null,"value_str":null,"throughput":null,"full_id":"day 3 part 2","directory_name":"day 3 part 2","title":"day 3 part 2"} -------------------------------------------------------------------------------- /docs/criterion/day 3 part 2/base/estimates.json: -------------------------------------------------------------------------------- 1 | {"mean":{"confidence_interval":{"confidence_level":0.95,"lower_bound":97701.33282607284,"upper_bound":99778.36497642196},"point_estimate":98697.28479913004,"standard_error":531.6464061212051},"median":{"confidence_interval":{"confidence_level":0.95,"lower_bound":97290.01506849316,"upper_bound":99104.29595959595},"point_estimate":98170.60266666667,"standard_error":444.9886390996162},"median_abs_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":2388.105251313261,"upper_bound":3781.6972258755372},"point_estimate":2963.445938925828,"standard_error":361.9049339599414},"slope":{"confidence_interval":{"confidence_level":0.95,"lower_bound":97543.21859312597,"upper_bound":99471.23019472521},"point_estimate":98442.17786434166,"standard_error":493.0877141975584},"std_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":3760.720075436238,"upper_bound":6856.047540539419},"point_estimate":5329.404478590225,"standard_error":800.9678204361514}} -------------------------------------------------------------------------------- /docs/criterion/day 3 part 2/base/tukey.json: -------------------------------------------------------------------------------- 1 | [83926.73980769233,90076.61490384617,106476.28182692308,112626.15692307691] -------------------------------------------------------------------------------- /docs/criterion/day 3 part 2/new/benchmark.json: -------------------------------------------------------------------------------- 1 | {"group_id":"day 3 part 2","function_id":null,"value_str":null,"throughput":null,"full_id":"day 3 part 2","directory_name":"day 3 part 2","title":"day 3 part 2"} -------------------------------------------------------------------------------- /docs/criterion/day 3 part 2/new/estimates.json: -------------------------------------------------------------------------------- 1 | {"mean":{"confidence_interval":{"confidence_level":0.95,"lower_bound":97701.33282607284,"upper_bound":99778.36497642196},"point_estimate":98697.28479913004,"standard_error":531.6464061212051},"median":{"confidence_interval":{"confidence_level":0.95,"lower_bound":97290.01506849316,"upper_bound":99104.29595959595},"point_estimate":98170.60266666667,"standard_error":444.9886390996162},"median_abs_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":2388.105251313261,"upper_bound":3781.6972258755372},"point_estimate":2963.445938925828,"standard_error":361.9049339599414},"slope":{"confidence_interval":{"confidence_level":0.95,"lower_bound":97543.21859312597,"upper_bound":99471.23019472521},"point_estimate":98442.17786434166,"standard_error":493.0877141975584},"std_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":3760.720075436238,"upper_bound":6856.047540539419},"point_estimate":5329.404478590225,"standard_error":800.9678204361514}} -------------------------------------------------------------------------------- /docs/criterion/day 3 part 2/new/tukey.json: -------------------------------------------------------------------------------- 1 | [83926.73980769233,90076.61490384617,106476.28182692308,112626.15692307691] -------------------------------------------------------------------------------- /docs/criterion/day 4 part 1/base/benchmark.json: -------------------------------------------------------------------------------- 1 | {"group_id":"day 4 part 1","function_id":null,"value_str":null,"throughput":null,"full_id":"day 4 part 1","directory_name":"day 4 part 1","title":"day 4 part 1"} -------------------------------------------------------------------------------- /docs/criterion/day 4 part 1/base/estimates.json: -------------------------------------------------------------------------------- 1 | {"mean":{"confidence_interval":{"confidence_level":0.95,"lower_bound":562721.5093938436,"upper_bound":572489.0447465903},"point_estimate":567463.2641903716,"standard_error":2487.263994856703},"median":{"confidence_interval":{"confidence_level":0.95,"lower_bound":559582.4197748656,"upper_bound":571982.6232876712},"point_estimate":566047.5245310245,"standard_error":2843.322481384987},"median_abs_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":17379.441144337838,"upper_bound":28354.894350991315},"point_estimate":22748.2080853135,"standard_error":2780.488728751849},"slope":{"confidence_interval":{"confidence_level":0.95,"lower_bound":556050.3447537726,"upper_bound":567946.7161029979},"point_estimate":561722.0585946505,"standard_error":3025.0145883882005},"std_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":20101.14134934833,"upper_bound":29978.45685713673},"point_estimate":24923.638252752247,"standard_error":2555.7768276450133}} -------------------------------------------------------------------------------- /docs/criterion/day 4 part 1/base/tukey.json: -------------------------------------------------------------------------------- 1 | [455751.8222103836,502646.52627373114,627699.0704426579,674593.7745060055] -------------------------------------------------------------------------------- /docs/criterion/day 4 part 1/new/benchmark.json: -------------------------------------------------------------------------------- 1 | {"group_id":"day 4 part 1","function_id":null,"value_str":null,"throughput":null,"full_id":"day 4 part 1","directory_name":"day 4 part 1","title":"day 4 part 1"} -------------------------------------------------------------------------------- /docs/criterion/day 4 part 1/new/estimates.json: -------------------------------------------------------------------------------- 1 | {"mean":{"confidence_interval":{"confidence_level":0.95,"lower_bound":562721.5093938436,"upper_bound":572489.0447465903},"point_estimate":567463.2641903716,"standard_error":2487.263994856703},"median":{"confidence_interval":{"confidence_level":0.95,"lower_bound":559582.4197748656,"upper_bound":571982.6232876712},"point_estimate":566047.5245310245,"standard_error":2843.322481384987},"median_abs_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":17379.441144337838,"upper_bound":28354.894350991315},"point_estimate":22748.2080853135,"standard_error":2780.488728751849},"slope":{"confidence_interval":{"confidence_level":0.95,"lower_bound":556050.3447537726,"upper_bound":567946.7161029979},"point_estimate":561722.0585946505,"standard_error":3025.0145883882005},"std_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":20101.14134934833,"upper_bound":29978.45685713673},"point_estimate":24923.638252752247,"standard_error":2555.7768276450133}} -------------------------------------------------------------------------------- /docs/criterion/day 4 part 1/new/tukey.json: -------------------------------------------------------------------------------- 1 | [455751.8222103836,502646.52627373114,627699.0704426579,674593.7745060055] -------------------------------------------------------------------------------- /docs/criterion/day 4 part 2/base/benchmark.json: -------------------------------------------------------------------------------- 1 | {"group_id":"day 4 part 2","function_id":null,"value_str":null,"throughput":null,"full_id":"day 4 part 2","directory_name":"day 4 part 2","title":"day 4 part 2"} -------------------------------------------------------------------------------- /docs/criterion/day 4 part 2/base/estimates.json: -------------------------------------------------------------------------------- 1 | {"mean":{"confidence_interval":{"confidence_level":0.95,"lower_bound":560677.0064731489,"upper_bound":573862.8897145947},"point_estimate":567105.9303250749,"standard_error":3364.8372678833084},"median":{"confidence_interval":{"confidence_level":0.95,"lower_bound":554793.5056179776,"upper_bound":571476.4225352113},"point_estimate":562104.5965136054,"standard_error":3590.3068015633175},"median_abs_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":21391.729087205807,"upper_bound":33564.99810893553},"point_estimate":28687.970818333757,"standard_error":3044.2364496251967},"slope":{"confidence_interval":{"confidence_level":0.95,"lower_bound":554644.9048150679,"upper_bound":567607.2347594074},"point_estimate":560778.8616373577,"standard_error":3294.368600363872},"std_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":27929.631598165997,"upper_bound":39455.52337131044},"point_estimate":33977.47010935546,"standard_error":2950.6699938452625}} -------------------------------------------------------------------------------- /docs/criterion/day 4 part 2/base/tukey.json: -------------------------------------------------------------------------------- 1 | [434711.16121066455,490661.18864729034,639861.2618116258,695811.2892482516] -------------------------------------------------------------------------------- /docs/criterion/day 4 part 2/new/benchmark.json: -------------------------------------------------------------------------------- 1 | {"group_id":"day 4 part 2","function_id":null,"value_str":null,"throughput":null,"full_id":"day 4 part 2","directory_name":"day 4 part 2","title":"day 4 part 2"} -------------------------------------------------------------------------------- /docs/criterion/day 4 part 2/new/estimates.json: -------------------------------------------------------------------------------- 1 | {"mean":{"confidence_interval":{"confidence_level":0.95,"lower_bound":560677.0064731489,"upper_bound":573862.8897145947},"point_estimate":567105.9303250749,"standard_error":3364.8372678833084},"median":{"confidence_interval":{"confidence_level":0.95,"lower_bound":554793.5056179776,"upper_bound":571476.4225352113},"point_estimate":562104.5965136054,"standard_error":3590.3068015633175},"median_abs_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":21391.729087205807,"upper_bound":33564.99810893553},"point_estimate":28687.970818333757,"standard_error":3044.2364496251967},"slope":{"confidence_interval":{"confidence_level":0.95,"lower_bound":554644.9048150679,"upper_bound":567607.2347594074},"point_estimate":560778.8616373577,"standard_error":3294.368600363872},"std_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":27929.631598165997,"upper_bound":39455.52337131044},"point_estimate":33977.47010935546,"standard_error":2950.6699938452625}} -------------------------------------------------------------------------------- /docs/criterion/day 4 part 2/new/tukey.json: -------------------------------------------------------------------------------- 1 | [434711.16121066455,490661.18864729034,639861.2618116258,695811.2892482516] -------------------------------------------------------------------------------- /docs/criterion/day 5 part 1/base/benchmark.json: -------------------------------------------------------------------------------- 1 | {"group_id":"day 5 part 1","function_id":null,"value_str":null,"throughput":null,"full_id":"day 5 part 1","directory_name":"day 5 part 1","title":"day 5 part 1"} -------------------------------------------------------------------------------- /docs/criterion/day 5 part 1/base/tukey.json: -------------------------------------------------------------------------------- 1 | [54983.71918123544,59211.17514932984,70484.39106424825,74711.84703234264] -------------------------------------------------------------------------------- /docs/criterion/day 5 part 1/new/benchmark.json: -------------------------------------------------------------------------------- 1 | {"group_id":"day 5 part 1","function_id":null,"value_str":null,"throughput":null,"full_id":"day 5 part 1","directory_name":"day 5 part 1","title":"day 5 part 1"} -------------------------------------------------------------------------------- /docs/criterion/day 5 part 1/new/tukey.json: -------------------------------------------------------------------------------- 1 | [54983.71918123544,59211.17514932984,70484.39106424825,74711.84703234264] -------------------------------------------------------------------------------- /docs/criterion/day 5 part 2/base/benchmark.json: -------------------------------------------------------------------------------- 1 | {"group_id":"day 5 part 2","function_id":null,"value_str":null,"throughput":null,"full_id":"day 5 part 2","directory_name":"day 5 part 2","title":"day 5 part 2"} -------------------------------------------------------------------------------- /docs/criterion/day 5 part 2/base/estimates.json: -------------------------------------------------------------------------------- 1 | {"mean":{"confidence_interval":{"confidence_level":0.95,"lower_bound":77903.25542760006,"upper_bound":79703.79289709462},"point_estimate":78803.42394893452,"standard_error":459.78089196304245},"median":{"confidence_interval":{"confidence_level":0.95,"lower_bound":77879.30157342658,"upper_bound":79945.58744486072},"point_estimate":78796.01032239819,"standard_error":459.5569369975277},"median_abs_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":3234.5160262267364,"upper_bound":5651.3647303260905},"point_estimate":3956.6245496972165,"standard_error":654.8881693261044},"slope":{"confidence_interval":{"confidence_level":0.95,"lower_bound":79722.1165998102,"upper_bound":81479.55235854571},"point_estimate":80595.12433438293,"standard_error":448.58035847629213},"std_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":3937.991045324841,"upper_bound":5241.965513409656},"point_estimate":4624.801039662113,"standard_error":333.99867520893326}} -------------------------------------------------------------------------------- /docs/criterion/day 5 part 2/base/tukey.json: -------------------------------------------------------------------------------- 1 | [59558.40624844906,67871.22367229249,90038.73680254165,98351.5542263851] -------------------------------------------------------------------------------- /docs/criterion/day 5 part 2/new/benchmark.json: -------------------------------------------------------------------------------- 1 | {"group_id":"day 5 part 2","function_id":null,"value_str":null,"throughput":null,"full_id":"day 5 part 2","directory_name":"day 5 part 2","title":"day 5 part 2"} -------------------------------------------------------------------------------- /docs/criterion/day 5 part 2/new/estimates.json: -------------------------------------------------------------------------------- 1 | {"mean":{"confidence_interval":{"confidence_level":0.95,"lower_bound":77903.25542760006,"upper_bound":79703.79289709462},"point_estimate":78803.42394893452,"standard_error":459.78089196304245},"median":{"confidence_interval":{"confidence_level":0.95,"lower_bound":77879.30157342658,"upper_bound":79945.58744486072},"point_estimate":78796.01032239819,"standard_error":459.5569369975277},"median_abs_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":3234.5160262267364,"upper_bound":5651.3647303260905},"point_estimate":3956.6245496972165,"standard_error":654.8881693261044},"slope":{"confidence_interval":{"confidence_level":0.95,"lower_bound":79722.1165998102,"upper_bound":81479.55235854571},"point_estimate":80595.12433438293,"standard_error":448.58035847629213},"std_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":3937.991045324841,"upper_bound":5241.965513409656},"point_estimate":4624.801039662113,"standard_error":333.99867520893326}} -------------------------------------------------------------------------------- /docs/criterion/day 5 part 2/new/tukey.json: -------------------------------------------------------------------------------- 1 | [59558.40624844906,67871.22367229249,90038.73680254165,98351.5542263851] -------------------------------------------------------------------------------- /docs/criterion/day 6 part 1/base/benchmark.json: -------------------------------------------------------------------------------- 1 | {"group_id":"day 6 part 1","function_id":null,"value_str":null,"throughput":null,"full_id":"day 6 part 1","directory_name":"day 6 part 1","title":"day 6 part 1"} -------------------------------------------------------------------------------- /docs/criterion/day 6 part 1/base/estimates.json: -------------------------------------------------------------------------------- 1 | {"mean":{"confidence_interval":{"confidence_level":0.95,"lower_bound":13585.163091845157,"upper_bound":13871.319075487314},"point_estimate":13726.559095298131,"standard_error":73.12742883978508},"median":{"confidence_interval":{"confidence_level":0.95,"lower_bound":13584.2601010101,"upper_bound":13881.633790436006},"point_estimate":13743.31675635538,"standard_error":78.94896091769623},"median_abs_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":473.993828226206,"upper_bound":761.3936705023444},"point_estimate":662.8373350153734,"standard_error":74.4507931805954},"slope":{"confidence_interval":{"confidence_level":0.95,"lower_bound":13704.484108613258,"upper_bound":13972.185032622114},"point_estimate":13841.009874020985,"standard_error":68.23108795800982},"std_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":598.0967369914657,"upper_bound":861.4506505305444},"point_estimate":735.5398576075914,"standard_error":67.34963033967682}} -------------------------------------------------------------------------------- /docs/criterion/day 6 part 1/base/tukey.json: -------------------------------------------------------------------------------- 1 | [10658.71380119914,11953.570525808424,15406.521791433184,16701.37851604247] -------------------------------------------------------------------------------- /docs/criterion/day 6 part 1/new/benchmark.json: -------------------------------------------------------------------------------- 1 | {"group_id":"day 6 part 1","function_id":null,"value_str":null,"throughput":null,"full_id":"day 6 part 1","directory_name":"day 6 part 1","title":"day 6 part 1"} -------------------------------------------------------------------------------- /docs/criterion/day 6 part 1/new/estimates.json: -------------------------------------------------------------------------------- 1 | {"mean":{"confidence_interval":{"confidence_level":0.95,"lower_bound":13585.163091845157,"upper_bound":13871.319075487314},"point_estimate":13726.559095298131,"standard_error":73.12742883978508},"median":{"confidence_interval":{"confidence_level":0.95,"lower_bound":13584.2601010101,"upper_bound":13881.633790436006},"point_estimate":13743.31675635538,"standard_error":78.94896091769623},"median_abs_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":473.993828226206,"upper_bound":761.3936705023444},"point_estimate":662.8373350153734,"standard_error":74.4507931805954},"slope":{"confidence_interval":{"confidence_level":0.95,"lower_bound":13704.484108613258,"upper_bound":13972.185032622114},"point_estimate":13841.009874020985,"standard_error":68.23108795800982},"std_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":598.0967369914657,"upper_bound":861.4506505305444},"point_estimate":735.5398576075914,"standard_error":67.34963033967682}} -------------------------------------------------------------------------------- /docs/criterion/day 6 part 1/new/tukey.json: -------------------------------------------------------------------------------- 1 | [10658.71380119914,11953.570525808424,15406.521791433184,16701.37851604247] -------------------------------------------------------------------------------- /docs/criterion/day 6 part 2/base/benchmark.json: -------------------------------------------------------------------------------- 1 | {"group_id":"day 6 part 2","function_id":null,"value_str":null,"throughput":null,"full_id":"day 6 part 2","directory_name":"day 6 part 2","title":"day 6 part 2"} -------------------------------------------------------------------------------- /docs/criterion/day 6 part 2/base/estimates.json: -------------------------------------------------------------------------------- 1 | {"mean":{"confidence_interval":{"confidence_level":0.95,"lower_bound":13016.644493878084,"upper_bound":13315.046874314181},"point_estimate":13162.06184809957,"standard_error":76.07948579429382},"median":{"confidence_interval":{"confidence_level":0.95,"lower_bound":12954.133477633477,"upper_bound":13220.348091302636},"point_estimate":13071.889231164165,"standard_error":70.77476667939588},"median_abs_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":443.3594355765612,"upper_bound":807.2428957614515},"point_estimate":672.5055405100754,"standard_error":91.7866763601062},"slope":{"confidence_interval":{"confidence_level":0.95,"lower_bound":12930.377922456155,"upper_bound":13318.105105849056},"point_estimate":13112.154686167976,"standard_error":99.10643201463348},"std_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":595.6046466576762,"upper_bound":933.7570490418542},"point_estimate":766.0801818787111,"standard_error":86.64094693321736}} -------------------------------------------------------------------------------- /docs/criterion/day 6 part 2/base/tukey.json: -------------------------------------------------------------------------------- 1 | [10134.164062415235,11419.306355928036,14846.352471962173,16131.494765474974] -------------------------------------------------------------------------------- /docs/criterion/day 6 part 2/new/benchmark.json: -------------------------------------------------------------------------------- 1 | {"group_id":"day 6 part 2","function_id":null,"value_str":null,"throughput":null,"full_id":"day 6 part 2","directory_name":"day 6 part 2","title":"day 6 part 2"} -------------------------------------------------------------------------------- /docs/criterion/day 6 part 2/new/tukey.json: -------------------------------------------------------------------------------- 1 | [10134.164062415235,11419.306355928036,14846.352471962173,16131.494765474974] -------------------------------------------------------------------------------- /docs/criterion/day 7 part 1/base/benchmark.json: -------------------------------------------------------------------------------- 1 | {"group_id":"day 7 part 1","function_id":null,"value_str":null,"throughput":null,"full_id":"day 7 part 1","directory_name":"day 7 part 1","title":"day 7 part 1"} -------------------------------------------------------------------------------- /docs/criterion/day 7 part 1/base/estimates.json: -------------------------------------------------------------------------------- 1 | {"mean":{"confidence_interval":{"confidence_level":0.95,"lower_bound":3080608.357955882,"upper_bound":3138892.324970589},"point_estimate":3108971.5017647077,"standard_error":14856.866553264103},"median":{"confidence_interval":{"confidence_level":0.95,"lower_bound":3062384.6470588236,"upper_bound":3128089.3529411764},"point_estimate":3090298.3529411764,"standard_error":20389.98881876124},"median_abs_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":91490.11062278494,"upper_bound":169000.7860937536},"point_estimate":134209.74626435945,"standard_error":19068.08321538275},"slope":null,"std_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":118859.23378985506,"upper_bound":177940.02669887213},"point_estimate":148961.03978169753,"standard_error":15263.338256703}} -------------------------------------------------------------------------------- /docs/criterion/day 7 part 1/base/tukey.json: -------------------------------------------------------------------------------- 1 | [2468965.0588235296,2740477.411764706,3464510.3529411764,3736022.705882353] -------------------------------------------------------------------------------- /docs/criterion/day 7 part 1/new/benchmark.json: -------------------------------------------------------------------------------- 1 | {"group_id":"day 7 part 1","function_id":null,"value_str":null,"throughput":null,"full_id":"day 7 part 1","directory_name":"day 7 part 1","title":"day 7 part 1"} -------------------------------------------------------------------------------- /docs/criterion/day 7 part 1/new/estimates.json: -------------------------------------------------------------------------------- 1 | {"mean":{"confidence_interval":{"confidence_level":0.95,"lower_bound":3080608.357955882,"upper_bound":3138892.324970589},"point_estimate":3108971.5017647077,"standard_error":14856.866553264103},"median":{"confidence_interval":{"confidence_level":0.95,"lower_bound":3062384.6470588236,"upper_bound":3128089.3529411764},"point_estimate":3090298.3529411764,"standard_error":20389.98881876124},"median_abs_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":91490.11062278494,"upper_bound":169000.7860937536},"point_estimate":134209.74626435945,"standard_error":19068.08321538275},"slope":null,"std_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":118859.23378985506,"upper_bound":177940.02669887213},"point_estimate":148961.03978169753,"standard_error":15263.338256703}} -------------------------------------------------------------------------------- /docs/criterion/day 7 part 1/new/tukey.json: -------------------------------------------------------------------------------- 1 | [2468965.0588235296,2740477.411764706,3464510.3529411764,3736022.705882353] -------------------------------------------------------------------------------- /docs/criterion/day 7 part 2/base/benchmark.json: -------------------------------------------------------------------------------- 1 | {"group_id":"day 7 part 2","function_id":null,"value_str":null,"throughput":null,"full_id":"day 7 part 2","directory_name":"day 7 part 2","title":"day 7 part 2"} -------------------------------------------------------------------------------- /docs/criterion/day 7 part 2/base/estimates.json: -------------------------------------------------------------------------------- 1 | {"mean":{"confidence_interval":{"confidence_level":0.95,"lower_bound":2655008.806539473,"upper_bound":2718560.418736841},"point_estimate":2686053.85631579,"standard_error":16144.122686797027},"median":{"confidence_interval":{"confidence_level":0.95,"lower_bound":2616413.3947368423,"upper_bound":2692502.552631579},"point_estimate":2649591.5263157897,"standard_error":20591.27414383833},"median_abs_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":100664.20746022167,"upper_bound":168165.18953552365},"point_estimate":128764.1978718734,"standard_error":16965.45739508},"slope":null,"std_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":133640.04688194243,"upper_bound":188740.73396605498},"point_estimate":163366.63149592374,"standard_error":14052.211223795046}} -------------------------------------------------------------------------------- /docs/criterion/day 7 part 2/base/tukey.json: -------------------------------------------------------------------------------- 1 | [2048623.5657894756,2310749.4934210535,3009751.967105262,3271877.8947368404] -------------------------------------------------------------------------------- /docs/criterion/day 7 part 2/new/benchmark.json: -------------------------------------------------------------------------------- 1 | {"group_id":"day 7 part 2","function_id":null,"value_str":null,"throughput":null,"full_id":"day 7 part 2","directory_name":"day 7 part 2","title":"day 7 part 2"} -------------------------------------------------------------------------------- /docs/criterion/day 7 part 2/new/estimates.json: -------------------------------------------------------------------------------- 1 | {"mean":{"confidence_interval":{"confidence_level":0.95,"lower_bound":2655008.806539473,"upper_bound":2718560.418736841},"point_estimate":2686053.85631579,"standard_error":16144.122686797027},"median":{"confidence_interval":{"confidence_level":0.95,"lower_bound":2616413.3947368423,"upper_bound":2692502.552631579},"point_estimate":2649591.5263157897,"standard_error":20591.27414383833},"median_abs_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":100664.20746022167,"upper_bound":168165.18953552365},"point_estimate":128764.1978718734,"standard_error":16965.45739508},"slope":null,"std_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":133640.04688194243,"upper_bound":188740.73396605498},"point_estimate":163366.63149592374,"standard_error":14052.211223795046}} -------------------------------------------------------------------------------- /docs/criterion/day 7 part 2/new/tukey.json: -------------------------------------------------------------------------------- 1 | [2048623.5657894756,2310749.4934210535,3009751.967105262,3271877.8947368404] -------------------------------------------------------------------------------- /docs/criterion/day 8 part 1/base/benchmark.json: -------------------------------------------------------------------------------- 1 | {"group_id":"day 8 part 1","function_id":null,"value_str":null,"throughput":null,"full_id":"day 8 part 1","directory_name":"day 8 part 1","title":"day 8 part 1"} -------------------------------------------------------------------------------- /docs/criterion/day 8 part 1/base/tukey.json: -------------------------------------------------------------------------------- 1 | [24173.89554712573,26830.90397196328,33916.25977153007,36573.268196367615] -------------------------------------------------------------------------------- /docs/criterion/day 8 part 1/new/benchmark.json: -------------------------------------------------------------------------------- 1 | {"group_id":"day 8 part 1","function_id":null,"value_str":null,"throughput":null,"full_id":"day 8 part 1","directory_name":"day 8 part 1","title":"day 8 part 1"} -------------------------------------------------------------------------------- /docs/criterion/day 8 part 1/new/tukey.json: -------------------------------------------------------------------------------- 1 | [24173.89554712573,26830.90397196328,33916.25977153007,36573.268196367615] -------------------------------------------------------------------------------- /docs/criterion/day 8 part 2/base/benchmark.json: -------------------------------------------------------------------------------- 1 | {"group_id":"day 8 part 2","function_id":null,"value_str":null,"throughput":null,"full_id":"day 8 part 2","directory_name":"day 8 part 2","title":"day 8 part 2"} -------------------------------------------------------------------------------- /docs/criterion/day 8 part 2/base/estimates.json: -------------------------------------------------------------------------------- 1 | {"mean":{"confidence_interval":{"confidence_level":0.95,"lower_bound":68195.12576897198,"upper_bound":69867.18278070496},"point_estimate":69030.02260760096,"standard_error":427.4969639920653},"median":{"confidence_interval":{"confidence_level":0.95,"lower_bound":67495.21851851852,"upper_bound":69642.40689655172},"point_estimate":69183.6403250189,"standard_error":552.6151181244436},"median_abs_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":3065.278784769607,"upper_bound":4911.340275205402},"point_estimate":4140.870712173382,"standard_error":462.359556006681},"slope":{"confidence_interval":{"confidence_level":0.95,"lower_bound":68012.07291186508,"upper_bound":69572.71501734122},"point_estimate":68788.5977900596,"standard_error":399.3475869818703},"std_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":3560.2460499080958,"upper_bound":4903.703203433695},"point_estimate":4260.525275960128,"standard_error":343.95458256968254}} -------------------------------------------------------------------------------- /docs/criterion/day 8 part 2/base/tukey.json: -------------------------------------------------------------------------------- 1 | [49705.97024243866,58012.85944535534,80164.56398646647,88471.45318938314] -------------------------------------------------------------------------------- /docs/criterion/day 8 part 2/new/benchmark.json: -------------------------------------------------------------------------------- 1 | {"group_id":"day 8 part 2","function_id":null,"value_str":null,"throughput":null,"full_id":"day 8 part 2","directory_name":"day 8 part 2","title":"day 8 part 2"} -------------------------------------------------------------------------------- /docs/criterion/day 8 part 2/new/estimates.json: -------------------------------------------------------------------------------- 1 | {"mean":{"confidence_interval":{"confidence_level":0.95,"lower_bound":68195.12576897198,"upper_bound":69867.18278070496},"point_estimate":69030.02260760096,"standard_error":427.4969639920653},"median":{"confidence_interval":{"confidence_level":0.95,"lower_bound":67495.21851851852,"upper_bound":69642.40689655172},"point_estimate":69183.6403250189,"standard_error":552.6151181244436},"median_abs_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":3065.278784769607,"upper_bound":4911.340275205402},"point_estimate":4140.870712173382,"standard_error":462.359556006681},"slope":{"confidence_interval":{"confidence_level":0.95,"lower_bound":68012.07291186508,"upper_bound":69572.71501734122},"point_estimate":68788.5977900596,"standard_error":399.3475869818703},"std_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":3560.2460499080958,"upper_bound":4903.703203433695},"point_estimate":4260.525275960128,"standard_error":343.95458256968254}} -------------------------------------------------------------------------------- /docs/criterion/day 8 part 2/new/tukey.json: -------------------------------------------------------------------------------- 1 | [49705.97024243866,58012.85944535534,80164.56398646647,88471.45318938314] -------------------------------------------------------------------------------- /docs/criterion/day 9 part 1/base/benchmark.json: -------------------------------------------------------------------------------- 1 | {"group_id":"day 9 part 1","function_id":null,"value_str":null,"throughput":null,"full_id":"day 9 part 1","directory_name":"day 9 part 1","title":"day 9 part 1"} -------------------------------------------------------------------------------- /docs/criterion/day 9 part 1/base/estimates.json: -------------------------------------------------------------------------------- 1 | {"mean":{"confidence_interval":{"confidence_level":0.95,"lower_bound":63151.602205589,"upper_bound":64350.94670255297},"point_estimate":63736.242028573564,"standard_error":304.92235483664535},"median":{"confidence_interval":{"confidence_level":0.95,"lower_bound":62967.60327302632,"upper_bound":63897.80994897959},"point_estimate":63391.12657164252,"standard_error":239.4940211512705},"median_abs_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":1251.2240711126024,"upper_bound":2458.321018770967},"point_estimate":1655.350536531714,"standard_error":305.7028597910585},"slope":{"confidence_interval":{"confidence_level":0.95,"lower_bound":63065.86060626608,"upper_bound":64151.76405745},"point_estimate":63593.07412350377,"standard_error":277.0176472737386},"std_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":2258.0767273232314,"upper_bound":3851.7159572948617},"point_estimate":3064.0764275539036,"standard_error":411.3380049861895}} -------------------------------------------------------------------------------- /docs/criterion/day 9 part 1/base/tukey.json: -------------------------------------------------------------------------------- 1 | [55482.12931610769,58924.8647793438,68105.49268130676,71548.22814454287] -------------------------------------------------------------------------------- /docs/criterion/day 9 part 1/new/benchmark.json: -------------------------------------------------------------------------------- 1 | {"group_id":"day 9 part 1","function_id":null,"value_str":null,"throughput":null,"full_id":"day 9 part 1","directory_name":"day 9 part 1","title":"day 9 part 1"} -------------------------------------------------------------------------------- /docs/criterion/day 9 part 1/new/estimates.json: -------------------------------------------------------------------------------- 1 | {"mean":{"confidence_interval":{"confidence_level":0.95,"lower_bound":63151.602205589,"upper_bound":64350.94670255297},"point_estimate":63736.242028573564,"standard_error":304.92235483664535},"median":{"confidence_interval":{"confidence_level":0.95,"lower_bound":62967.60327302632,"upper_bound":63897.80994897959},"point_estimate":63391.12657164252,"standard_error":239.4940211512705},"median_abs_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":1251.2240711126024,"upper_bound":2458.321018770967},"point_estimate":1655.350536531714,"standard_error":305.7028597910585},"slope":{"confidence_interval":{"confidence_level":0.95,"lower_bound":63065.86060626608,"upper_bound":64151.76405745},"point_estimate":63593.07412350377,"standard_error":277.0176472737386},"std_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":2258.0767273232314,"upper_bound":3851.7159572948617},"point_estimate":3064.0764275539036,"standard_error":411.3380049861895}} -------------------------------------------------------------------------------- /docs/criterion/day 9 part 1/new/tukey.json: -------------------------------------------------------------------------------- 1 | [55482.12931610769,58924.8647793438,68105.49268130676,71548.22814454287] -------------------------------------------------------------------------------- /docs/criterion/day 9 part 2/base/benchmark.json: -------------------------------------------------------------------------------- 1 | {"group_id":"day 9 part 2","function_id":null,"value_str":null,"throughput":null,"full_id":"day 9 part 2","directory_name":"day 9 part 2","title":"day 9 part 2"} -------------------------------------------------------------------------------- /docs/criterion/day 9 part 2/base/estimates.json: -------------------------------------------------------------------------------- 1 | {"mean":{"confidence_interval":{"confidence_level":0.95,"lower_bound":60655.58117274942,"upper_bound":61979.88407163363},"point_estimate":61310.776718607725,"standard_error":338.55031563833313},"median":{"confidence_interval":{"confidence_level":0.95,"lower_bound":60719.5,"upper_bound":61781.347494553374},"point_estimate":61255.017578659375,"standard_error":272.2268141173545},"median_abs_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":1984.3713647028098,"upper_bound":3817.1148524478726},"point_estimate":2833.144051473937,"standard_error":457.48662712333794},"slope":{"confidence_interval":{"confidence_level":0.95,"lower_bound":60626.338886354366,"upper_bound":61972.82374542349},"point_estimate":61286.5124976747,"standard_error":343.2489451528036},"std_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":2832.720689174019,"upper_bound":3901.319686964252},"point_estimate":3393.087538254766,"standard_error":271.8944954560074}} -------------------------------------------------------------------------------- /docs/criterion/day 9 part 2/base/tukey.json: -------------------------------------------------------------------------------- 1 | [48569.127098383215,54056.370061489506,68689.0179631063,74176.26092621259] -------------------------------------------------------------------------------- /docs/criterion/day 9 part 2/new/benchmark.json: -------------------------------------------------------------------------------- 1 | {"group_id":"day 9 part 2","function_id":null,"value_str":null,"throughput":null,"full_id":"day 9 part 2","directory_name":"day 9 part 2","title":"day 9 part 2"} -------------------------------------------------------------------------------- /docs/criterion/day 9 part 2/new/estimates.json: -------------------------------------------------------------------------------- 1 | {"mean":{"confidence_interval":{"confidence_level":0.95,"lower_bound":60655.58117274942,"upper_bound":61979.88407163363},"point_estimate":61310.776718607725,"standard_error":338.55031563833313},"median":{"confidence_interval":{"confidence_level":0.95,"lower_bound":60719.5,"upper_bound":61781.347494553374},"point_estimate":61255.017578659375,"standard_error":272.2268141173545},"median_abs_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":1984.3713647028098,"upper_bound":3817.1148524478726},"point_estimate":2833.144051473937,"standard_error":457.48662712333794},"slope":{"confidence_interval":{"confidence_level":0.95,"lower_bound":60626.338886354366,"upper_bound":61972.82374542349},"point_estimate":61286.5124976747,"standard_error":343.2489451528036},"std_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":2832.720689174019,"upper_bound":3901.319686964252},"point_estimate":3393.087538254766,"standard_error":271.8944954560074}} -------------------------------------------------------------------------------- /docs/criterion/day 9 part 2/new/tukey.json: -------------------------------------------------------------------------------- 1 | [48569.127098383215,54056.370061489506,68689.0179631063,74176.26092621259] -------------------------------------------------------------------------------- /docs/hyperfine.md: -------------------------------------------------------------------------------- 1 | | Command | Mean [s] | Min [s] | Max [s] | Relative | 2 | |:---|---:|---:|---:|---:| 3 | | `Haskell` | 3.672 ± 0.040 | 3.616 | 3.747 | 1.39 ± 0.24 | 4 | | `Kotlin` | 4.987 ± 0.186 | 4.695 | 5.336 | 1.88 ± 0.33 | 5 | | `Python` | 47.136 ± 0.258 | 46.773 | 47.595 | 17.78 ± 3.05 | 6 | | `Rust` | 2.650 ± 0.455 | 2.079 | 3.286 | 1.00 | 7 | -------------------------------------------------------------------------------- /docs/index.md: -------------------------------------------------------------------------------- 1 | # [Advent of Code 2020](https://adventofcode.com/2020) 2 | ### my answers 3 | 4 | [Haskell Criterion benchmarks](aoc2020-bench.html) 5 | 6 | [Kotlin JMH benchmarks](results.txt) 7 | 8 | [Python pytest benchmarks](benchmark.svg) 9 | 10 | [Rust Criterion benchmarks](criterion/report/index.html) 11 | 12 | ## Total running time (via [Hyperfine](https://github.com/sharkdp/hyperfine)) 13 | 14 | {% include_relative hyperfine.md %} 15 | -------------------------------------------------------------------------------- /hs/.gitignore: -------------------------------------------------------------------------------- 1 | .stack-work/ 2 | aoc2020.cabal 3 | *~ -------------------------------------------------------------------------------- /hs/ChangeLog.md: -------------------------------------------------------------------------------- 1 | # Changelog for aoc2020 2 | 3 | ## Unreleased changes 4 | -------------------------------------------------------------------------------- /hs/README.md: -------------------------------------------------------------------------------- 1 | app/Main.lhs -------------------------------------------------------------------------------- /hs/Setup.hs: -------------------------------------------------------------------------------- 1 | import Distribution.Simple 2 | main = defaultMain 3 | -------------------------------------------------------------------------------- /hs/app/cbits/main.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include "HsFFI.h" 5 | #include "Rts.h" 6 | 7 | extern StgClosure ZCMain_main_closure; 8 | 9 | static void envRtsMsgFunction(const char *s, va_list ap) { 10 | const char *trace = getenv("TRACE"); 11 | if (trace == NULL || trace[0] != '0') { 12 | rtsDebugMsgFn(s, ap); 13 | } 14 | } 15 | 16 | int main(int argc, char *argv[]) { 17 | RtsConfig rtsConfig = defaultRtsConfig; 18 | rtsConfig.rts_opts = "-N -qg"; 19 | rtsConfig.rts_hs_main = true; 20 | debugMsgFn = envRtsMsgFunction; 21 | return hs_main(argc, argv, &ZCMain_main_closure, rtsConfig); 22 | } 23 | -------------------------------------------------------------------------------- /hs/bench/cbits/main.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include "HsFFI.h" 5 | #include "Rts.h" 6 | 7 | extern StgClosure ZCMain_main_closure; 8 | 9 | static void envRtsMsgFunction(const char *s, va_list ap) { 10 | const char *trace = getenv("TRACE"); 11 | if (trace == NULL || trace[0] != '0') { 12 | rtsDebugMsgFn(s, ap); 13 | } 14 | } 15 | 16 | int main(int argc, char *argv[]) { 17 | RtsConfig rtsConfig = defaultRtsConfig; 18 | rtsConfig.rts_opts = "-N -qg"; 19 | rtsConfig.rts_hs_main = true; 20 | debugMsgFn = envRtsMsgFunction; 21 | return hs_main(argc, argv, &ZCMain_main_closure, rtsConfig); 22 | } 23 | -------------------------------------------------------------------------------- /hs/day1.txt: -------------------------------------------------------------------------------- 1 | ../day1.txt -------------------------------------------------------------------------------- /hs/day10.txt: -------------------------------------------------------------------------------- 1 | ../day10.txt -------------------------------------------------------------------------------- /hs/day11.txt: -------------------------------------------------------------------------------- 1 | ../day11.txt -------------------------------------------------------------------------------- /hs/day12.txt: -------------------------------------------------------------------------------- 1 | ../day12.txt -------------------------------------------------------------------------------- /hs/day13.txt: -------------------------------------------------------------------------------- 1 | ../day13.txt -------------------------------------------------------------------------------- /hs/day14.txt: -------------------------------------------------------------------------------- 1 | ../day14.txt -------------------------------------------------------------------------------- /hs/day15.txt: -------------------------------------------------------------------------------- 1 | ../day15.txt -------------------------------------------------------------------------------- /hs/day16.txt: -------------------------------------------------------------------------------- 1 | ../day16.txt -------------------------------------------------------------------------------- /hs/day17.txt: -------------------------------------------------------------------------------- 1 | ../day17.txt -------------------------------------------------------------------------------- /hs/day18.txt: -------------------------------------------------------------------------------- 1 | ../day18.txt -------------------------------------------------------------------------------- /hs/day19.txt: -------------------------------------------------------------------------------- 1 | ../day19.txt -------------------------------------------------------------------------------- /hs/day2.txt: -------------------------------------------------------------------------------- 1 | ../day2.txt -------------------------------------------------------------------------------- /hs/day20.txt: -------------------------------------------------------------------------------- 1 | ../day20.txt -------------------------------------------------------------------------------- /hs/day21.txt: -------------------------------------------------------------------------------- 1 | ../day21.txt -------------------------------------------------------------------------------- /hs/day22.txt: -------------------------------------------------------------------------------- 1 | ../day22.txt -------------------------------------------------------------------------------- /hs/day23.txt: -------------------------------------------------------------------------------- 1 | ../day23.txt -------------------------------------------------------------------------------- /hs/day24.txt: -------------------------------------------------------------------------------- 1 | ../day24.txt -------------------------------------------------------------------------------- /hs/day25.txt: -------------------------------------------------------------------------------- 1 | ../day25.txt -------------------------------------------------------------------------------- /hs/day3.txt: -------------------------------------------------------------------------------- 1 | ../day3.txt -------------------------------------------------------------------------------- /hs/day4.txt: -------------------------------------------------------------------------------- 1 | ../day4.txt -------------------------------------------------------------------------------- /hs/day5.txt: -------------------------------------------------------------------------------- 1 | ../day5.txt -------------------------------------------------------------------------------- /hs/day6.txt: -------------------------------------------------------------------------------- 1 | ../day6.txt -------------------------------------------------------------------------------- /hs/day7.txt: -------------------------------------------------------------------------------- 1 | ../day7.txt -------------------------------------------------------------------------------- /hs/day8.txt: -------------------------------------------------------------------------------- 1 | ../day8.txt -------------------------------------------------------------------------------- /hs/day9.txt: -------------------------------------------------------------------------------- 1 | ../day9.txt -------------------------------------------------------------------------------- /hs/src/Day25.hs: -------------------------------------------------------------------------------- 1 | {-| 2 | Module: Day25 3 | Description: 4 | -} 5 | module Day25 (day25) where 6 | 7 | import Common (readEntire) 8 | import Data.Either (rights) 9 | import Data.List (elemIndex) 10 | import Data.Text (Text) 11 | import qualified Data.Text as T (words) 12 | import qualified Data.Text.Read as T (decimal) 13 | 14 | day25 :: Text -> Maybe Int 15 | day25 input = do 16 | [pub1, pub2] <- pure . rights $ readEntire T.decimal <$> T.words input 17 | e <- elemIndex pub2 $ iterate ((`mod` 20201227) . (7 *)) 1 18 | pure $ pub1 `powMod` e 19 | 20 | powMod :: (Integral b, Integral e) => b -> e -> b 21 | powMod _ 0 = 1 22 | powMod b e = powMod' 1 b e where 23 | powMod' k _ 0 = k 24 | powMod' k b' e' = powMod' k' b'' e'' where 25 | (e'', r) = e' `divMod` 2 26 | k' = if r == 0 then k else k * b' `mod` 20201227 27 | b'' = b' * b' `mod` 20201227 28 | -------------------------------------------------------------------------------- /hs/src/Day5.hs: -------------------------------------------------------------------------------- 1 | {-| 2 | Module: Day5 3 | Description: 4 | -} 5 | module Day5 (day5a, day5b) where 6 | 7 | import Control.Monad ((>=>)) 8 | import Data.Bits ((.&.), (.|.), complement, shiftL, shiftR) 9 | import Data.Char (ord) 10 | import Data.List (find, sort) 11 | import Data.List.NonEmpty (NonEmpty((:|)), nonEmpty) 12 | import Data.Text (Text) 13 | import qualified Data.Text as T (foldl', lines) 14 | 15 | parse :: Text -> Int 16 | parse = flip shiftR 2 . T.foldl' f 0 where 17 | f acc c = acc `shiftL` 1 .|. complement (ord c) .&. 4 18 | 19 | day5a :: Text -> Maybe Int 20 | day5a = nonEmpty . map parse . T.lines >=> pure . maximum 21 | 22 | day5b :: Text -> Maybe Int 23 | day5b input = do 24 | let nums = sort $ parse <$> T.lines input 25 | _:|nums' <- nonEmpty nums 26 | succ . fst <$> find (\(l, r) -> l + 1 < r) (zip nums nums') 27 | -------------------------------------------------------------------------------- /hs/src/Day6.hs: -------------------------------------------------------------------------------- 1 | {-| 2 | Module: Day6 3 | Description: 4 | -} 5 | module Day6 (day6a, day6b) where 6 | 7 | import Data.Bits ((.&.), (.|.), popCount, shiftL) 8 | import Data.Char (ord) 9 | import Data.List (foldl') 10 | import Data.Text (Text) 11 | import qualified Data.Text as T (foldl', lines) 12 | 13 | day6 :: Int -> (Int -> Int -> Int) -> Text -> Int 14 | day6 initial merge = uncurry add . foldl' f (0, initial) . T.lines where 15 | add acc k = acc + popCount k 16 | f (acc, k) line = case T.foldl' g 0 line of 17 | 0 -> (add acc k, initial) 18 | row -> (acc, merge k row) 19 | g a c = a .|. 1 `shiftL` (ord c .&. 31) 20 | 21 | day6a :: Text -> Int 22 | day6a = day6 0 (.|.) 23 | 24 | day6b :: Text -> Int 25 | day6b = day6 (-1) (.&.) 26 | -------------------------------------------------------------------------------- /hs/stack.yaml.lock: -------------------------------------------------------------------------------- 1 | # This file was autogenerated by Stack. 2 | # You should not edit this file by hand. 3 | # For more information, please see the documentation at: 4 | # https://docs.haskellstack.org/en/stable/lock_files 5 | 6 | snapshots: 7 | - original: lts-17.5 8 | completed: 9 | sha256: 78e8ebabf11406261abbc95b44f240acf71802630b368888f6d758de7fc3a2f7 10 | url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/17/5.yaml 11 | size: 565266 12 | packages: [] 13 | -------------------------------------------------------------------------------- /hs/test/Day10Spec.hs: -------------------------------------------------------------------------------- 1 | {-# LANGUAGE OverloadedStrings, TypeApplications #-} 2 | module Day10Spec (spec) where 3 | 4 | import Data.Text (Text) 5 | import qualified Data.Text as T (pack) 6 | import Day10 (day10a, day10b) 7 | import Test.Hspec (Spec, describe, it, shouldBe) 8 | 9 | example1, example2 :: Text 10 | example1 = T.pack . unlines $ 11 | show @Int <$> [16, 10, 15, 5, 1, 11, 7, 19, 6, 12, 4] 12 | example2 = T.pack . unlines $ show @Int <$> 13 | [ 28, 33, 18, 42, 31, 14, 46, 20, 48, 47, 24, 23, 49, 45, 19 14 | , 38, 39, 11, 1, 32, 25, 35, 8, 17, 7, 9, 4, 2, 34, 10, 3 15 | ] 16 | 17 | spec :: Spec 18 | spec = do 19 | describe "part 1" $ do 20 | it "examples" $ do 21 | day10a example1 `shouldBe` Right 35 22 | day10a example2 `shouldBe` Right 220 23 | describe "part 2" $ do 24 | it "examples" $ do 25 | day10b example1 `shouldBe` Right 8 26 | day10b example2 `shouldBe` Right 19208 27 | -------------------------------------------------------------------------------- /hs/test/Day11Spec.hs: -------------------------------------------------------------------------------- 1 | {-# LANGUAGE OverloadedStrings #-} 2 | module Day11Spec (spec) where 3 | 4 | import Data.Text (Text) 5 | import qualified Data.Text as T (unlines) 6 | import Day11 (day11a, day11b) 7 | import Test.Hspec (Spec, describe, it, shouldBe) 8 | 9 | example :: Text 10 | example = T.unlines 11 | [ "L.LL.LL.LL" 12 | , "LLLLLLL.LL" 13 | , "L.L.L..L.." 14 | , "LLLL.LL.LL" 15 | , "L.LL.LL.LL" 16 | , "L.LLLLL.LL" 17 | , "..L.L....." 18 | , "LLLLLLLLLL" 19 | , "L.LLLLLL.L" 20 | , "L.LLLLL.LL" 21 | ] 22 | 23 | spec :: Spec 24 | spec = do 25 | describe "part 1" $ do 26 | it "examples" $ do 27 | day11a example `shouldBe` Just 37 28 | describe "part 2" $ do 29 | it "examples" $ do 30 | day11b example `shouldBe` Just 26 31 | -------------------------------------------------------------------------------- /hs/test/Day12Spec.hs: -------------------------------------------------------------------------------- 1 | {-# LANGUAGE OverloadedStrings #-} 2 | module Day12Spec (spec) where 3 | 4 | import Data.Text (Text) 5 | import Day12 (day12a, day12b) 6 | import Test.Hspec (Spec, describe, it, shouldBe) 7 | 8 | example :: Text 9 | example = "F10\nN3\nF7\nR90\nF11" 10 | 11 | spec :: Spec 12 | spec = do 13 | describe "part 1" $ do 14 | it "examples" $ do 15 | day12a example `shouldBe` Right 25 16 | describe "part 2" $ do 17 | it "examples" $ do 18 | day12b example `shouldBe` Right 286 19 | -------------------------------------------------------------------------------- /hs/test/Day13Spec.hs: -------------------------------------------------------------------------------- 1 | {-# LANGUAGE OverloadedStrings #-} 2 | module Day13Spec (spec) where 3 | 4 | import Day13 (day13a, day13b) 5 | import Test.Hspec (Spec, describe, it, shouldBe) 6 | 7 | spec :: Spec 8 | spec = do 9 | describe "part 1" $ do 10 | it "examples" $ do 11 | day13a "939\n7,13,x,x,59,x,31,19" `shouldBe` Right 295 12 | describe "part 2" $ do 13 | it "examples" $ do 14 | day13b "\n7,13,x,x,59,x,31,19" `shouldBe` Just 1068781 15 | day13b "\n17,x,13,19" `shouldBe` Just 3417 16 | day13b "\n67,7,59,61" `shouldBe` Just 754018 17 | day13b "\n67,x,7,59,61" `shouldBe` Just 779210 18 | day13b "\n67,7,x,59,61" `shouldBe` Just 1261476 19 | day13b "\n1789,37,47,1889" `shouldBe` Just 1202161486 20 | -------------------------------------------------------------------------------- /hs/test/Day14Spec.hs: -------------------------------------------------------------------------------- 1 | {-# LANGUAGE OverloadedStrings #-} 2 | module Day14Spec (spec) where 3 | 4 | import Data.Text (Text) 5 | import qualified Data.Text as T (unlines) 6 | import Day14 (day14a, day14b) 7 | import Test.Hspec (Spec, describe, it, shouldBe) 8 | 9 | example1, example2 :: Text 10 | example1 = T.unlines 11 | [ "mask = XXXXXXXXXXXXXXXXXXXXXXXXXXXXX1XXXX0X" 12 | , "mem[8] = 11" 13 | , "mem[7] = 101" 14 | , "mem[8] = 0" 15 | ] 16 | example2 = T.unlines 17 | [ "mask = 000000000000000000000000000000X1001X" 18 | , "mem[42] = 100" 19 | , "mask = 00000000000000000000000000000000X0XX" 20 | , "mem[26] = 1" 21 | ] 22 | 23 | spec :: Spec 24 | spec = do 25 | describe "part 1" $ do 26 | it "examples" $ do 27 | day14a example1 `shouldBe` Right 165 28 | describe "part 2" $ do 29 | it "examples" $ do 30 | day14b example2 `shouldBe` Right 208 31 | -------------------------------------------------------------------------------- /hs/test/Day17Spec.hs: -------------------------------------------------------------------------------- 1 | {-# LANGUAGE OverloadedStrings #-} 2 | module Day17Spec (spec) where 3 | 4 | import Data.Text (Text) 5 | import Day17 (day17a, day17b) 6 | import Test.Hspec (Spec, describe, it, shouldBe) 7 | 8 | example :: Text 9 | example = ".#.\n..#\n###" 10 | 11 | spec :: Spec 12 | spec = do 13 | describe "part 1" $ do 14 | it "examples" $ do 15 | day17a example `shouldBe` 112 16 | describe "part 2" $ do 17 | it "examples" $ do 18 | day17b example `shouldBe` 848 19 | -------------------------------------------------------------------------------- /hs/test/Day1Spec.hs: -------------------------------------------------------------------------------- 1 | {-# LANGUAGE OverloadedStrings #-} 2 | module Day1Spec (spec) where 3 | 4 | import Data.Text (Text) 5 | import qualified Data.Text as T (unlines) 6 | import Day1 (day1a, day1b) 7 | import Test.Hspec (Spec, describe, it, shouldBe) 8 | 9 | example :: Text 10 | example = T.unlines ["1721", "979", "366", "299", "675", "1456"] 11 | 12 | spec :: Spec 13 | spec = do 14 | describe "part 1" $ do 15 | it "examples" $ do 16 | day1a example `shouldBe` Right (Just 514579) 17 | describe "part 2" $ do 18 | it "examples" $ do 19 | day1b example `shouldBe` Right (Just 241861950) 20 | -------------------------------------------------------------------------------- /hs/test/Day21Spec.hs: -------------------------------------------------------------------------------- 1 | {-# LANGUAGE OverloadedStrings #-} 2 | module Day21Spec (spec) where 3 | 4 | import Data.Text (Text) 5 | import qualified Data.Text as T (unlines) 6 | import Day21 (day21a, day21b) 7 | import Test.Hspec (Spec, describe, it, shouldBe, it) 8 | 9 | example :: Text 10 | example = T.unlines 11 | [ "mxmxvkd kfcds sqjhc nhms (contains dairy, fish)" 12 | , "trh fvjkl sbzzf mxmxvkd (contains dairy)" 13 | , "sqjhc fvjkl (contains soy)" 14 | , "sqjhc mxmxvkd sbzzf (contains fish)" 15 | ] 16 | 17 | spec :: Spec 18 | spec = do 19 | describe "part 1" $ do 20 | it "examples" $ do 21 | day21a example `shouldBe` Right 5 22 | describe "part 2" $ do 23 | it "examples" $ do 24 | day21b example `shouldBe` Right (Just "mxmxvkd,sqjhc,fvjkl") 25 | -------------------------------------------------------------------------------- /hs/test/Day23Spec.hs: -------------------------------------------------------------------------------- 1 | module Day23Spec (spec) where 2 | 3 | import Day23 (day23a, day23b) 4 | import Test.Hspec (Spec, describe, it, shouldBe, it) 5 | 6 | spec :: Spec 7 | spec = do 8 | describe "part 1" $ do 9 | it "examples" $ do 10 | day23a "389125467" `shouldBe` 67384529 11 | describe "part 2" $ do 12 | it "examples" $ do 13 | day23b "389125467" `shouldBe` 149245887792 14 | -------------------------------------------------------------------------------- /hs/test/Day25Spec.hs: -------------------------------------------------------------------------------- 1 | {-# LANGUAGE OverloadedStrings #-} 2 | module Day25Spec (spec) where 3 | 4 | import Day25 (day25) 5 | import Test.Hspec (Spec, describe, it, shouldBe, it) 6 | 7 | spec :: Spec 8 | spec = do 9 | describe "part 1" $ do 10 | it "examples" $ do 11 | day25 "5764801\n17807724" `shouldBe` Just 14897079 12 | -------------------------------------------------------------------------------- /hs/test/Day2Spec.hs: -------------------------------------------------------------------------------- 1 | {-# LANGUAGE OverloadedStrings #-} 2 | module Day2Spec (spec) where 3 | 4 | import Data.Text (Text) 5 | import qualified Data.Text as T (unlines) 6 | import Day2 (day2a, day2b) 7 | import Test.Hspec (Spec, describe, it, shouldBe) 8 | 9 | example :: Text 10 | example = T.unlines ["1-3 a: abcde" , "1-3 b: cdefg" , "2-9 c: ccccccccc"] 11 | 12 | spec :: Spec 13 | spec = do 14 | describe "part 1" $ do 15 | it "examples" $ do 16 | day2a example `shouldBe` Right 2 17 | describe "part 2" $ do 18 | it "examples" $ do 19 | day2b example `shouldBe` Right 1 20 | -------------------------------------------------------------------------------- /hs/test/Day3Spec.hs: -------------------------------------------------------------------------------- 1 | {-# LANGUAGE OverloadedStrings #-} 2 | module Day3Spec (spec) where 3 | 4 | import Data.Text (Text) 5 | import qualified Data.Text as T (unlines) 6 | import Day3 (day3a, day3b) 7 | import Test.Hspec (Spec, describe, it, shouldBe) 8 | 9 | example :: Text 10 | example = T.unlines 11 | [ "..##......." 12 | , "#...#...#.." 13 | , ".#....#..#." 14 | , "..#.#...#.#" 15 | , ".#...##..#." 16 | , "..#.##....." 17 | , ".#.#.#....#" 18 | , ".#........#" 19 | , "#.##...#..." 20 | , "#...##....#" 21 | , ".#..#...#.#" 22 | ] 23 | 24 | spec :: Spec 25 | spec = do 26 | describe "part 1" $ do 27 | it "examples" $ do 28 | day3a example `shouldBe` 7 29 | describe "part 2" $ do 30 | it "examples" $ do 31 | day3b example `shouldBe` 336 32 | -------------------------------------------------------------------------------- /hs/test/Day5Spec.hs: -------------------------------------------------------------------------------- 1 | {-# LANGUAGE OverloadedStrings #-} 2 | module Day5Spec (spec) where 3 | 4 | import Day5 (day5a) 5 | import Test.Hspec (Spec, describe, it, shouldBe) 6 | 7 | spec :: Spec 8 | spec = do 9 | describe "part 1" $ do 10 | it "examples" $ do 11 | day5a "FBFBBFFRLR" `shouldBe` Just 357 12 | day5a "BFFFBBFRRR" `shouldBe` Just 567 13 | day5a "FFFBBBFRRR" `shouldBe` Just 119 14 | day5a "BBFFBBFRLL" `shouldBe` Just 820 15 | day5a "FBFBBFFRLR\nBFFFBBFRRR\nFFFBBBFRRR\nBBFFBBFRLL" `shouldBe` 16 | Just 820 17 | -------------------------------------------------------------------------------- /hs/test/Day6Spec.hs: -------------------------------------------------------------------------------- 1 | {-# LANGUAGE OverloadedStrings #-} 2 | module Day6Spec (spec) where 3 | 4 | import Data.Text (Text) 5 | import qualified Data.Text as T (unlines) 6 | import Day6 (day6a, day6b) 7 | import Test.Hspec (Spec, describe, it, shouldBe) 8 | 9 | example :: Text 10 | example = T.unlines 11 | ["abc", "", "a", "b", "c", "", "ab", "ac", "", "a", "a", "a", "a", "", "b"] 12 | 13 | spec :: Spec 14 | spec = do 15 | describe "part 1" $ do 16 | it "examples" $ do 17 | day6a (T.unlines ["abcx", "abcy", "abcz"]) `shouldBe` 6 18 | day6a example `shouldBe` 11 19 | describe "part 2" $ do 20 | it "examples" $ do 21 | day6b example `shouldBe` 6 22 | -------------------------------------------------------------------------------- /hs/test/Day8Spec.hs: -------------------------------------------------------------------------------- 1 | {-# LANGUAGE OverloadedStrings #-} 2 | module Day8Spec (spec) where 3 | 4 | import Data.Text (Text) 5 | import qualified Data.Text as T (unlines) 6 | import Day8 (day8a, day8b) 7 | import Test.Hspec (Spec, describe, it, shouldBe) 8 | 9 | example :: Text 10 | example = T.unlines 11 | [ "nop +0" 12 | , "acc +1" 13 | , "jmp +4" 14 | , "acc +3" 15 | , "jmp -3" 16 | , "acc -99" 17 | , "acc +1" 18 | , "jmp -4" 19 | , "acc +6" 20 | ] 21 | 22 | spec :: Spec 23 | spec = do 24 | describe "part 1" $ do 25 | it "examples" $ do 26 | day8a example `shouldBe` Right (Just 5) 27 | describe "part 2" $ do 28 | it "examples" $ do 29 | day8b example `shouldBe` Right (Just 8) 30 | -------------------------------------------------------------------------------- /hs/test/Day9Spec.hs: -------------------------------------------------------------------------------- 1 | {-# LANGUAGE OverloadedStrings, TypeApplications #-} 2 | module Day9Spec (spec) where 3 | 4 | import Data.Text (Text) 5 | import qualified Data.Text as T (pack) 6 | import Day9 (day9a, day9b) 7 | import Test.Hspec (Spec, describe, it, shouldBe) 8 | 9 | example :: Text 10 | example = T.pack . unlines $ show @Int <$> 11 | [ 35, 20, 15, 25, 47, 40, 62, 55, 65, 95, 102 12 | , 117, 150, 182, 127, 219, 299, 277, 309, 576 13 | ] 14 | 15 | 16 | spec :: Spec 17 | spec = do 18 | describe "part 1" $ do 19 | it "examples" $ do 20 | day9a 5 example `shouldBe` Right (Just 127) 21 | describe "part 2" $ do 22 | it "examples" $ do 23 | day9b 5 example `shouldBe` Right (Just 62) 24 | -------------------------------------------------------------------------------- /hs/test/Main.hs: -------------------------------------------------------------------------------- 1 | {-# OPTIONS_GHC -F -pgmF hspec-discover #-} 2 | -------------------------------------------------------------------------------- /kt/.gitignore: -------------------------------------------------------------------------------- 1 | .gradle/ 2 | .idea/ 3 | build/ 4 | local.properties 5 | *~ -------------------------------------------------------------------------------- /kt/detekt-baseline.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | ClassNaming:main.kt$resources 6 | 7 | 8 | -------------------------------------------------------------------------------- /kt/detekt.yml: -------------------------------------------------------------------------------- 1 | style: 2 | MagicNumber: 3 | active: false 4 | -------------------------------------------------------------------------------- /kt/gradle.properties: -------------------------------------------------------------------------------- 1 | kotlin.code.style = official 2 | 3 | detektVersion=1.16.0 4 | dokkaVersion=1.4.30 5 | jmhPluginVersion=0.6.3 6 | kotlinVersion=1.4.31 7 | kotlinterVersion=3.4.0 8 | versionsPluginVersion=0.38.0 9 | 10 | guavaVersion=30.1.1-jre 11 | jmhVersion=1.29 12 | junitVersion=5.7.1 13 | kotlinxCoroutinesVersion=1.4.2 14 | truthVersion=1.1.2 15 | -------------------------------------------------------------------------------- /kt/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ephemient/aoc2020/c48d3c30bc36d36e65a4a4fcd6d22bf41cc784ba/kt/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /kt/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-6.8.3-bin.zip 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | -------------------------------------------------------------------------------- /kt/settings.gradle.kts: -------------------------------------------------------------------------------- 1 | pluginManagement { 2 | plugins { 3 | val detektVersion: String by settings 4 | val dokkaVersion: String by settings 5 | val jmhPluginVersion: String by settings 6 | val kotlinVersion: String by settings 7 | val kotlinterVersion: String by settings 8 | val versionsPluginVersion: String by settings 9 | 10 | id("com.github.ben-manes.versions") version versionsPluginVersion 11 | id("io.gitlab.arturbosch.detekt") version detektVersion 12 | id("me.champeau.jmh") version jmhPluginVersion 13 | id("org.jetbrains.dokka") version dokkaVersion 14 | id("org.jmailen.kotlinter") version kotlinterVersion 15 | kotlin("jvm") version kotlinVersion 16 | } 17 | } 18 | rootProject.name = "aoc2020" 19 | -------------------------------------------------------------------------------- /kt/src/jmh/kotlin/io/github/ephemient/aoc2020/Day10Bench.kt: -------------------------------------------------------------------------------- 1 | package io.github.ephemient.aoc2020 2 | 3 | import org.openjdk.jmh.annotations.Benchmark 4 | import org.openjdk.jmh.annotations.Scope 5 | import org.openjdk.jmh.annotations.Setup 6 | import org.openjdk.jmh.annotations.State 7 | 8 | @State(Scope.Thread) 9 | open class Day10Bench { 10 | private lateinit var lines: List 11 | 12 | @Setup 13 | fun prepare() { 14 | lines = javaClass.classLoader.getResourceAsStream("day10.txt").bufferedReader().readLines() 15 | } 16 | 17 | @Benchmark 18 | fun part1(): Int = Day10(lines).part1() 19 | 20 | @Benchmark 21 | fun part2(): Long = Day10(lines).part2() 22 | } 23 | -------------------------------------------------------------------------------- /kt/src/jmh/kotlin/io/github/ephemient/aoc2020/Day11Bench.kt: -------------------------------------------------------------------------------- 1 | package io.github.ephemient.aoc2020 2 | 3 | import org.openjdk.jmh.annotations.Benchmark 4 | import org.openjdk.jmh.annotations.Scope 5 | import org.openjdk.jmh.annotations.Setup 6 | import org.openjdk.jmh.annotations.State 7 | 8 | @State(Scope.Thread) 9 | open class Day11Bench { 10 | private lateinit var lines: List 11 | 12 | @Setup 13 | fun prepare() { 14 | lines = javaClass.classLoader.getResourceAsStream("day11.txt").bufferedReader().readLines() 15 | } 16 | 17 | @Benchmark 18 | fun part1(): Int = Day11(lines).part1() 19 | 20 | @Benchmark 21 | fun part2(): Int = Day11(lines).part2() 22 | } 23 | -------------------------------------------------------------------------------- /kt/src/jmh/kotlin/io/github/ephemient/aoc2020/Day12Bench.kt: -------------------------------------------------------------------------------- 1 | package io.github.ephemient.aoc2020 2 | 3 | import org.openjdk.jmh.annotations.Benchmark 4 | import org.openjdk.jmh.annotations.Scope 5 | import org.openjdk.jmh.annotations.Setup 6 | import org.openjdk.jmh.annotations.State 7 | 8 | @State(Scope.Thread) 9 | open class Day12Bench { 10 | private lateinit var lines: List 11 | 12 | @Setup 13 | fun prepare() { 14 | lines = javaClass.classLoader.getResourceAsStream("day12.txt").bufferedReader().readLines() 15 | } 16 | 17 | @Benchmark 18 | fun part1(): Int = Day12(lines).part1() 19 | 20 | @Benchmark 21 | fun part2(): Int = Day12(lines).part2() 22 | } 23 | -------------------------------------------------------------------------------- /kt/src/jmh/kotlin/io/github/ephemient/aoc2020/Day13Bench.kt: -------------------------------------------------------------------------------- 1 | package io.github.ephemient.aoc2020 2 | 3 | import org.openjdk.jmh.annotations.Benchmark 4 | import org.openjdk.jmh.annotations.Scope 5 | import org.openjdk.jmh.annotations.Setup 6 | import org.openjdk.jmh.annotations.State 7 | 8 | @State(Scope.Thread) 9 | open class Day13Bench { 10 | private lateinit var lines: List 11 | 12 | @Setup 13 | fun prepare() { 14 | lines = javaClass.classLoader.getResourceAsStream("day13.txt").bufferedReader().readLines() 15 | } 16 | 17 | @Benchmark 18 | fun part1(): Int? = Day13(lines).part1() 19 | 20 | @Benchmark 21 | fun part2(): Long = Day13(lines).part2() 22 | } 23 | -------------------------------------------------------------------------------- /kt/src/jmh/kotlin/io/github/ephemient/aoc2020/Day14Bench.kt: -------------------------------------------------------------------------------- 1 | package io.github.ephemient.aoc2020 2 | 3 | import org.openjdk.jmh.annotations.Benchmark 4 | import org.openjdk.jmh.annotations.Scope 5 | import org.openjdk.jmh.annotations.Setup 6 | import org.openjdk.jmh.annotations.State 7 | 8 | @State(Scope.Thread) 9 | open class Day14Bench { 10 | private lateinit var lines: List 11 | 12 | @Setup 13 | fun prepare() { 14 | lines = javaClass.classLoader.getResourceAsStream("day14.txt").bufferedReader().readLines() 15 | } 16 | 17 | @Benchmark 18 | fun part1(): Long = Day14(lines).part1() 19 | 20 | @Benchmark 21 | fun part2(): Long = Day14(lines).part2() 22 | } 23 | -------------------------------------------------------------------------------- /kt/src/jmh/kotlin/io/github/ephemient/aoc2020/Day15Bench.kt: -------------------------------------------------------------------------------- 1 | package io.github.ephemient.aoc2020 2 | 3 | import org.openjdk.jmh.annotations.Benchmark 4 | import org.openjdk.jmh.annotations.Scope 5 | import org.openjdk.jmh.annotations.Setup 6 | import org.openjdk.jmh.annotations.State 7 | 8 | @State(Scope.Thread) 9 | open class Day15Bench { 10 | private lateinit var lines: List 11 | 12 | @Setup 13 | fun prepare() { 14 | lines = javaClass.classLoader.getResourceAsStream("day15.txt").bufferedReader().readLines() 15 | } 16 | 17 | @Benchmark 18 | fun part1(): Int? = Day15(lines).part1() 19 | 20 | @Benchmark 21 | fun part2(): Int? = Day15(lines).part2() 22 | } 23 | -------------------------------------------------------------------------------- /kt/src/jmh/kotlin/io/github/ephemient/aoc2020/Day16Bench.kt: -------------------------------------------------------------------------------- 1 | package io.github.ephemient.aoc2020 2 | 3 | import org.openjdk.jmh.annotations.Benchmark 4 | import org.openjdk.jmh.annotations.Scope 5 | import org.openjdk.jmh.annotations.Setup 6 | import org.openjdk.jmh.annotations.State 7 | 8 | @State(Scope.Thread) 9 | open class Day16Bench { 10 | private lateinit var lines: List 11 | 12 | @Setup 13 | fun prepare() { 14 | lines = javaClass.classLoader.getResourceAsStream("day16.txt").bufferedReader().readLines() 15 | } 16 | 17 | @Benchmark 18 | fun part1(): Int = Day16(lines).part1() 19 | 20 | @Benchmark 21 | fun part2(): Long = Day16(lines).part2() 22 | } 23 | -------------------------------------------------------------------------------- /kt/src/jmh/kotlin/io/github/ephemient/aoc2020/Day17Bench.kt: -------------------------------------------------------------------------------- 1 | package io.github.ephemient.aoc2020 2 | 3 | import org.openjdk.jmh.annotations.Benchmark 4 | import org.openjdk.jmh.annotations.Scope 5 | import org.openjdk.jmh.annotations.Setup 6 | import org.openjdk.jmh.annotations.State 7 | 8 | @State(Scope.Thread) 9 | open class Day17Bench { 10 | private lateinit var lines: List 11 | 12 | @Setup 13 | fun prepare() { 14 | lines = javaClass.classLoader.getResourceAsStream("day17.txt").bufferedReader().readLines() 15 | } 16 | 17 | @Benchmark 18 | fun part1(): Int = Day17(lines).part1() 19 | 20 | @Benchmark 21 | fun part2(): Int = Day17(lines).part2() 22 | } 23 | -------------------------------------------------------------------------------- /kt/src/jmh/kotlin/io/github/ephemient/aoc2020/Day18Bench.kt: -------------------------------------------------------------------------------- 1 | package io.github.ephemient.aoc2020 2 | 3 | import org.openjdk.jmh.annotations.Benchmark 4 | import org.openjdk.jmh.annotations.Scope 5 | import org.openjdk.jmh.annotations.Setup 6 | import org.openjdk.jmh.annotations.State 7 | 8 | @State(Scope.Thread) 9 | open class Day18Bench { 10 | private lateinit var lines: List 11 | 12 | @Setup 13 | fun prepare() { 14 | lines = javaClass.classLoader.getResourceAsStream("day18.txt").bufferedReader().readLines() 15 | } 16 | 17 | @Benchmark 18 | fun part1(): Long = Day18(lines).part1() 19 | 20 | @Benchmark 21 | fun part2(): Long = Day18(lines).part2() 22 | } 23 | -------------------------------------------------------------------------------- /kt/src/jmh/kotlin/io/github/ephemient/aoc2020/Day19Bench.kt: -------------------------------------------------------------------------------- 1 | package io.github.ephemient.aoc2020 2 | 3 | import org.openjdk.jmh.annotations.Benchmark 4 | import org.openjdk.jmh.annotations.Scope 5 | import org.openjdk.jmh.annotations.Setup 6 | import org.openjdk.jmh.annotations.State 7 | 8 | @State(Scope.Thread) 9 | open class Day19Bench { 10 | private lateinit var lines: List 11 | 12 | @Setup 13 | fun prepare() { 14 | lines = javaClass.classLoader.getResourceAsStream("day19.txt").bufferedReader().readLines() 15 | } 16 | 17 | @Benchmark 18 | fun part1(): Int = Day19(lines).part1() 19 | 20 | @Benchmark 21 | fun part2(): Int = Day19(lines).part2() 22 | } 23 | -------------------------------------------------------------------------------- /kt/src/jmh/kotlin/io/github/ephemient/aoc2020/Day1Bench.kt: -------------------------------------------------------------------------------- 1 | package io.github.ephemient.aoc2020 2 | 3 | import org.openjdk.jmh.annotations.Benchmark 4 | import org.openjdk.jmh.annotations.Scope 5 | import org.openjdk.jmh.annotations.Setup 6 | import org.openjdk.jmh.annotations.State 7 | 8 | @State(Scope.Thread) 9 | open class Day1Bench { 10 | private lateinit var lines: List 11 | 12 | @Setup 13 | fun prepare() { 14 | lines = javaClass.classLoader.getResourceAsStream("day1.txt").bufferedReader().readLines() 15 | } 16 | 17 | @Benchmark 18 | fun part1(): Int? = Day1(lines).part1() 19 | 20 | @Benchmark 21 | fun part2(): Int? = Day1(lines).part2() 22 | } 23 | -------------------------------------------------------------------------------- /kt/src/jmh/kotlin/io/github/ephemient/aoc2020/Day20Bench.kt: -------------------------------------------------------------------------------- 1 | package io.github.ephemient.aoc2020 2 | 3 | import org.openjdk.jmh.annotations.Benchmark 4 | import org.openjdk.jmh.annotations.Scope 5 | import org.openjdk.jmh.annotations.Setup 6 | import org.openjdk.jmh.annotations.State 7 | 8 | @State(Scope.Thread) 9 | open class Day20Bench { 10 | private lateinit var lines: List 11 | 12 | @Setup 13 | fun prepare() { 14 | lines = javaClass.classLoader.getResourceAsStream("day20.txt").bufferedReader().readLines() 15 | } 16 | 17 | @Benchmark 18 | fun part1(): Long = Day20(lines).part1() 19 | 20 | @Benchmark 21 | fun part2(): Int = Day20(lines).part2() 22 | } 23 | -------------------------------------------------------------------------------- /kt/src/jmh/kotlin/io/github/ephemient/aoc2020/Day21Bench.kt: -------------------------------------------------------------------------------- 1 | package io.github.ephemient.aoc2020 2 | 3 | import org.openjdk.jmh.annotations.Benchmark 4 | import org.openjdk.jmh.annotations.Scope 5 | import org.openjdk.jmh.annotations.Setup 6 | import org.openjdk.jmh.annotations.State 7 | 8 | @State(Scope.Thread) 9 | open class Day21Bench { 10 | private lateinit var lines: List 11 | 12 | @Setup 13 | fun prepare() { 14 | lines = javaClass.classLoader.getResourceAsStream("day21.txt").bufferedReader().readLines() 15 | } 16 | 17 | @Benchmark 18 | fun part1(): Int = Day21(lines).part1() 19 | 20 | @Benchmark 21 | fun part2(): String? = Day21(lines).part2() 22 | } 23 | -------------------------------------------------------------------------------- /kt/src/jmh/kotlin/io/github/ephemient/aoc2020/Day22Bench.kt: -------------------------------------------------------------------------------- 1 | package io.github.ephemient.aoc2020 2 | 3 | import org.openjdk.jmh.annotations.Benchmark 4 | import org.openjdk.jmh.annotations.Scope 5 | import org.openjdk.jmh.annotations.Setup 6 | import org.openjdk.jmh.annotations.State 7 | 8 | @State(Scope.Thread) 9 | open class Day22Bench { 10 | private lateinit var lines: List 11 | 12 | @Setup 13 | fun prepare() { 14 | lines = javaClass.classLoader.getResourceAsStream("day22.txt").bufferedReader().readLines() 15 | } 16 | 17 | @Benchmark 18 | fun part1(): Int = Day22(lines).part1() 19 | 20 | @Benchmark 21 | fun part2(): Int = Day22(lines).part2() 22 | } 23 | -------------------------------------------------------------------------------- /kt/src/jmh/kotlin/io/github/ephemient/aoc2020/Day23Bench.kt: -------------------------------------------------------------------------------- 1 | package io.github.ephemient.aoc2020 2 | 3 | import org.openjdk.jmh.annotations.Benchmark 4 | import org.openjdk.jmh.annotations.Scope 5 | import org.openjdk.jmh.annotations.Setup 6 | import org.openjdk.jmh.annotations.State 7 | 8 | @State(Scope.Thread) 9 | open class Day23Bench { 10 | private lateinit var lines: List 11 | 12 | @Setup 13 | fun prepare() { 14 | lines = javaClass.classLoader.getResourceAsStream("day23.txt").bufferedReader().readLines() 15 | } 16 | 17 | @Benchmark 18 | fun part1(): Int = Day23(lines).part1() 19 | 20 | @Benchmark 21 | fun part2(): Long = Day23(lines).part2() 22 | } 23 | -------------------------------------------------------------------------------- /kt/src/jmh/kotlin/io/github/ephemient/aoc2020/Day24Bench.kt: -------------------------------------------------------------------------------- 1 | package io.github.ephemient.aoc2020 2 | 3 | import org.openjdk.jmh.annotations.Benchmark 4 | import org.openjdk.jmh.annotations.Scope 5 | import org.openjdk.jmh.annotations.Setup 6 | import org.openjdk.jmh.annotations.State 7 | 8 | @State(Scope.Thread) 9 | open class Day24Bench { 10 | private lateinit var lines: List 11 | 12 | @Setup 13 | fun prepare() { 14 | lines = javaClass.classLoader.getResourceAsStream("day24.txt").bufferedReader().readLines() 15 | } 16 | 17 | @Benchmark 18 | fun part1(): Int = Day24(lines).part1() 19 | 20 | @Benchmark 21 | fun part2(): Int = Day24(lines).part2() 22 | } 23 | -------------------------------------------------------------------------------- /kt/src/jmh/kotlin/io/github/ephemient/aoc2020/Day25Bench.kt: -------------------------------------------------------------------------------- 1 | package io.github.ephemient.aoc2020 2 | 3 | import org.openjdk.jmh.annotations.Benchmark 4 | import org.openjdk.jmh.annotations.Scope 5 | import org.openjdk.jmh.annotations.Setup 6 | import org.openjdk.jmh.annotations.State 7 | 8 | @State(Scope.Thread) 9 | open class Day25Bench { 10 | private lateinit var lines: List 11 | 12 | @Setup 13 | fun prepare() { 14 | lines = javaClass.classLoader.getResourceAsStream("day25.txt").bufferedReader().readLines() 15 | } 16 | 17 | @Benchmark 18 | fun part1(): Int = Day25(lines).part1() 19 | } 20 | -------------------------------------------------------------------------------- /kt/src/jmh/kotlin/io/github/ephemient/aoc2020/Day2Bench.kt: -------------------------------------------------------------------------------- 1 | package io.github.ephemient.aoc2020 2 | 3 | import org.openjdk.jmh.annotations.Benchmark 4 | import org.openjdk.jmh.annotations.Scope 5 | import org.openjdk.jmh.annotations.Setup 6 | import org.openjdk.jmh.annotations.State 7 | 8 | @State(Scope.Thread) 9 | open class Day2Bench { 10 | private lateinit var lines: List 11 | 12 | @Setup 13 | fun prepare() { 14 | lines = javaClass.classLoader.getResourceAsStream("day2.txt").bufferedReader().readLines() 15 | } 16 | 17 | @Benchmark 18 | fun part1(): Int = Day2(lines).part1() 19 | 20 | @Benchmark 21 | fun part2(): Int = Day2(lines).part2() 22 | } 23 | -------------------------------------------------------------------------------- /kt/src/jmh/kotlin/io/github/ephemient/aoc2020/Day3Bench.kt: -------------------------------------------------------------------------------- 1 | package io.github.ephemient.aoc2020 2 | 3 | import org.openjdk.jmh.annotations.Benchmark 4 | import org.openjdk.jmh.annotations.Scope 5 | import org.openjdk.jmh.annotations.Setup 6 | import org.openjdk.jmh.annotations.State 7 | 8 | @State(Scope.Thread) 9 | open class Day3Bench { 10 | private lateinit var lines: List 11 | 12 | @Setup 13 | fun prepare() { 14 | lines = javaClass.classLoader.getResourceAsStream("day3.txt").bufferedReader().readLines() 15 | } 16 | 17 | @Benchmark 18 | fun part1(): Long = Day3(lines).part1() 19 | 20 | @Benchmark 21 | fun part2(): Long = Day3(lines).part2() 22 | } 23 | -------------------------------------------------------------------------------- /kt/src/jmh/kotlin/io/github/ephemient/aoc2020/Day4Bench.kt: -------------------------------------------------------------------------------- 1 | package io.github.ephemient.aoc2020 2 | 3 | import org.openjdk.jmh.annotations.Benchmark 4 | import org.openjdk.jmh.annotations.Scope 5 | import org.openjdk.jmh.annotations.Setup 6 | import org.openjdk.jmh.annotations.State 7 | 8 | @State(Scope.Thread) 9 | open class Day4Bench { 10 | private lateinit var lines: List 11 | 12 | @Setup 13 | fun prepare() { 14 | lines = javaClass.classLoader.getResourceAsStream("day4.txt").bufferedReader().readLines() 15 | } 16 | 17 | @Benchmark 18 | fun part1(): Int = Day4(lines).part1() 19 | 20 | @Benchmark 21 | fun part2(): Int = Day4(lines).part2() 22 | } 23 | -------------------------------------------------------------------------------- /kt/src/jmh/kotlin/io/github/ephemient/aoc2020/Day5Bench.kt: -------------------------------------------------------------------------------- 1 | package io.github.ephemient.aoc2020 2 | 3 | import org.openjdk.jmh.annotations.Benchmark 4 | import org.openjdk.jmh.annotations.Scope 5 | import org.openjdk.jmh.annotations.Setup 6 | import org.openjdk.jmh.annotations.State 7 | 8 | @State(Scope.Thread) 9 | open class Day5Bench { 10 | private lateinit var lines: List 11 | 12 | @Setup 13 | fun prepare() { 14 | lines = javaClass.classLoader.getResourceAsStream("day5.txt").bufferedReader().readLines() 15 | } 16 | 17 | @Benchmark 18 | fun part1(): Int? = Day5(lines).part1() 19 | 20 | @Benchmark 21 | fun part2(): Int? = Day5(lines).part2() 22 | } 23 | -------------------------------------------------------------------------------- /kt/src/jmh/kotlin/io/github/ephemient/aoc2020/Day6Bench.kt: -------------------------------------------------------------------------------- 1 | package io.github.ephemient.aoc2020 2 | 3 | import org.openjdk.jmh.annotations.Benchmark 4 | import org.openjdk.jmh.annotations.Scope 5 | import org.openjdk.jmh.annotations.Setup 6 | import org.openjdk.jmh.annotations.State 7 | 8 | @State(Scope.Thread) 9 | open class Day6Bench { 10 | private lateinit var lines: List 11 | 12 | @Setup 13 | fun prepare() { 14 | lines = javaClass.classLoader.getResourceAsStream("day6.txt").bufferedReader().readLines() 15 | } 16 | 17 | @Benchmark 18 | fun part1(): Int = Day6(lines).part1() 19 | 20 | @Benchmark 21 | fun part2(): Int = Day6(lines).part2() 22 | } 23 | -------------------------------------------------------------------------------- /kt/src/jmh/kotlin/io/github/ephemient/aoc2020/Day7Bench.kt: -------------------------------------------------------------------------------- 1 | package io.github.ephemient.aoc2020 2 | 3 | import org.openjdk.jmh.annotations.Benchmark 4 | import org.openjdk.jmh.annotations.Scope 5 | import org.openjdk.jmh.annotations.Setup 6 | import org.openjdk.jmh.annotations.State 7 | 8 | @State(Scope.Thread) 9 | open class Day7Bench { 10 | private lateinit var lines: List 11 | 12 | @Setup 13 | fun prepare() { 14 | lines = javaClass.classLoader.getResourceAsStream("day7.txt").bufferedReader().readLines() 15 | } 16 | 17 | @Benchmark 18 | fun part1(): Int = Day7(lines).part1() 19 | 20 | @Benchmark 21 | fun part2(): Int = Day7(lines).part2() 22 | } 23 | -------------------------------------------------------------------------------- /kt/src/jmh/kotlin/io/github/ephemient/aoc2020/Day8Bench.kt: -------------------------------------------------------------------------------- 1 | package io.github.ephemient.aoc2020 2 | 3 | import org.openjdk.jmh.annotations.Benchmark 4 | import org.openjdk.jmh.annotations.Scope 5 | import org.openjdk.jmh.annotations.Setup 6 | import org.openjdk.jmh.annotations.State 7 | 8 | @State(Scope.Thread) 9 | open class Day8Bench { 10 | private lateinit var lines: List 11 | 12 | @Setup 13 | fun prepare() { 14 | lines = javaClass.classLoader.getResourceAsStream("day8.txt").bufferedReader().readLines() 15 | } 16 | 17 | @Benchmark 18 | fun part1(): Int? = Day8(lines).part1() 19 | 20 | @Benchmark 21 | fun part2(): Int? = Day8(lines).part2() 22 | } 23 | -------------------------------------------------------------------------------- /kt/src/jmh/kotlin/io/github/ephemient/aoc2020/Day9Bench.kt: -------------------------------------------------------------------------------- 1 | package io.github.ephemient.aoc2020 2 | 3 | import org.openjdk.jmh.annotations.Benchmark 4 | import org.openjdk.jmh.annotations.Scope 5 | import org.openjdk.jmh.annotations.Setup 6 | import org.openjdk.jmh.annotations.State 7 | 8 | @State(Scope.Thread) 9 | open class Day9Bench { 10 | private lateinit var lines: List 11 | 12 | @Setup 13 | fun prepare() { 14 | lines = javaClass.classLoader.getResourceAsStream("day9.txt").bufferedReader().readLines() 15 | } 16 | 17 | @Benchmark 18 | fun part1(): Int? = Day9(lines).part1() 19 | 20 | @Benchmark 21 | fun part2(): Int? = Day9(lines).part2() 22 | } 23 | -------------------------------------------------------------------------------- /kt/src/main/kotlin/io/github/ephemient/aoc2020/Day10.kt: -------------------------------------------------------------------------------- 1 | package io.github.ephemient.aoc2020 2 | 3 | class Day10(lines: List) { 4 | private val nums = lines.mapNotNull { it.toIntOrNull() }.toIntArray().apply { sort() } 5 | 6 | fun part1(): Int { 7 | var x = 0 8 | var y = 0 9 | nums.fold(0) { a, b -> 10 | when (b - a) { 11 | 1 -> x++ 12 | 3 -> y++ 13 | } 14 | b 15 | } 16 | return x * (y + 1) 17 | } 18 | 19 | fun part2(): Long { 20 | val k = longArrayOf(1, 0, 0, 0) 21 | nums.fold(0) { a, b -> 22 | val d = b - a 23 | k.copyInto(k, d, 0, k.size - d) 24 | k.fill(0, 0, d) 25 | k[0] += k.sum() 26 | b 27 | } 28 | return k[0] 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /kt/src/main/kotlin/io/github/ephemient/aoc2020/Day15.kt: -------------------------------------------------------------------------------- 1 | package io.github.ephemient.aoc2020 2 | 3 | class Day15(lines: List) { 4 | private val nums = lines.singleOrNull() 5 | .orEmpty() 6 | .split(',') 7 | .mapNotNull { it.toIntOrNull() } 8 | 9 | fun part1(): Int? = get(2020) 10 | 11 | fun part2(): Int? = get(30000000) 12 | 13 | @Suppress("ReturnCount") 14 | internal operator fun get(n: Int): Int? { 15 | if (n <= nums.size) return nums.getOrNull(n - 1) 16 | var last = nums.lastOrNull() ?: return null 17 | val seen = IntArray(maxOf(n, nums.maxOf { it + 1 })) 18 | for ((i, x) in nums.subList(0, nums.lastIndex).withIndex()) { 19 | seen[x] = i + 1 20 | } 21 | for (i in nums.size until n) { 22 | val j = seen[last] 23 | seen[last] = i 24 | last = if (j == 0) 0 else i - j 25 | } 26 | return last 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /kt/src/main/kotlin/io/github/ephemient/aoc2020/Day2.kt: -------------------------------------------------------------------------------- 1 | package io.github.ephemient.aoc2020 2 | 3 | class Day2(lines: List) { 4 | private val rules = lines.map { 5 | val (lo, hi, char, string) = requireNotNull(pattern.matchEntire(it)).destructured 6 | Rule(lo.toInt(), hi.toInt(), char.single(), string) 7 | } 8 | 9 | fun part1(): Int = rules.count { (lo, hi, char, string) -> 10 | string.count { it == char } in lo..hi 11 | } 12 | 13 | fun part2(): Int = rules.count { (lo, hi, char, string) -> 14 | (string[lo - 1] == char) != (string[hi - 1] == char) 15 | } 16 | 17 | private data class Rule(val lo: Int, val hi: Int, val char: Char, val string: String) 18 | 19 | companion object { 20 | private val pattern = """(\d+)-(\d+) (\p{Print}): (\p{Print}*)""".toRegex() 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /kt/src/main/kotlin/io/github/ephemient/aoc2020/Day25.kt: -------------------------------------------------------------------------------- 1 | package io.github.ephemient.aoc2020 2 | 3 | class Day25(lines: List) { 4 | private val pub1 = lines[0].toInt() 5 | private val pub2 = lines[1].toInt() 6 | 7 | fun part1(): Int { 8 | var e = 0 9 | var n = 1 10 | while (n != pub2) { 11 | e++ 12 | n = 7 * n % 20201227 13 | } 14 | return pub1.toBigInteger().modPow(e.toBigInteger(), 20201227.toBigInteger()).intValueExact() 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /kt/src/main/kotlin/io/github/ephemient/aoc2020/Day3.kt: -------------------------------------------------------------------------------- 1 | package io.github.ephemient.aoc2020 2 | 3 | class Day3(private val lines: List) { 4 | fun part1(): Long = count(3 to 1) 5 | 6 | fun part2(): Long = count(1 to 1, 3 to 1, 5 to 1, 7 to 1, 1 to 2) 7 | 8 | private fun count(vararg ratios: Pair): Long { 9 | val trees = IntArray(ratios.size) 10 | lines.forEachIndexed { i, line -> 11 | ratios.forEachIndexed { j, (over, down) -> 12 | if (i % down == 0 && line[i / down * over % line.length] == '#') trees[j]++ 13 | } 14 | } 15 | return trees.fold(1L) { acc, elem -> acc * elem } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /kt/src/main/kotlin/io/github/ephemient/aoc2020/Day5.kt: -------------------------------------------------------------------------------- 1 | package io.github.ephemient.aoc2020 2 | 3 | class Day5(lines: List) { 4 | private val seats = lines 5 | .map { it.fold(0) { acc, c -> acc shl 1 or (c.toInt() shr 2 xor 1 and 1) } } 6 | .sorted() 7 | 8 | fun part1(): Int? = seats.lastOrNull() 9 | 10 | fun part2(): Int? { 11 | seats.zipWithNext { l, r -> 12 | if (l + 1 < r) return l + 1 13 | } 14 | return null 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /kt/src/main/resources/day1.txt: -------------------------------------------------------------------------------- 1 | ../../../../day1.txt -------------------------------------------------------------------------------- /kt/src/main/resources/day10.txt: -------------------------------------------------------------------------------- 1 | ../../../../day10.txt -------------------------------------------------------------------------------- /kt/src/main/resources/day11.txt: -------------------------------------------------------------------------------- 1 | ../../../../day11.txt -------------------------------------------------------------------------------- /kt/src/main/resources/day12.txt: -------------------------------------------------------------------------------- 1 | ../../../../day12.txt -------------------------------------------------------------------------------- /kt/src/main/resources/day13.txt: -------------------------------------------------------------------------------- 1 | ../../../../day13.txt -------------------------------------------------------------------------------- /kt/src/main/resources/day14.txt: -------------------------------------------------------------------------------- 1 | ../../../../day14.txt -------------------------------------------------------------------------------- /kt/src/main/resources/day15.txt: -------------------------------------------------------------------------------- 1 | ../../../../day15.txt -------------------------------------------------------------------------------- /kt/src/main/resources/day16.txt: -------------------------------------------------------------------------------- 1 | ../../../../day16.txt -------------------------------------------------------------------------------- /kt/src/main/resources/day17.txt: -------------------------------------------------------------------------------- 1 | ../../../../day17.txt -------------------------------------------------------------------------------- /kt/src/main/resources/day18.txt: -------------------------------------------------------------------------------- 1 | ../../../../day18.txt -------------------------------------------------------------------------------- /kt/src/main/resources/day19.txt: -------------------------------------------------------------------------------- 1 | ../../../../day19.txt -------------------------------------------------------------------------------- /kt/src/main/resources/day2.txt: -------------------------------------------------------------------------------- 1 | ../../../../day2.txt -------------------------------------------------------------------------------- /kt/src/main/resources/day20.txt: -------------------------------------------------------------------------------- 1 | ../../../../day20.txt -------------------------------------------------------------------------------- /kt/src/main/resources/day21.txt: -------------------------------------------------------------------------------- 1 | ../../../../day21.txt -------------------------------------------------------------------------------- /kt/src/main/resources/day22.txt: -------------------------------------------------------------------------------- 1 | ../../../../day22.txt -------------------------------------------------------------------------------- /kt/src/main/resources/day23.txt: -------------------------------------------------------------------------------- 1 | ../../../../day23.txt -------------------------------------------------------------------------------- /kt/src/main/resources/day24.txt: -------------------------------------------------------------------------------- 1 | ../../../../day24.txt -------------------------------------------------------------------------------- /kt/src/main/resources/day25.txt: -------------------------------------------------------------------------------- 1 | ../../../../day25.txt -------------------------------------------------------------------------------- /kt/src/main/resources/day3.txt: -------------------------------------------------------------------------------- 1 | ../../../../day3.txt -------------------------------------------------------------------------------- /kt/src/main/resources/day4.txt: -------------------------------------------------------------------------------- 1 | ../../../../day4.txt -------------------------------------------------------------------------------- /kt/src/main/resources/day5.txt: -------------------------------------------------------------------------------- 1 | ../../../../day5.txt -------------------------------------------------------------------------------- /kt/src/main/resources/day6.txt: -------------------------------------------------------------------------------- 1 | ../../../../day6.txt -------------------------------------------------------------------------------- /kt/src/main/resources/day7.txt: -------------------------------------------------------------------------------- 1 | ../../../../day7.txt -------------------------------------------------------------------------------- /kt/src/main/resources/day8.txt: -------------------------------------------------------------------------------- 1 | ../../../../day8.txt -------------------------------------------------------------------------------- /kt/src/main/resources/day9.txt: -------------------------------------------------------------------------------- 1 | ../../../../day9.txt -------------------------------------------------------------------------------- /kt/src/test/kotlin/io/github/ephemient/aoc2020/Day10Test.kt: -------------------------------------------------------------------------------- 1 | package io.github.ephemient.aoc2020 2 | 3 | import kotlin.test.Test 4 | import kotlin.test.assertEquals 5 | 6 | class Day10Test { 7 | @Test 8 | fun `part 1 examples`() { 9 | assertEquals(35, Day10(example1).part1()) 10 | assertEquals(220, Day10(example2).part1()) 11 | } 12 | 13 | @Test 14 | fun `part 2 examples`() { 15 | assertEquals(8, Day10(example1).part2()) 16 | assertEquals(19208, Day10(example2).part2()) 17 | } 18 | 19 | companion object { 20 | private val example1 = intArrayOf(16, 10, 15, 5, 1, 11, 7, 19, 6, 12, 4) 21 | .map { it.toString() } 22 | private val example2 = intArrayOf( 23 | 28, 33, 18, 42, 31, 14, 46, 20, 48, 47, 24, 23, 49, 45, 19, 24 | 38, 39, 11, 1, 32, 25, 35, 8, 17, 7, 9, 4, 2, 34, 10, 3 25 | ).map { it.toString() } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /kt/src/test/kotlin/io/github/ephemient/aoc2020/Day11Test.kt: -------------------------------------------------------------------------------- 1 | package io.github.ephemient.aoc2020 2 | 3 | import kotlin.test.Test 4 | import kotlin.test.assertEquals 5 | 6 | class Day11Test { 7 | @Test 8 | fun `part 1 examples`() { 9 | assertEquals(37, Day11(example).part1()) 10 | } 11 | 12 | @Test 13 | fun `part 2 examples`() { 14 | assertEquals(26, Day11(example).part2()) 15 | } 16 | 17 | companion object { 18 | private val example = listOf( 19 | "L.LL.LL.LL", 20 | "LLLLLLL.LL", 21 | "L.L.L..L..", 22 | "LLLL.LL.LL", 23 | "L.LL.LL.LL", 24 | "L.LLLLL.LL", 25 | "..L.L.....", 26 | "LLLLLLLLLL", 27 | "L.LLLLLL.L", 28 | "L.LLLLL.LL", 29 | ) 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /kt/src/test/kotlin/io/github/ephemient/aoc2020/Day12Test.kt: -------------------------------------------------------------------------------- 1 | package io.github.ephemient.aoc2020 2 | 3 | import kotlin.test.Test 4 | import kotlin.test.assertEquals 5 | 6 | class Day12Test { 7 | @Test 8 | fun `part 1 examples`() { 9 | assertEquals(25, Day12(example).part1()) 10 | } 11 | 12 | @Test 13 | fun `part 2 examples`() { 14 | assertEquals(286, Day12(example).part2()) 15 | } 16 | 17 | companion object { 18 | private val example = listOf("F10", "N3", "F7", "R90", "F11") 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /kt/src/test/kotlin/io/github/ephemient/aoc2020/Day13Test.kt: -------------------------------------------------------------------------------- 1 | package io.github.ephemient.aoc2020 2 | 3 | import kotlin.test.Test 4 | import kotlin.test.assertEquals 5 | 6 | class Day13Test { 7 | @Test 8 | fun `part 1 examples`() { 9 | assertEquals(295, Day13(listOf("939", "7,13,x,x,59,x,31,19")).part1()) 10 | } 11 | 12 | @Test 13 | fun `part 2 examples`() { 14 | assertEquals(1068781, Day13(listOf("", "7,13,x,x,59,x,31,19")).part2()) 15 | assertEquals(3417, Day13(listOf("", "17,x,13,19")).part2()) 16 | assertEquals(754018, Day13(listOf("", "67,7,59,61")).part2()) 17 | assertEquals(779210, Day13(listOf("", "67,x,7,59,61")).part2()) 18 | assertEquals(1261476, Day13(listOf("", "67,7,x,59,61")).part2()) 19 | assertEquals(1202161486, Day13(listOf("", "1789,37,47,1889")).part2()) 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /kt/src/test/kotlin/io/github/ephemient/aoc2020/Day17Test.kt: -------------------------------------------------------------------------------- 1 | package io.github.ephemient.aoc2020 2 | 3 | import kotlin.test.Test 4 | import kotlin.test.assertEquals 5 | 6 | class Day17Test { 7 | @Test 8 | fun `part 1 examples`() { 9 | assertEquals(112, Day17(listOf(".#.", "..#", "###")).part1()) 10 | } 11 | 12 | @Test 13 | fun `part 2 examples`() { 14 | assertEquals(848, Day17(listOf(".#.", "..#", "###")).part2()) 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /kt/src/test/kotlin/io/github/ephemient/aoc2020/Day1Test.kt: -------------------------------------------------------------------------------- 1 | package io.github.ephemient.aoc2020 2 | 3 | import kotlin.test.Test 4 | import kotlin.test.assertEquals 5 | 6 | class Day1Test { 7 | @Test 8 | fun `part 1 examples`() { 9 | assertEquals(514579, Day1(SAMPLE_INPUT).part1()) 10 | } 11 | 12 | @Test 13 | fun `part 2 examples`() { 14 | assertEquals(241861950, Day1(SAMPLE_INPUT).part2()) 15 | } 16 | 17 | companion object { 18 | private val SAMPLE_INPUT = listOf("1721", "979", "366", "299", "675", "1456") 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /kt/src/test/kotlin/io/github/ephemient/aoc2020/Day21Test.kt: -------------------------------------------------------------------------------- 1 | package io.github.ephemient.aoc2020 2 | 3 | import kotlin.test.Test 4 | import kotlin.test.assertEquals 5 | 6 | class Day21Test { 7 | @Test 8 | fun `part 1 examples`() { 9 | assertEquals(5, Day21(example).part1()) 10 | } 11 | 12 | @Test 13 | fun `part 2 examples`() { 14 | assertEquals("mxmxvkd,sqjhc,fvjkl", Day21(example).part2()) 15 | } 16 | 17 | companion object { 18 | private val example = listOf( 19 | "mxmxvkd kfcds sqjhc nhms (contains dairy, fish)", 20 | "trh fvjkl sbzzf mxmxvkd (contains dairy)", 21 | "sqjhc fvjkl (contains soy)", 22 | "sqjhc mxmxvkd sbzzf (contains fish)", 23 | ) 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /kt/src/test/kotlin/io/github/ephemient/aoc2020/Day22Test.kt: -------------------------------------------------------------------------------- 1 | package io.github.ephemient.aoc2020 2 | 3 | import kotlin.test.Test 4 | import kotlin.test.assertEquals 5 | 6 | class Day22Test { 7 | @Test 8 | fun `part 1 examples`() { 9 | assertEquals(306, Day22(example).part1()) 10 | } 11 | 12 | @Test 13 | fun `part 2 examples`() { 14 | assertEquals(291, Day22(example).part2()) 15 | } 16 | 17 | companion object { 18 | private val example = 19 | """ 20 | Player 1: 21 | 9 22 | 2 23 | 6 24 | 3 25 | 1 26 | 27 | Player 2: 28 | 5 29 | 8 30 | 4 31 | 7 32 | 10 33 | """.trimIndent().lines() 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /kt/src/test/kotlin/io/github/ephemient/aoc2020/Day23Test.kt: -------------------------------------------------------------------------------- 1 | package io.github.ephemient.aoc2020 2 | 3 | import kotlin.test.Test 4 | import kotlin.test.assertEquals 5 | 6 | class Day23Test { 7 | @Test 8 | fun `part 1 examples`() { 9 | assertEquals(67384529, Day23(listOf("389125467")).part1()) 10 | } 11 | 12 | @Test 13 | fun `part 2 examples`() { 14 | assertEquals(149245887792, Day23(listOf("389125467")).part2()) 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /kt/src/test/kotlin/io/github/ephemient/aoc2020/Day25Test.kt: -------------------------------------------------------------------------------- 1 | package io.github.ephemient.aoc2020 2 | 3 | import kotlin.test.Test 4 | import kotlin.test.assertEquals 5 | 6 | class Day25Test { 7 | @Test 8 | fun `part 1 examples`() { 9 | assertEquals(14897079, Day25(listOf("5764801", "17807724")).part1()) 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /kt/src/test/kotlin/io/github/ephemient/aoc2020/Day2Test.kt: -------------------------------------------------------------------------------- 1 | package io.github.ephemient.aoc2020 2 | 3 | import kotlin.test.Test 4 | import kotlin.test.assertEquals 5 | 6 | class Day2Test { 7 | @Test 8 | fun `part 1 examples`() { 9 | assertEquals(2, Day2(SAMPLE_INPUT).part1()) 10 | } 11 | 12 | @Test 13 | fun `part 2 examples`() { 14 | assertEquals(1, Day2(SAMPLE_INPUT).part2()) 15 | } 16 | 17 | companion object { 18 | private val SAMPLE_INPUT = listOf("1-3 a: abcde", "1-3 b: cdefg", "2-9 c: ccccccccc") 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /kt/src/test/kotlin/io/github/ephemient/aoc2020/Day3Test.kt: -------------------------------------------------------------------------------- 1 | package io.github.ephemient.aoc2020 2 | 3 | import kotlin.test.Test 4 | import kotlin.test.assertEquals 5 | 6 | class Day3Test { 7 | @Test 8 | fun `part 1 examples`() { 9 | assertEquals(7, Day3(SAMPLE_INPUT).part1()) 10 | } 11 | 12 | @Test 13 | fun `part 2 examples`() { 14 | assertEquals(336, Day3(SAMPLE_INPUT).part2()) 15 | } 16 | 17 | companion object { 18 | private val SAMPLE_INPUT = listOf( 19 | "..##.......", 20 | "#...#...#..", 21 | ".#....#..#.", 22 | "..#.#...#.#", 23 | ".#...##..#.", 24 | "..#.##.....", 25 | ".#.#.#....#", 26 | ".#........#", 27 | "#.##...#...", 28 | "#...##....#", 29 | ".#..#...#.#", 30 | ) 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /kt/src/test/kotlin/io/github/ephemient/aoc2020/Day5Test.kt: -------------------------------------------------------------------------------- 1 | package io.github.ephemient.aoc2020 2 | 3 | import kotlin.test.Test 4 | import kotlin.test.assertEquals 5 | 6 | class Day5Test { 7 | @Test 8 | fun `part 1 examples`() { 9 | assertEquals(357, Day5(listOf("FBFBBFFRLR")).part1()) 10 | assertEquals(567, Day5(listOf("BFFFBBFRRR")).part1()) 11 | assertEquals(119, Day5(listOf("FFFBBBFRRR")).part1()) 12 | assertEquals(820, Day5(listOf("BBFFBBFRLL")).part1()) 13 | assertEquals( 14 | 820, 15 | Day5(listOf("FBFBBFFRLR", "BFFFBBFRRR", "FFFBBBFRRR", "BBFFBBFRLL")).part1() 16 | ) 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /kt/src/test/kotlin/io/github/ephemient/aoc2020/Day6Test.kt: -------------------------------------------------------------------------------- 1 | package io.github.ephemient.aoc2020 2 | 3 | import kotlin.test.Test 4 | import kotlin.test.assertEquals 5 | 6 | class Day6Test { 7 | @Test 8 | fun `part 1 examples`() { 9 | assertEquals(6, Day6(listOf("abcx", "abcy", "abcz")).part1()) 10 | assertEquals(11, Day6(example).part1()) 11 | } 12 | 13 | @Test 14 | fun `part 2 examples`() { 15 | assertEquals(6, Day6(example).part2()) 16 | } 17 | 18 | companion object { 19 | private val example = 20 | listOf("abc", "", "a", "b", "c", "", "ab", "ac", "", "a", "a", "a", "a", "", "b") 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /kt/src/test/kotlin/io/github/ephemient/aoc2020/Day8Test.kt: -------------------------------------------------------------------------------- 1 | package io.github.ephemient.aoc2020 2 | 3 | import kotlin.test.Test 4 | import kotlin.test.assertEquals 5 | 6 | class Day8Test { 7 | @Test 8 | fun `part 1 examples`() { 9 | assertEquals(5, Day8(example).part1()) 10 | } 11 | 12 | @Test 13 | fun `part 2 examples`() { 14 | assertEquals(8, Day8(example).part2()) 15 | } 16 | 17 | companion object { 18 | private val example = listOf( 19 | "nop +0", 20 | "acc +1", 21 | "jmp +4", 22 | "acc +3", 23 | "jmp -3", 24 | "acc -99", 25 | "acc +1", 26 | "jmp -4", 27 | "acc +6", 28 | ) 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /kt/src/test/kotlin/io/github/ephemient/aoc2020/Day9Test.kt: -------------------------------------------------------------------------------- 1 | package io.github.ephemient.aoc2020 2 | 3 | import kotlin.test.Test 4 | import kotlin.test.assertEquals 5 | 6 | class Day9Test { 7 | @Test 8 | fun `part 1 examples`() { 9 | assertEquals(127, Day9(example, n = 5).part1()) 10 | } 11 | 12 | @Test 13 | fun `part 2 examples`() { 14 | assertEquals(62, Day9(example, n = 5).part2()) 15 | } 16 | 17 | companion object { 18 | private val example = listOf( 19 | 35, 20, 15, 25, 47, 40, 62, 55, 65, 95, 102, 117, 150, 182, 127, 219, 299, 277, 309, 576 20 | ).map { it.toString() } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /py/.gitignore: -------------------------------------------------------------------------------- 1 | __pycache__/ 2 | *.py[cod] 3 | *.egg 4 | *.egg-info/ 5 | .eggs/ 6 | build/ 7 | dist/ 8 | sdist/ 9 | *~ -------------------------------------------------------------------------------- /py/MANIFEST.in: -------------------------------------------------------------------------------- 1 | global-include day*.txt 2 | -------------------------------------------------------------------------------- /py/Pipfile: -------------------------------------------------------------------------------- 1 | [[source]] 2 | name = "pypi" 3 | url = "https://pypi.org/simple" 4 | verify_ssl = true 5 | 6 | [dev-packages] 7 | pytest = "*" 8 | pytest-benchmark = {version = "*", extras = ["histogram"]} 9 | aoc2020 = {path = "."} 10 | 11 | [packages] 12 | aoc2020 = {path = ".", editable = "true"} 13 | 14 | [requires] 15 | python_version = "3.9" 16 | -------------------------------------------------------------------------------- /py/README.md: -------------------------------------------------------------------------------- 1 | # [Advent of Code 2020](https://adventofcode.com/2020) 2 | ### my answers in [Python](https://www.python.org/) ![Python CI](https://github.com/ephemient/aoc2020/workflows/Python%20CI/badge.svg) 3 | 4 | This project builds with [Pipenv](https://pipenv.pypa.io/). 5 | 6 | Setup: 7 | 8 | ```sh 9 | pipenv install --dev 10 | ``` 11 | 12 | Run the test suite: 13 | 14 | ```sh 15 | pipenv run pytest 16 | ``` 17 | 18 | Run the benchmarks: 19 | 20 | ```sh 21 | pipenv run pytest --benchmark-enable 22 | ``` 23 | 24 | Print solutions for the inputs provided in local data files: 25 | 26 | ```sh 27 | pipenv run aoc2020 28 | ``` 29 | -------------------------------------------------------------------------------- /py/pyproject.toml: -------------------------------------------------------------------------------- 1 | [build-system] 2 | requires = ['setuptools>=40.8.0', 'wheel>=0.30.0'] 3 | build-backend = 'setuptools.build_meta' 4 | 5 | [tool.pytest.ini_options] 6 | addopts = '--doctest-modules --benchmark-disable --benchmark-sort=fullname' 7 | required_plugins = ['pytest-benchmark'] 8 | -------------------------------------------------------------------------------- /py/setup.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | from setuptools import setup 3 | setup( 4 | setup_requires=['setuptools>=40.8.0', 'wheel>=0.30.0'], 5 | setup_cfg=True 6 | ) 7 | -------------------------------------------------------------------------------- /py/src/aoc2020/__init__.py: -------------------------------------------------------------------------------- 1 | VERSION = '0.0.1' 2 | -------------------------------------------------------------------------------- /py/src/aoc2020/day1.py: -------------------------------------------------------------------------------- 1 | import fileinput 2 | from itertools import combinations 3 | from math import prod 4 | 5 | 6 | def part1(lines): 7 | ''' 8 | >>> part1(['1721', '979', '366', '299', '675', '1456']) 9 | 514579 10 | ''' 11 | nums = set(map(int, lines)) 12 | for num in nums: 13 | rem = 2020 - num 14 | if rem in nums: 15 | return num * rem 16 | 17 | 18 | def part2(lines): 19 | ''' 20 | >>> part2(['1721', '979', '366', '299', '675', '1456']) 21 | 241861950 22 | ''' 23 | nums = set(map(int, lines)) 24 | for combo in combinations(nums, 2): 25 | rem = 2020 - sum(combo) 26 | if rem in nums: 27 | return prod(combo) * rem 28 | 29 | 30 | parts = (part1, part2) 31 | 32 | if __name__ == '__main__': 33 | lines = list(fileinput.input()) 34 | print(part1(lines)) 35 | print(part2(lines)) 36 | -------------------------------------------------------------------------------- /py/src/aoc2020/day1.txt: -------------------------------------------------------------------------------- 1 | ../../../day1.txt -------------------------------------------------------------------------------- /py/src/aoc2020/day10.txt: -------------------------------------------------------------------------------- 1 | ../../../day10.txt -------------------------------------------------------------------------------- /py/src/aoc2020/day11.txt: -------------------------------------------------------------------------------- 1 | ../../../day11.txt -------------------------------------------------------------------------------- /py/src/aoc2020/day12.txt: -------------------------------------------------------------------------------- 1 | ../../../day12.txt -------------------------------------------------------------------------------- /py/src/aoc2020/day13.txt: -------------------------------------------------------------------------------- 1 | ../../../day13.txt -------------------------------------------------------------------------------- /py/src/aoc2020/day14.txt: -------------------------------------------------------------------------------- 1 | ../../../day14.txt -------------------------------------------------------------------------------- /py/src/aoc2020/day15.txt: -------------------------------------------------------------------------------- 1 | ../../../day15.txt -------------------------------------------------------------------------------- /py/src/aoc2020/day16.txt: -------------------------------------------------------------------------------- 1 | ../../../day16.txt -------------------------------------------------------------------------------- /py/src/aoc2020/day17.txt: -------------------------------------------------------------------------------- 1 | ../../../day17.txt -------------------------------------------------------------------------------- /py/src/aoc2020/day18.txt: -------------------------------------------------------------------------------- 1 | ../../../day18.txt -------------------------------------------------------------------------------- /py/src/aoc2020/day19.txt: -------------------------------------------------------------------------------- 1 | ../../../day19.txt -------------------------------------------------------------------------------- /py/src/aoc2020/day2.txt: -------------------------------------------------------------------------------- 1 | ../../../day2.txt -------------------------------------------------------------------------------- /py/src/aoc2020/day20.txt: -------------------------------------------------------------------------------- 1 | ../../../day20.txt -------------------------------------------------------------------------------- /py/src/aoc2020/day21.txt: -------------------------------------------------------------------------------- 1 | ../../../day21.txt -------------------------------------------------------------------------------- /py/src/aoc2020/day22.txt: -------------------------------------------------------------------------------- 1 | ../../../day22.txt -------------------------------------------------------------------------------- /py/src/aoc2020/day23.txt: -------------------------------------------------------------------------------- 1 | ../../../day23.txt -------------------------------------------------------------------------------- /py/src/aoc2020/day24.txt: -------------------------------------------------------------------------------- 1 | ../../../day24.txt -------------------------------------------------------------------------------- /py/src/aoc2020/day25.py: -------------------------------------------------------------------------------- 1 | import fileinput 2 | 3 | 4 | def part1(lines): 5 | ''' 6 | >>> part1(('5764801', '17807724')) 7 | 14897079 8 | ''' 9 | pub1, pub2 = [*map(int, lines)] 10 | e, n = 0, 1 11 | while n != pub2: 12 | e += 1 13 | n = 7 * n % 20201227 14 | return pow(pub1, e, 20201227) 15 | 16 | 17 | parts = (part1, ) 18 | 19 | if __name__ == '__main__': 20 | lines = list(fileinput.input()) 21 | print(part1(lines)) 22 | -------------------------------------------------------------------------------- /py/src/aoc2020/day25.txt: -------------------------------------------------------------------------------- 1 | ../../../day25.txt -------------------------------------------------------------------------------- /py/src/aoc2020/day3.txt: -------------------------------------------------------------------------------- 1 | ../../../day3.txt -------------------------------------------------------------------------------- /py/src/aoc2020/day4.txt: -------------------------------------------------------------------------------- 1 | ../../../day4.txt -------------------------------------------------------------------------------- /py/src/aoc2020/day5.py: -------------------------------------------------------------------------------- 1 | import fileinput 2 | 3 | 4 | def parse(lines): 5 | for line in lines: 6 | yield int(''.join('1' if c in 'BR' else '0' if c in 'LF' else '' 7 | for c in line), 8 | base=2) 9 | 10 | 11 | def part1(lines): 12 | ''' 13 | >>> part1(['FBFBBFFRLR']) 14 | 357 15 | >>> part1(['BFFFBBFRRR']) 16 | 567 17 | >>> part1(['FFFBBBFRRR']) 18 | 119 19 | >>> part1(['BBFFBBFRLL']) 20 | 820 21 | >>> part1(['FBFBBFFRLR', 'BFFFBBFRRR', 'FFFBBBFRRR', 'BBFFBBFRLL']) 22 | 820 23 | ''' 24 | return max(parse(lines)) 25 | 26 | 27 | def part2(lines): 28 | nums = list(parse(lines)) 29 | missing = set(range(min(nums), max(nums))) 30 | missing.difference_update(nums) 31 | return next(iter(missing)) 32 | 33 | 34 | parts = (part1, part2) 35 | 36 | if __name__ == '__main__': 37 | lines = list(fileinput.input()) 38 | print(part1(lines)) 39 | print(part2(lines)) 40 | -------------------------------------------------------------------------------- /py/src/aoc2020/day5.txt: -------------------------------------------------------------------------------- 1 | ../../../day5.txt -------------------------------------------------------------------------------- /py/src/aoc2020/day6.txt: -------------------------------------------------------------------------------- 1 | ../../../day6.txt -------------------------------------------------------------------------------- /py/src/aoc2020/day7.txt: -------------------------------------------------------------------------------- 1 | ../../../day7.txt -------------------------------------------------------------------------------- /py/src/aoc2020/day8.txt: -------------------------------------------------------------------------------- 1 | ../../../day8.txt -------------------------------------------------------------------------------- /py/src/aoc2020/day9.txt: -------------------------------------------------------------------------------- 1 | ../../../day9.txt -------------------------------------------------------------------------------- /py/src/aoc2020/main.py: -------------------------------------------------------------------------------- 1 | import io 2 | import pkg_resources 3 | import sys 4 | 5 | 6 | def main(): 7 | args = set(sys.argv[1:]) 8 | days = pkg_resources.get_entry_map('aoc2020', 'aoc2020.days') 9 | for day, entry in sorted(days.items(), key=lambda item: int(item[0])): 10 | if args and day not in args: 11 | continue 12 | print(f'Day {day}') 13 | with io.TextIOWrapper( 14 | pkg_resources.resource_stream('aoc2020', 15 | f'day{day}.txt')) as fh: 16 | data = fh.readlines() 17 | for part in entry.load(): 18 | print(part(data)) 19 | print() 20 | 21 | 22 | if __name__ == '__main__': 23 | main() 24 | -------------------------------------------------------------------------------- /py/src/aoc2020/math.py: -------------------------------------------------------------------------------- 1 | import math 2 | 3 | 4 | def egcd(a, b): 5 | if not b: 6 | return 1, 0, a 7 | q, r = a // b, a % b 8 | s, t, g = egcd(b, r) 9 | return t, s - q * t, g 10 | 11 | 12 | def crt(r1, q1, r2, q2): 13 | q3 = math.lcm(q1, q2) 14 | t, _, g = egcd(q1 + q2, q3) 15 | r3 = (r1 * q2 + r2 * q1) * t 16 | assert not r3 % g 17 | r3 = r3 // g % q3 18 | if (r3 < 0) != (q3 < 0): 19 | r3 += q3 20 | return r3, q3 21 | -------------------------------------------------------------------------------- /rs/.gitignore: -------------------------------------------------------------------------------- 1 | /target 2 | **/*.rs.bk 3 | -------------------------------------------------------------------------------- /rs/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "aoc2020" 3 | description = "Advent of Code 2020 - my answers" 4 | version = "0.1.0" 5 | authors = ["Daniel Lin "] 6 | license = "BSD-3-Clause" 7 | edition = "2018" 8 | readme = "README.md" 9 | homepage = "https://github.com/ephemient/aoc2020/tree/main/rs" 10 | build = "build.rs" 11 | 12 | [lib] 13 | name = "aoc2020" 14 | path = "src/lib.rs" 15 | 16 | [[bin]] 17 | name = "aoc2020" 18 | path = "src/main.rs" 19 | 20 | [build-dependencies] 21 | build_const = "0.2" 22 | 23 | [dependencies] 24 | build_const = "0.2" 25 | itertools = "0.10" 26 | lazy_static = "1" 27 | regex = "1" 28 | 29 | [dev-dependencies] 30 | criterion = "0.3" 31 | pretty_assertions = "1.0" 32 | 33 | [[bench]] 34 | name = "criterion" 35 | harness = false 36 | -------------------------------------------------------------------------------- /rs/README.md: -------------------------------------------------------------------------------- 1 | # [Advent of Code 2020](https://adventofcode.com/2020) 2 | ### my answers in [Rust](https://www.rust-lang.org/) ![Rust CI](https://github.com/ephemient/aoc2020/workflows/Rust%20CI/badge.svg) 3 | 4 | This project builds with [Cargo](https://docs.rust-lang.org/cargo). 5 | 6 | Run the test suite: 7 | 8 | ```sh 9 | cargo test 10 | ``` 11 | 12 | Run the [Criterion.rs](https://github.com/bheisler/criterion.rs) benchmarks: 13 | 14 | ```sh 15 | cargo bench --bench criterion 16 | ``` 17 | 18 | Print solutions for the inputs provided in local data files: 19 | 20 | ```sh 21 | cargo run 22 | ``` 23 | -------------------------------------------------------------------------------- /rs/day1.txt: -------------------------------------------------------------------------------- 1 | ../day1.txt -------------------------------------------------------------------------------- /rs/day10.txt: -------------------------------------------------------------------------------- 1 | ../day10.txt -------------------------------------------------------------------------------- /rs/day11.txt: -------------------------------------------------------------------------------- 1 | ../day11.txt -------------------------------------------------------------------------------- /rs/day12.txt: -------------------------------------------------------------------------------- 1 | ../day12.txt -------------------------------------------------------------------------------- /rs/day13.txt: -------------------------------------------------------------------------------- 1 | ../day13.txt -------------------------------------------------------------------------------- /rs/day14.txt: -------------------------------------------------------------------------------- 1 | ../day14.txt -------------------------------------------------------------------------------- /rs/day15.txt: -------------------------------------------------------------------------------- 1 | ../day15.txt -------------------------------------------------------------------------------- /rs/day16.txt: -------------------------------------------------------------------------------- 1 | ../day16.txt -------------------------------------------------------------------------------- /rs/day17.txt: -------------------------------------------------------------------------------- 1 | ../day17.txt -------------------------------------------------------------------------------- /rs/day18.txt: -------------------------------------------------------------------------------- 1 | ../day18.txt -------------------------------------------------------------------------------- /rs/day19.txt: -------------------------------------------------------------------------------- 1 | ../day19.txt -------------------------------------------------------------------------------- /rs/day2.txt: -------------------------------------------------------------------------------- 1 | ../day2.txt -------------------------------------------------------------------------------- /rs/day20.txt: -------------------------------------------------------------------------------- 1 | ../day20.txt -------------------------------------------------------------------------------- /rs/day21.txt: -------------------------------------------------------------------------------- 1 | ../day21.txt -------------------------------------------------------------------------------- /rs/day22.txt: -------------------------------------------------------------------------------- 1 | ../day22.txt -------------------------------------------------------------------------------- /rs/day23.txt: -------------------------------------------------------------------------------- 1 | ../day23.txt -------------------------------------------------------------------------------- /rs/day24.txt: -------------------------------------------------------------------------------- 1 | ../day24.txt -------------------------------------------------------------------------------- /rs/day25.txt: -------------------------------------------------------------------------------- 1 | ../day25.txt -------------------------------------------------------------------------------- /rs/day3.txt: -------------------------------------------------------------------------------- 1 | ../day3.txt -------------------------------------------------------------------------------- /rs/day4.txt: -------------------------------------------------------------------------------- 1 | ../day4.txt -------------------------------------------------------------------------------- /rs/day5.txt: -------------------------------------------------------------------------------- 1 | ../day5.txt -------------------------------------------------------------------------------- /rs/day6.txt: -------------------------------------------------------------------------------- 1 | ../day6.txt -------------------------------------------------------------------------------- /rs/day7.txt: -------------------------------------------------------------------------------- 1 | ../day7.txt -------------------------------------------------------------------------------- /rs/day8.txt: -------------------------------------------------------------------------------- 1 | ../day8.txt -------------------------------------------------------------------------------- /rs/day9.txt: -------------------------------------------------------------------------------- 1 | ../day9.txt -------------------------------------------------------------------------------- /rs/src/lib.rs: -------------------------------------------------------------------------------- 1 | #[macro_use] 2 | extern crate lazy_static; 3 | 4 | pub mod day1; 5 | pub mod day10; 6 | pub mod day11; 7 | pub mod day12; 8 | pub mod day13; 9 | pub mod day14; 10 | pub mod day15; 11 | pub mod day16; 12 | pub mod day17; 13 | pub mod day18; 14 | pub mod day19; 15 | pub mod day2; 16 | pub mod day20; 17 | pub mod day21; 18 | pub mod day22; 19 | pub mod day23; 20 | pub mod day24; 21 | pub mod day25; 22 | pub mod day3; 23 | pub mod day4; 24 | pub mod day5; 25 | pub mod day6; 26 | pub mod day7; 27 | pub mod day8; 28 | pub mod day9; 29 | pub mod machine; 30 | pub mod util; 31 | --------------------------------------------------------------------------------