1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
use crate::input::Input;
pub fn solve(input: &mut Input) -> Result<usize, String> {
let anagrams_are_equal = input.is_part_two();
Ok(input
.text
.lines()
.filter(|passphrase| {
let mut words: Vec<Vec<char>> = passphrase
.split_ascii_whitespace()
.map(|word| {
let mut chars: Vec<char> = word.chars().collect();
if anagrams_are_equal {
chars.sort_unstable();
}
chars
})
.collect();
words.sort();
let initial_len = words.len();
words.dedup();
initial_len == words.len()
})
.count())
}
#[test]
fn tests() {
use crate::input::{test_part_one, test_part_two};
let real_input = include_str!("day04_input.txt");
test_part_one!(real_input => 325);
test_part_two!(real_input => 119);
}