diff options
author | Justin Wernick <justin@worthe-it.co.za> | 2022-04-19 20:29:56 +0200 |
---|---|---|
committer | Justin Wernick <justin@worthe-it.co.za> | 2022-04-19 20:29:56 +0200 |
commit | 34c0aa87fada4bf3bc75ff0493e0876e65289697 (patch) | |
tree | 599148bcbb7f05941edfac5ab3454a878129e997 /2017/src/bin/day_4.rs | |
parent | 174772b5b8d9f5bf5e3c8e8152adfd89f0e83f6b (diff) | |
parent | c99848b907d2d63577ffdc81fc11a77e4d328a92 (diff) |
Merge branch '2017-main'
Diffstat (limited to '2017/src/bin/day_4.rs')
-rw-r--r-- | 2017/src/bin/day_4.rs | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/2017/src/bin/day_4.rs b/2017/src/bin/day_4.rs new file mode 100644 index 0000000..a9a098a --- /dev/null +++ b/2017/src/bin/day_4.rs @@ -0,0 +1,37 @@ +extern crate advent_of_code_2017; +use advent_of_code_2017::*; + +fn main() { + let args = AdventArgs::init(); + + let valid_count = args.input.iter() + .map(|line| { + let words = line.split_whitespace().map(|x| x.to_string()).collect::<Vec<String>>(); + if args.part == 1 { + let mut deduped_words = words.clone(); + deduped_words.sort(); + deduped_words.dedup(); + words.len() == deduped_words.len() + } else { + !words.iter().enumerate().any(|(i, word1)| { + words.iter().enumerate().any(|(j, word2)| { + i != j && is_anagram(word1, word2) + }) + }) + } + }) + .filter(|&valid| valid) + .count(); + + println!("Valid count: {}", valid_count); +} + +fn is_anagram(word1: &str, word2: &str) -> bool { + let mut chars1 = word1.chars().collect::<Vec<_>>(); + chars1.sort(); + let mut chars2 = word2.chars().collect::<Vec<_>>(); + chars2.sort(); + + chars1.len() == chars2.len() && + chars1.iter().zip(chars2.iter()).all(|(c1, c2)| c1 == c2) +} |