optimized day 6 part 2 by replacing arrays with u32
This commit is contained in:
parent
59f7db787d
commit
94289d0c7a
21
src/main.rs
21
src/main.rs
|
@ -21,24 +21,15 @@ fn main() {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn solution<const N: usize>(input: &[u8]) -> usize {
|
fn solution<const N: usize>(input: &[u8]) -> usize {
|
||||||
let mut buffer = [0; 26];
|
for idx in 0..input.len() - N {
|
||||||
|
let mut buffer = 0u32;
|
||||||
|
|
||||||
for &c in input.iter().take(N) {
|
for &c in &input[idx..(idx + N)] {
|
||||||
buffer[(c - b'a') as usize] += 1;
|
buffer |= 1 << (c - b'a') as usize;
|
||||||
}
|
}
|
||||||
|
|
||||||
if buffer.iter().all(|&c| c == 0 || c == 1) {
|
if buffer.count_ones() as usize == N {
|
||||||
return 0;
|
return idx + N;
|
||||||
}
|
|
||||||
|
|
||||||
for i in N..input.len() {
|
|
||||||
let c = input[i];
|
|
||||||
buffer[(c - b'a') as usize] += 1;
|
|
||||||
let last = input[i - N];
|
|
||||||
buffer[(last - b'a') as usize] -= 1;
|
|
||||||
|
|
||||||
if buffer.iter().all(|&c| c == 0 || c == 1) {
|
|
||||||
return i + 1;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user