Added Day 6 part 2. Take window size as a const argument
This commit is contained in:
parent
4541a4aef2
commit
59f7db787d
32
src/main.rs
32
src/main.rs
|
@ -14,16 +14,16 @@ fn parse(input: &[u8]) -> &[u8] {
|
||||||
fn main() {
|
fn main() {
|
||||||
for input in INPUTS.iter() {
|
for input in INPUTS.iter() {
|
||||||
let output = parse(input);
|
let output = parse(input);
|
||||||
let score = solution(output);
|
let score = solution::<14>(output);
|
||||||
|
|
||||||
println!("{}", score);
|
println!("{}", score);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn solution(input: &[u8]) -> usize {
|
fn solution<const N: usize>(input: &[u8]) -> usize {
|
||||||
let mut buffer = [0; 26];
|
let mut buffer = [0; 26];
|
||||||
|
|
||||||
for &c in input.iter().take(4) {
|
for &c in input.iter().take(N) {
|
||||||
buffer[(c - b'a') as usize] += 1;
|
buffer[(c - b'a') as usize] += 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -31,10 +31,10 @@ fn solution(input: &[u8]) -> usize {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
for i in 4..input.len() {
|
for i in N..input.len() {
|
||||||
let c = input[i];
|
let c = input[i];
|
||||||
buffer[(c - b'a') as usize] += 1;
|
buffer[(c - b'a') as usize] += 1;
|
||||||
let last = input[i - 4];
|
let last = input[i - N];
|
||||||
buffer[(last - b'a') as usize] -= 1;
|
buffer[(last - b'a') as usize] -= 1;
|
||||||
|
|
||||||
if buffer.iter().all(|&c| c == 0 || c == 1) {
|
if buffer.iter().all(|&c| c == 0 || c == 1) {
|
||||||
|
@ -49,15 +49,27 @@ fn solution(input: &[u8]) -> usize {
|
||||||
fn solution_bench(b: &mut test::Bencher) {
|
fn solution_bench(b: &mut test::Bencher) {
|
||||||
b.iter(|| {
|
b.iter(|| {
|
||||||
let input = parse(INPUTS[1]);
|
let input = parse(INPUTS[1]);
|
||||||
let result = solution(input);
|
let result = solution::<14>(input);
|
||||||
test::black_box(result);
|
test::black_box(result);
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn tests() {
|
fn tests() {
|
||||||
assert_eq!(solution("bvwbjplbgvbhsrlpgdmjqwftvncz".as_bytes()), 5);
|
assert_eq!(
|
||||||
assert_eq!(solution("nppdvjthqldpwncqszvftbrmjlhg".as_bytes()), 6);
|
solution::<14>("bvwbjplbgvbhsrlpgdmjqwftvncz".as_bytes()),
|
||||||
assert_eq!(solution("nznrnfrfntjfmvfwmzdfjlvtqnbhcprsg".as_bytes()), 10);
|
23
|
||||||
assert_eq!(solution("zcfzfwzzqfrljwzlrfnpqdbhtmscgvjw".as_bytes()), 11);
|
);
|
||||||
|
assert_eq!(
|
||||||
|
solution::<14>("nppdvjthqldpwncqszvftbrmjlhg".as_bytes()),
|
||||||
|
23
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
solution::<14>("nznrnfrfntjfmvfwmzdfjlvtqnbhcprsg".as_bytes()),
|
||||||
|
29
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
solution::<14>("zcfzfwzzqfrljwzlrfnpqdbhtmscgvjw".as_bytes()),
|
||||||
|
26
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user