From 59f7db787da5a074a2a58b4fd09bf491b2ceb4b6 Mon Sep 17 00:00:00 2001 From: Ishan Jain Date: Tue, 6 Dec 2022 11:12:26 +0530 Subject: [PATCH] Added Day 6 part 2. Take window size as a const argument --- src/main.rs | 32 ++++++++++++++++++++++---------- 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/src/main.rs b/src/main.rs index 7b8384d..0546b2c 100644 --- a/src/main.rs +++ b/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(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 + ); }