diff options
| author | Reiner Herrmann <reiner@reiner-h.de> | 2022-08-28 00:06:44 +0200 |
|---|---|---|
| committer | Reiner Herrmann <reiner@reiner-h.de> | 2022-08-28 00:06:44 +0200 |
| commit | 18f4224927c44c472c6c519bc37cb65c8b352863 (patch) | |
| tree | a7fc77c8bf93fde4275dd9ef51da79edfd8093c0 /src | |
| parent | c2e25913a56bac4b0760febe0a2943e20c195d27 (diff) | |
day5
Diffstat (limited to 'src')
| -rw-r--r-- | src/bin/day5.rs | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/src/bin/day5.rs b/src/bin/day5.rs new file mode 100644 index 0000000..ea9a58b --- /dev/null +++ b/src/bin/day5.rs @@ -0,0 +1,85 @@ +fn main() { + let input = advent::read_lines(5); + println!("5a: {}", count_nice(&input, is_nice)); + println!("5b: {}", count_nice(&input, is_nice2)); +} + +fn is_nice(word: &str) -> bool { + let mut prev = ' '; + let mut vowel_count = 0; + let mut double_letter = false; + + for c in word.chars() { + if ['a', 'e', 'i', 'o', 'u'].contains(&c) { + vowel_count += 1; + } + if prev == c { + double_letter = true; + } + let pair = format!("{}{}", prev, c); + if ["ab".to_string(), "cd".to_string(), "pq".to_string(), "xy".to_string()].contains(&pair) { + return false; + } + + prev = c; + } + double_letter && vowel_count >= 3 +} + +fn has_two_pairs(word: &str) -> bool { + let mut prev = ' '; + + for c in word.chars() { + let pair = format!("{}{}", prev, c); + + if word.matches(&pair).count() > 1 { + return true; + } + + prev = c; + } + false +} + +fn has_one_letter_repeat(word: &str) -> bool { + let mut prev = ' '; + let mut prevprev = ' '; + + for c in word.chars() { + if c == prevprev { + return true; + } + prevprev = prev; + prev = c; + } + false +} + +fn is_nice2(word: &str) -> bool { + has_two_pairs(word) && has_one_letter_repeat(word) +} + +fn count_nice(input: &[String], f: fn(&str) -> bool) -> usize { + input.iter() + .filter(|&x| f(x)) + .count() +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test() { + assert!(is_nice("ugknbfddgicrmopn")); + assert!(is_nice("aaa")); + assert!(!is_nice("jchzalrnumimnmhp")); + assert!(!is_nice("haegwjzuvuyypxyu")); + assert!(!is_nice("dvszwmarrgswjxmb")); + + assert!(is_nice2("qjhvhtzxzqqjkmpb")); + assert!(is_nice2("xxyxx")); + assert!(!is_nice2("uurcxstgmygtbstg")); + assert!(!is_nice2("ieodomkazucvgmuy")); + } +} |
