From f1aa1ef9471d98c5422a02a1077d34865bbe5ee9 Mon Sep 17 00:00:00 2001 From: Justin Worthe Date: Mon, 4 Dec 2017 07:18:46 +0200 Subject: Day 4: passphrase anagrams --- src/bin/day_4.rs | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 src/bin/day_4.rs (limited to 'src') diff --git a/src/bin/day_4.rs b/src/bin/day_4.rs new file mode 100644 index 0000000..a9a098a --- /dev/null +++ b/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::>(); + 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::>(); + chars1.sort(); + let mut chars2 = word2.chars().collect::>(); + chars2.sort(); + + chars1.len() == chars2.len() && + chars1.iter().zip(chars2.iter()).all(|(c1, c2)| c1 == c2) +} -- cgit v1.2.3