This commit is contained in:
nora 2023-12-03 14:56:40 +01:00
parent 546149ae38
commit 7bbecaedfe
32 changed files with 48 additions and 48 deletions

View file

@ -1,5 +1,5 @@
[package] [package]
name = "day1" name = "day01"
version = "0.1.0" version = "0.1.0"
edition = "2021" edition = "2021"

View file

@ -4,27 +4,27 @@ benchmarks:
Ensure that `input.txt` contains many, many copies of the actual input, the actual input is way too small. Ensure that `input.txt` contains many, many copies of the actual input, the actual input is way too small.
`cargo build --release && hyperfine 'target/release/day1 part2 naive' 'target/release/day1 part2 zero_alloc' 'target/release/day1 part2 branchless' 'target/release/day1 part2 vectorized'` `cargo build --release && hyperfine 'target/release/day01 part2 naive' 'target/release/day01 part2 zero_alloc' 'target/release/day01 part2 branchless' 'target/release/day01 part2 vectorized'`
``` ```
Benchmark 1: target/release/day1 part2 naive Benchmark 1: target/release/day01 part2 naive
Time (mean ± σ): 1.066 s ± 0.017 s [User: 1.048 s, System: 0.018 s] Time (mean ± σ): 1.066 s ± 0.017 s [User: 1.048 s, System: 0.018 s]
Range (min … max): 1.049 s … 1.099 s 10 runs Range (min … max): 1.049 s … 1.099 s 10 runs
Benchmark 2: target/release/day1 part2 zero_alloc Benchmark 2: target/release/day01 part2 zero_alloc
Time (mean ± σ): 212.7 ms ± 3.5 ms [User: 195.0 ms, System: 17.6 ms] Time (mean ± σ): 212.7 ms ± 3.5 ms [User: 195.0 ms, System: 17.6 ms]
Range (min … max): 206.9 ms … 219.0 ms 14 runs Range (min … max): 206.9 ms … 219.0 ms 14 runs
Benchmark 3: target/release/day1 part2 branchless Benchmark 3: target/release/day01 part2 branchless
Time (mean ± σ): 137.2 ms ± 1.8 ms [User: 117.5 ms, System: 19.6 ms] Time (mean ± σ): 137.2 ms ± 1.8 ms [User: 117.5 ms, System: 19.6 ms]
Range (min … max): 133.5 ms … 142.2 ms 21 runs Range (min … max): 133.5 ms … 142.2 ms 21 runs
Benchmark 4: target/release/day1 part2 vectorized Benchmark 4: target/release/day01 part2 vectorized
Time (mean ± σ): 87.9 ms ± 0.9 ms [User: 68.6 ms, System: 19.1 ms] Time (mean ± σ): 87.9 ms ± 0.9 ms [User: 68.6 ms, System: 19.1 ms]
Range (min … max): 86.5 ms … 90.6 ms 33 runs Range (min … max): 86.5 ms … 90.6 ms 33 runs
Summary Summary
target/release/day1 part2 vectorized ran target/release/day01 part2 vectorized ran
1.56 ± 0.03 times faster than target/release/day1 part2 branchless 1.56 ± 0.03 times faster than target/release/day01 part2 branchless
2.42 ± 0.05 times faster than target/release/day1 part2 zero_alloc 2.42 ± 0.05 times faster than target/release/day01 part2 zero_alloc
12.13 ± 0.22 times faster than target/release/day1 part2 naive 12.13 ± 0.22 times faster than target/release/day01 part2 naive
``` ```

View file

@ -0,0 +1,3 @@
fn main() {
day01::bench();
}

View file

