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 | | ✔️ | | | 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 |

View File

@ -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);
} }

View File

@ -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;
} }