2020: day06: cleanup
This commit is contained in:
parent
60715cad1a
commit
62d5e5b6c0
|
@ -41,12 +41,7 @@ fn part1(input: &str) -> aoc::Result<usize> {
|
||||||
|
|
||||||
Ok(groups
|
Ok(groups
|
||||||
.iter()
|
.iter()
|
||||||
.map(|group| {
|
.map(|group| group.unique_positive_answers().len())
|
||||||
group.answers.iter().fold(HashSet::new(), |set, answers| {
|
|
||||||
set.union(answers).copied().collect()
|
|
||||||
})
|
|
||||||
})
|
|
||||||
.map(|set| set.len())
|
|
||||||
.sum())
|
.sum())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -55,16 +50,7 @@ fn part2(input: &str) -> aoc::Result<usize> {
|
||||||
|
|
||||||
Ok(groups
|
Ok(groups
|
||||||
.iter()
|
.iter()
|
||||||
.map(|group| {
|
.map(|group| group.common_positive_answers().len())
|
||||||
group
|
|
||||||
.answers
|
|
||||||
.iter()
|
|
||||||
.skip(1)
|
|
||||||
.fold(group.answers[0].clone(), |set, answers| {
|
|
||||||
set.intersection(answers).copied().collect()
|
|
||||||
})
|
|
||||||
})
|
|
||||||
.map(|set| set.len())
|
|
||||||
.sum())
|
.sum())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -72,6 +58,23 @@ struct Group {
|
||||||
answers: Vec<HashSet<u8>>,
|
answers: Vec<HashSet<u8>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl Group {
|
||||||
|
fn unique_positive_answers(&self) -> HashSet<u8> {
|
||||||
|
self.answers.iter().fold(HashSet::new(), |set, answers| {
|
||||||
|
set.union(answers).copied().collect()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
fn common_positive_answers(&self) -> HashSet<u8> {
|
||||||
|
self.answers
|
||||||
|
.iter()
|
||||||
|
.skip(1)
|
||||||
|
.fold(self.answers[0].clone(), |set, answers| {
|
||||||
|
set.intersection(answers).copied().collect()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use super::*;
|
use super::*;
|
||||||
|
|
Loading…
Reference in a new issue