2022 rust day 3 part 2

This commit is contained in:
Maciej Jur 2022-12-03 12:17:57 +01:00
parent a14688f106
commit 62b15dfd86

View file

@ -1,3 +1,4 @@
#![allow(dead_code)]
use std::collections::HashSet; use std::collections::HashSet;
use crate::utils; use crate::utils;
@ -7,22 +8,43 @@ pub fn run() -> () {
println!("Day 1"); println!("Day 1");
println!("Part 1: {}", solve1(&data)); println!("Part 1: {}", solve1(&data));
// println!("Part 2: {}", solve2(&data)); println!("Part 2: {}", solve2(&data));
} }
fn solve1(data: &Vec<(HashSet<char>, HashSet<char>)>) -> i32 { fn solve1(data: &Vec<(HashSet<char>, HashSet<char>)>) -> i32 {
data.iter() data.iter()
.map(|(left, right)| { .map(|(left, right)| {
let char = *left.intersection(right).last().expect("Not found char") as i32; convert_char(*left.intersection(right).next().unwrap())
char - if char < 97 { 38 } else { 96 }
}) })
.sum() .sum()
} }
fn solve2(data: &Vec<Vec<i32>>) -> i32 { fn solve2(data: &Vec<(HashSet<char>, HashSet<char>)>) -> i32 {
2 data.iter()
.map(|(left, right)| left.union(right).cloned().collect())
.collect::<Vec<HashSet<_>>>()
.chunks_exact(3)
.map(|chunks| {
let char = {
let mut iter = chunks.iter().cloned();
iter.next()
.map(|set| {
iter.fold(set, |set1, set2| {
set1.intersection(&set2).cloned().collect()
})
})
.map(|x| *x.iter().next().unwrap())
.unwrap()
};
convert_char(char)
})
.sum()
} }
fn convert_char(char: char) -> i32 {
let char = char as i32;
char - if char < 97 { 38 } else { 96 }
}
fn parse_data(data: Vec<String>) -> Vec<(HashSet<char>, HashSet<char>)> { fn parse_data(data: Vec<String>) -> Vec<(HashSet<char>, HashSet<char>)> {
data.iter() data.iter()