summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJustin Worthe <justin@worthe-it.co.za>2017-12-04 07:18:46 +0200
committerJustin Worthe <justin@worthe-it.co.za>2017-12-04 07:18:46 +0200
commitf1aa1ef9471d98c5422a02a1077d34865bbe5ee9 (patch)
tree209a7f7dc5eb8b52aa8d8594efb86c07dc6e4158 /src
parent5d230e12f65b816881d084b8fbe2c52070105ceb (diff)
Day 4: passphrase anagrams
Diffstat (limited to 'src')
-rw-r--r--src/bin/day_4.rs37
1 files changed, 37 insertions, 0 deletions
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::<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)
+}