From c61f28a057b4b44119bf266675bc7a942b774ac5 Mon Sep 17 00:00:00 2001 From: Burnus Date: Sun, 14 May 2023 13:33:59 +0200 Subject: [PATCH] Cleanup for 2022 day 6: Turned into a lib and introduced Options instead of panicing --- 2022/day06-turning_trouble/src/lib.rs | 41 +++++++++++++++++ 2022/day06-turning_trouble/src/main.rs | 46 ------------------- .../tests/{input => challenge_input} | 0 3 files changed, 41 insertions(+), 46 deletions(-) create mode 100644 2022/day06-turning_trouble/src/lib.rs delete mode 100644 2022/day06-turning_trouble/src/main.rs rename 2022/day06-turning_trouble/tests/{input => challenge_input} (100%) diff --git a/2022/day06-turning_trouble/src/lib.rs b/2022/day06-turning_trouble/src/lib.rs new file mode 100644 index 0000000..43911c9 --- /dev/null +++ b/2022/day06-turning_trouble/src/lib.rs @@ -0,0 +1,41 @@ +fn find_start_marker(message: &Vec, distinct_character_count: usize) -> Option { + 'char_iterator: for index in distinct_character_count-1..message.len() { + let mut found: Vec = Vec::with_capacity(distinct_character_count); + for offset in 0..distinct_character_count { + let this_char = message[index+offset+1-distinct_character_count]; + if found.contains(&this_char) { continue 'char_iterator; } + found.push(this_char); + } + return Some(index+1); + } + None +} + +pub fn run(input: &str) -> (Option, Option) { + let chars = input.chars().collect(); + let first = find_start_marker(&chars, 4); + let second = find_start_marker(&chars, 14); + (first, second) +} + +#[cfg(test)] +mod tests { + use super::*; + use std::fs::read_to_string; + + fn read_file(name: &str) -> String { + read_to_string(name).expect(&format!("Unable to read file: {name}")[..]).trim().to_string() + } + + #[test] + fn test_sample() { + let sample_input = read_file("tests/sample_input"); + assert_eq!(run(&sample_input), (Some(7), Some(19))); + } + + #[test] + fn test_challenge() { + let challenge_input = read_file("tests/challenge_input"); + assert_eq!(run(&challenge_input), (Some(1702), Some(3559))); + } +} diff --git a/2022/day06-turning_trouble/src/main.rs b/2022/day06-turning_trouble/src/main.rs deleted file mode 100644 index 31abdc9..0000000 --- a/2022/day06-turning_trouble/src/main.rs +++ /dev/null @@ -1,46 +0,0 @@ -use std::fs; - -fn read_file(path: &str) -> String { - fs::read_to_string(path) - .expect("File not Found") -} - -fn find_start_marker(message: &Vec, distinct_character_count: usize) -> usize { - 'char_iterator: for index in distinct_character_count-1..message.len() { - let mut found: Vec = Vec::with_capacity(distinct_character_count); - for offset in 0..distinct_character_count { - let this_char = message[index+offset+1-distinct_character_count]; - if found.contains(&this_char) { continue 'char_iterator; } - found.push(this_char); - } - return index+1; - } - panic!("No start found"); -} - -fn main() { - //let datastream = read_file("sample_input"); - let datastream = read_file("input"); - - let chars = datastream.chars().collect::>(); - println!("Start of Packet: {}", find_start_marker(&chars, 4)); - println!("Start of Message: {}", find_start_marker(&chars, 14)); -} - -#[test] -fn sample_input() { - let datastream = read_file("tests/sample_input"); - - let chars = datastream.chars().collect::>(); - assert_eq!(find_start_marker(&chars, 4), 7); - assert_eq!(find_start_marker(&chars, 14), 19); -} - -#[test] -fn challenge_input() { - let datastream = read_file("tests/input"); - - let chars = datastream.chars().collect::>(); - assert_eq!(find_start_marker(&chars, 4), 1702); - assert_eq!(find_start_marker(&chars, 14), 3559); -} diff --git a/2022/day06-turning_trouble/tests/input b/2022/day06-turning_trouble/tests/challenge_input similarity index 100% rename from 2022/day06-turning_trouble/tests/input rename to 2022/day06-turning_trouble/tests/challenge_input