diff options
author | Santo Cariotti <santo@dcariotti.me> | 2023-05-03 15:07:25 +0200 |
---|---|---|
committer | Santo Cariotti <santo@dcariotti.me> | 2023-05-03 15:07:25 +0200 |
commit | 350002299370477a0b25dc6506e178f7c1ef8bf7 (patch) | |
tree | a18c83215804a669fb212e7d010770e1748a3a07 /2022/day6/src | |
parent | 2e7401338f8f13ba7584f5ce54e8e660c8a49cd4 (diff) |
Add day 6
Diffstat (limited to '2022/day6/src')
-rw-r--r-- | 2022/day6/src/lib.rs | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/2022/day6/src/lib.rs b/2022/day6/src/lib.rs new file mode 100644 index 0000000..76acb53 --- /dev/null +++ b/2022/day6/src/lib.rs @@ -0,0 +1,67 @@ +pub fn part(input: &str, m: usize) -> usize { + let n = input.len(); + + for i in 0..n { + let s = &input[i..i + m]; + let mut check = false; + if s.trim().len() < m { + break; + } + + 'o: for j in 0..m { + for k in 0..m { + if j == k { + continue; + } + + if s.chars().nth(j) == s.chars().nth(k) { + check = true; + break 'o; + } + } + } + + if !check { + return i + m; + } + } + + 0 +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_example() { + let input = include_str!("../example.txt"); + let result = part(input, 4); + + assert_eq!(result, 5); + } + + #[test] + fn test_input() { + let input = include_str!("../input.txt"); + let result = part(input, 4); + + assert_eq!(result, 1779); + } + + #[test] + fn test_example2() { + let input = include_str!("../example.txt"); + let result = part(input, 14); + + assert_eq!(result, 23); + } + + #[test] + fn test_input2() { + let input = include_str!("../input.txt"); + let result = part(input, 14); + + assert_eq!(result, 23); + } +} |