#advent #example #aoc

bin+lib mbryant-aoc2021

对AoC 2021的注释解决方案

2个版本

0.25.1 2022年2月4日
0.25.0 2022年2月4日

#277性能分析

MIT 许可证

155KB
2.5K SLoC

AoC 2021

这包含了所有AoC 2021谜题的高效解决方案。更多信息请见AOC 2021

查看文档以了解解决方案的详细说明。


lib.rs:

这个crate包含了所有AoC 2021谜题的合理高效解决方案。更多信息,包括谜题提示,请见AOC 2021

如果你之前没有使用过Rust,这些是从代码库中生成的文档。它们应该涵盖了我对问题和解决方案的想法,提供一个概述,并允许通过屏幕右侧的[src]按钮轻松浏览代码。这是我第一次这样想通过Rust文档显示更多的内容,所以我很好奇反馈。

初始目标

在JVM启动之前执行所有谜题(约800ms)。

注意:这已经得到了稳固的实现,因为所有谜题在每次基准测试的系统上都运行在 <100ms。在我的台式机上,它们比python的冷启动要快(通过time python3 -c "exit()"测量)!

代码布局

每一天的代码都在不同的模块中(在页面底部链接),有三个强制函数:generatorpart1part2generator接受输入文本,从中解析并计算一个有用的中间表示形式,然后将该值的引用传递给part1part2

这允许我们单独关注每个部分,同时追踪解析输入的成本。然而,这也意味着我们在part1part2之间经常要做重复工作。

解决方案旨在通用,但可能需要更改常量。例如,如果输入是固定大小的网格,数据结构可能会使用一个常量集来表示这个固定大小,因为这可以减少所需的指针遍历。

由于我的台式机缓存(按现代标准)较弱,我经常优化内存效率而不是CPU完成的工作量。在具有更快内存层次结构的系统上,这可能不会带来同样的回报。

基准测试

已对几种不同的系统上的解决方案进行了基准测试,但主要开发是在英特尔i7-6700K上完成的。系统信息和结果可以在benchmarks模块下找到。

有关完整代码,包括框架和基准测试代码,请参阅Gitlab仓库

依赖项

~2–12MB
~103K SLoC