Most solutions are heavily optimized, even if it means sacrificing some of the nicety.
Timings (on a 2013 3.5GHz i7):
test day01::bench_day01_1 ... bench: 22,329 ns/iter (+/- 6,366)
test day01::bench_day01_2 ... bench: 1,181,506 ns/iter (+/- 159,712)
test day02::bench_day02_1 ... bench: 18,918 ns/iter (+/- 844)
test day02::bench_day02_2 ... bench: 129,508 ns/iter (+/- 8,549)
test day03::bench_day03_1 ... bench: 7,834,518 ns/iter (+/- 457,500)
test day03::bench_day03_2 ... bench: 1,417,906 ns/iter (+/- 106,267)