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() {
|
||||
for input in INPUTS.iter() {
|
||||
let output = parse(input);
|
||||
let score = solution(output);
|
||||
let score = solution::<14>(output);
|
||||
|
||||
println!("{}", score);
|
||||
}
|
||||
}
|
||||
|
||||
fn solution(input: &[u8]) -> usize {
|
||||
fn solution<const N: usize>(input: &[u8]) -> usize {
|
||||
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;
|
||||
}
|
||||
|
||||
|
@ -31,10 +31,10 @@ fn solution(input: &[u8]) -> usize {
|
|||
return 0;
|
||||
}
|
||||
|
||||
for i in 4..input.len() {
|
||||
for i in N..input.len() {
|
||||
let c = input[i];
|
||||
buffer[(c - b'a') as usize] += 1;
|
||||
let last = input[i - 4];
|
||||
let last = input[i - N];
|
||||
buffer[(last - b'a') as usize] -= 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) {
|
||||
b.iter(|| {
|
||||
let input = parse(INPUTS[1]);
|
||||
let result = solution(input);
|
||||
let result = solution::<14>(input);
|
||||
test::black_box(result);
|
||||
})
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn tests() {
|
||||
assert_eq!(solution("bvwbjplbgvbhsrlpgdmjqwftvncz".as_bytes()), 5);
|
||||
assert_eq!(solution("nppdvjthqldpwncqszvftbrmjlhg".as_bytes()), 6);
|
||||
assert_eq!(solution("nznrnfrfntjfmvfwmzdfjlvtqnbhcprsg".as_bytes()), 10);
|
||||
assert_eq!(solution("zcfzfwzzqfrljwzlrfnpqdbhtmscgvjw".as_bytes()), 11);
|
||||
assert_eq!(
|
||||
solution::<14>("bvwbjplbgvbhsrlpgdmjqwftvncz".as_bytes()),
|
||||
23
|
||||
);
|
||||
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