@ -9,13 +9,13 @@ mod vectorized;
mod zero_alloc; mod zero_alloc;
pub fn main() { pub fn main() {
helper::main::<Day1>(include_str!("../input.txt")); helper::main::<Day01>(include_str!("../input.txt"));
} }
struct Day1; struct Day01;
helper::define_variants! { helper::define_variants! {
day => crate::Day1; day => crate::Day01;
part1 { part1 {
basic => crate::part1; basic => crate::part1;
} }
@ -28,7 +28,7 @@ helper::define_variants! {
} }
} }
impl Day for Day1 { impl Day for Day01 {
fn pad_input(input: &str) -> std::borrow::Cow<str> { fn pad_input(input: &str) -> std::borrow::Cow<str> {
let mut input = input.to_owned(); let mut input = input.to_owned();
input.reserve(10); // enough to read u64 input.reserve(10); // enough to read u64
@ -69,7 +69,7 @@ fn part1(input: &str) -> u64 {
} }
helper::tests! { helper::tests! {
day1 Day1; day01 Day01;
part1 { part1 {
"../input_small1.txt" => 142; "../input_small1.txt" => 142;
"../input.txt" => 54632; "../input.txt" => 54632;

3
2023/day01/src/main.rs Normal file
View file

@ -0,0 +1,3 @@
fn main() {
day01::main();
}

View file

@ -1,5 +1,5 @@
[package] [package]
name = "day2" name = "day02"
version = "0.1.0" version = "0.1.0"
edition = "2021" edition = "2021"

View file

@ -0,0 +1,3 @@
fn main() {
day02::bench();
}

View file

@ -9,13 +9,13 @@ use nom::{
}; };
pub fn main() { pub fn main() {
helper::main::<Day2>(include_str!("../input.txt")); helper::main::<Day02>(include_str!("../input.txt"));
} }
struct Day2; struct Day02;
helper::define_variants! { helper::define_variants! {
day => crate::Day2; day => crate::Day02;
part1 { part1 {
basic => crate::part1; basic => crate::part1;
} }
@ -24,7 +24,7 @@ helper::define_variants! {
} }
} }
impl Day for Day2 { impl Day for Day02 {
fn part1() -> helper::Variants { fn part1() -> helper::Variants {
part1_variants!(construct_variants) part1_variants!(construct_variants)
} }
@ -99,7 +99,7 @@ fn part2(input: &str) -> u64 {
} }
helper::tests! { helper::tests! {
day2 Day2; day02 Day02;
part1 { part1 {
small => 8; small => 8;
default => 1931; default => 1931;

3
2023/day02/src/main.rs Normal file
View file

@ -0,0 +1,3 @@
fn main() {
day02::main();
}

View file

@ -1,5 +1,5 @@
[package] [package]
name = "day3" name = "day03"
version = "0.1.0" version = "0.1.0"
edition = "2021" edition = "2021"

View file

@ -0,0 +1,3 @@
fn main() {
day03::bench();
}

View file

@ -3,13 +3,13 @@ use std::collections::HashMap;
use helper::Day; use helper::Day;
pub fn main() { pub fn main() {
helper::main::<Day3>(include_str!("../input.txt")); helper::main::<Day03>(include_str!("../input.txt"));
} }
struct Day3; struct Day03;
helper::define_variants! { helper::define_variants! {
day => crate::Day3; day => crate::Day03;
part1 { part1 {
basic => crate::part1; basic => crate::part1;
} }
@ -18,7 +18,7 @@ helper::define_variants! {
} }
} }
impl Day for Day3 { impl Day for Day03 {
fn part1() -> helper::Variants { fn part1() -> helper::Variants {
part1_variants!(construct_variants) part1_variants!(construct_variants)
} }
@ -128,7 +128,7 @@ fn part2(input: &str) -> u64 {
} }
helper::tests! { helper::tests! {
day3 Day3; day03 Day03;
part1 { part1 {
small => 4361; small => 4361;
default => 537832; default => 537832;

3
2023/day03/src/mainrs Normal file
View file

@ -0,0 +1,3 @@
fn main() {
day03::main();
}

View file

@ -1,3 +0,0 @@
fn main() {
day1::bench();
}

View file

@ -1,3 +0,0 @@
fn main() {
day1::main();
}

View file

@ -1,3 +0,0 @@
fn main() {
day2::bench();
}

View file

@ -1,3 +0,0 @@
fn main() {
day2::main();
}

View file

@ -1,3 +0,0 @@
fn main() {
day3::bench();
}

View file

@ -1,3 +0,0 @@
fn main() {
day3::main();
}

6
Cargo.lock generated
View file

@ -97,7 +97,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "baf0a07a401f374238ab8e2f11a104d2851bf9ce711ec69804834de8af45c7af" checksum = "baf0a07a401f374238ab8e2f11a104d2851bf9ce711ec69804834de8af45c7af"
[[package]] [[package]]
name = "day1" name = "day01"
version = "0.1.0" version = "0.1.0"
dependencies = [ dependencies = [
"divan", "divan",
@ -105,7 +105,7 @@ dependencies = [
] ]
[[package]] [[package]]
name = "day2" name = "day02"
version = "0.1.0" version = "0.1.0"
dependencies = [ dependencies = [
"divan", "divan",
@ -114,7 +114,7 @@ dependencies = [
] ]
[[package]] [[package]]
name = "day3" name = "day03"
version = "0.1.0" version = "0.1.0"
dependencies = [ dependencies = [
"divan", "divan",