1
0

Added Day 6 part 2. Take window size as a const argument

This commit is contained in:
Ishan Jain 2022-12-06 11:12:26 +05:30
parent 4541a4aef2
commit 59f7db787d
Signed by: ishan
GPG Key ID: 0506DB2A1CC75C27

View File

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