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() {
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
);
}