rust: Improve benchmarks and optimize day 6 a little

This commit is contained in:
Sijmen 2020-12-26 00:33:18 +01:00
parent a4dda171b5
commit ee741775fe
Signed by: vijfhoek
GPG key ID: DAF7821E067D9C48
3 changed files with 23 additions and 20 deletions

View file

@ -30,7 +30,7 @@ Days 6 and 12 are missing because I did them in IPython and never bothered putti
| 22 | | ✔️ | |
| 23 | ✔️ | ✔️ | |
| 24 | | ✔️ | |
| 25 | | | |
| 25 | ✔️ | | |
## 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 |
| ---------: | -----------: |
| 1 | 111.14µs |
| 2 | 110.91µs |
| 3 | 58.66µs |
| 4 | 280.38µs |
| 5 | 65.60µs |
| 6 | - |
| 1 | 112.46µs |
| 2 | 113.41µs |
| 3 | 60.96µs |
| 4 | 286.32µs |
| 5 | 73.25µs |
| 6 | 78.59µs |
| 7 | - |
| 8 | 168.35µs |
| 9 | 45.37µs |
| 8 | 170.56µs |
| 9 | 46.69µs |
| 10 | - |
| 11 | - |
| 12 | - |
| 13 | - |
| 14 | - |
| 15 | 475441.39µs |
| 16 | 338.97µs |
| 17 | 69548.73µs |
| 15 | 459975.24µs |
| 16 | 344.11µs |
| 17 | 70782.00µs |
| 18 | - |
| 19 | 398.30µs |
| 19 | 403.49µs |
| 20 | - |
| 21 | - |
| 22 | - |
| 23 | 196018.58µs |
| 23 | 195819.54µs |
| 24 | - |
| 25 | 26280.61µs |
| **Total:** | 768.867ms |
| 25 | 26266.60µs |
| **Total:** | 754.533ms |

View file

@ -13,7 +13,7 @@ pub fn run(print: bool) -> Duration {
let mut part1 = 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;
for c in group.chars().filter(|c| c.is_alphabetic()) {
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);
}
}
set &= line_set;
if line_set != 0 {
set &= line_set;
}
part2 += count_bits(set);
}

View file

@ -73,12 +73,13 @@ fn main() {
}
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);
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);
total += elapsed;
}