rust: Improve benchmarks and optimize day 6 a little
This commit is contained in:
parent
a4dda171b5
commit
ee741775fe
3 changed files with 23 additions and 20 deletions
32
README.md
32
README.md
|
@ -30,7 +30,7 @@ Days 6 and 12 are missing because I did them in IPython and never bothered putti
|
||||||
| 22 | | ✔️ | |
|
| 22 | | ✔️ | |
|
||||||
| 23 | ✔️ | ✔️ | |
|
| 23 | ✔️ | ✔️ | |
|
||||||
| 24 | | ✔️ | |
|
| 24 | | ✔️ | |
|
||||||
| 25 | | | |
|
| 25 | ✔️ | | |
|
||||||
|
|
||||||
|
|
||||||
## Benchmarks (Rust)
|
## Benchmarks (Rust)
|
||||||
|
@ -39,29 +39,29 @@ I'm somewhat trying to do the <1 second challenge, but I've been a bit short on
|
||||||
|
|
||||||
| Day | Time |
|
| Day | Time |
|
||||||
| ---------: | -----------: |
|
| ---------: | -----------: |
|
||||||
| 1 | 111.14µs |
|
| 1 | 112.46µs |
|
||||||
| 2 | 110.91µs |
|
| 2 | 113.41µs |
|
||||||
| 3 | 58.66µs |
|
| 3 | 60.96µs |
|
||||||
| 4 | 280.38µs |
|
| 4 | 286.32µs |
|
||||||
| 5 | 65.60µs |
|
| 5 | 73.25µs |
|
||||||
| 6 | - |
|
| 6 | 78.59µs |
|
||||||
| 7 | - |
|
| 7 | - |
|
||||||
| 8 | 168.35µs |
|
| 8 | 170.56µs |
|
||||||
| 9 | 45.37µs |
|
| 9 | 46.69µs |
|
||||||
| 10 | - |
|
| 10 | - |
|
||||||
| 11 | - |
|
| 11 | - |
|
||||||
| 12 | - |
|
| 12 | - |
|
||||||
| 13 | - |
|
| 13 | - |
|
||||||
| 14 | - |
|
| 14 | - |
|
||||||
| 15 | 475441.39µs |
|
| 15 | 459975.24µs |
|
||||||
| 16 | 338.97µs |
|
| 16 | 344.11µs |
|
||||||
| 17 | 69548.73µs |
|
| 17 | 70782.00µs |
|
||||||
| 18 | - |
|
| 18 | - |
|
||||||
| 19 | 398.30µs |
|
| 19 | 403.49µs |
|
||||||
| 20 | - |
|
| 20 | - |
|
||||||
| 21 | - |
|
| 21 | - |
|
||||||
| 22 | - |
|
| 22 | - |
|
||||||
| 23 | 196018.58µs |
|
| 23 | 195819.54µs |
|
||||||
| 24 | - |
|
| 24 | - |
|
||||||
| 25 | 26280.61µs |
|
| 25 | 26266.60µs |
|
||||||
| **Total:** | 768.867ms |
|
| **Total:** | 754.533ms |
|
||||||
|
|
|
@ -13,7 +13,7 @@ pub fn run(print: bool) -> Duration {
|
||||||
let mut part1 = 0;
|
let mut part1 = 0;
|
||||||
let mut part2 = 0;
|
let mut part2 = 0;
|
||||||
|
|
||||||
for group in file_string.trim().split("\n\n") {
|
for group in file_string.split("\n\n") {
|
||||||
let mut set = 0u32;
|
let mut set = 0u32;
|
||||||
for c in group.chars().filter(|c| c.is_alphabetic()) {
|
for c in group.chars().filter(|c| c.is_alphabetic()) {
|
||||||
set |= 1 << (c as usize - 'a' as usize);
|
set |= 1 << (c as usize - 'a' as usize);
|
||||||
|
@ -29,7 +29,9 @@ pub fn run(print: bool) -> Duration {
|
||||||
line_set |= 1 << (c as usize - 'a' as usize);
|
line_set |= 1 << (c as usize - 'a' as usize);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if line_set != 0 {
|
||||||
set &= line_set;
|
set &= line_set;
|
||||||
|
}
|
||||||
part2 += count_bits(set);
|
part2 += count_bits(set);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -73,12 +73,13 @@ fn main() {
|
||||||
}
|
}
|
||||||
|
|
||||||
let repetitions =
|
let repetitions =
|
||||||
5000.min((Duration::new(2, 0).as_nanos() / first_run.as_nanos()) as u32);
|
100000.min((Duration::new(5, 0).as_nanos() / first_run.as_nanos()) as u32);
|
||||||
|
|
||||||
let mut elapsed = Duration::new(0, 0);
|
let mut elapsed = Duration::new(0, 0);
|
||||||
for _ in 0..repetitions {
|
for _ in 0..repetitions {
|
||||||
elapsed += days[day](false) / repetitions;
|
elapsed += days[day](false);
|
||||||
}
|
}
|
||||||
|
elapsed /= repetitions;
|
||||||
println!("| {:>2} | {:>10.2}µs |", day + 1, elapsed.as_secs_f64() * 1_000_000.0);
|
println!("| {:>2} | {:>10.2}µs |", day + 1, elapsed.as_secs_f64() * 1_000_000.0);
|
||||||
total += elapsed;
|
total += elapsed;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue