day 3, part 1 done
This commit is contained in:
parent
9b62fa0d92
commit
4ae6b3cb7f
2 changed files with 39 additions and 0 deletions
38
2022-aoc/src/d3.rs
Normal file
38
2022-aoc/src/d3.rs
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
use std::collections::{HashMap, 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) {
|
||||||
|
*item as u32 - 96
|
||||||
|
} else {
|
||||||
|
*item as u32 - 38
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[aoc_generator(day3, part1)]
|
||||||
|
fn parse_input(input: &str) -> Vec<Contents> {
|
||||||
|
let mut out = Vec::with_capacity(input.len());
|
||||||
|
for line in input.lines() {
|
||||||
|
let half_len = line.len() / 2;
|
||||||
|
let lo = HashSet::from_iter(line[0..half_len].chars());
|
||||||
|
let hi = HashSet::from_iter(line[half_len..].chars());
|
||||||
|
out.push((lo, hi));
|
||||||
|
}
|
||||||
|
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
|
out
|
||||||
|
}
|
|
@ -2,5 +2,6 @@ use aoc_runner_derive::aoc_lib;
|
||||||
|
|
||||||
mod d1;
|
mod d1;
|
||||||
mod d2;
|
mod d2;
|
||||||
|
mod d3;
|
||||||
|
|
||||||
aoc_lib! { year = 2022 }
|
aoc_lib! { year = 2022 }
|
||||||
|
|
Loading…
Reference in a new issue