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