part 2 done
This commit is contained in:
parent
4ae6b3cb7f
commit
ad309f5b33
1 changed files with 29 additions and 9 deletions
|
@ -1,11 +1,11 @@
|
|||
use std::collections::{HashMap, HashSet};
|
||||
use std::collections::HashSet;
|
||||
|
||||
use aoc_runner_derive::{aoc as aoc_run, aoc_generator};
|
||||
|
||||
type Contents = (HashSet<char>, HashSet<char>);
|
||||
|
||||
fn get_priority(item: &char) -> u32 {
|
||||
if ('a'..='z').contains(item) {
|
||||
if item.is_ascii_lowercase() {
|
||||
*item as u32 - 96
|
||||
} else {
|
||||
*item as u32 - 38
|
||||
|
@ -25,14 +25,34 @@ fn parse_input(input: &str) -> Vec<Contents> {
|
|||
out
|
||||
}
|
||||
|
||||
#[aoc_run(day3, part1)]
|
||||
fn part1(sacks: &[Contents]) -> u32 {
|
||||
let mut out = 0;
|
||||
for sack in sacks {
|
||||
let (lo, hi) = sack;
|
||||
let common = lo.intersection(hi).into_iter().next().unwrap();
|
||||
out += get_priority(common);
|
||||
#[aoc_generator(day3, part2)]
|
||||
fn parse_input2(input: &str) -> Vec<u32> {
|
||||
let mut out = Vec::with_capacity(input.len() / 3);
|
||||
let lines: Vec<&str> = input.lines().collect();
|
||||
for group in lines.chunks_exact(3) {
|
||||
let [x, y, z] = group else {panic!()};
|
||||
let x: HashSet<char> = HashSet::from_iter(x.chars());
|
||||
let y = HashSet::from_iter(y.chars());
|
||||
let z = HashSet::from_iter(z.chars());
|
||||
let xy: HashSet<char> = x.intersection(&y).copied().collect();
|
||||
let common = xy.intersection(&z).next().unwrap();
|
||||
out.push(get_priority(common));
|
||||
}
|
||||
|
||||
out
|
||||
}
|
||||
|
||||
#[aoc_run(day3, part1)]
|
||||
fn part1(sacks: &[Contents]) -> u32 {
|
||||
let mut out = 0;
|
||||
for (lo, hi) in sacks {
|
||||
let common = lo.intersection(hi).next().unwrap();
|
||||
out += get_priority(common);
|
||||
}
|
||||
out
|
||||
}
|
||||
|
||||
#[aoc_run(day3, part2)]
|
||||
fn p2(items: &[u32]) -> u32 {
|
||||
items.iter().sum()
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue