2022 Day 3
This commit is contained in:
parent
488eb023a7
commit
7e4c852237
3 changed files with 69 additions and 0 deletions
16
2022/Cargo.lock
generated
16
2022/Cargo.lock
generated
|
|
@ -13,4 +13,20 @@ name = "aoc2022"
|
|||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"itertools",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "either"
|
||||
version = "1.8.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "90e5c1c8368803113bf0c9584fc495a58b86dc8a29edbf8fe877d21d9507e797"
|
||||
|
||||
[[package]]
|
||||
name = "itertools"
|
||||
version = "0.10.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473"
|
||||
dependencies = [
|
||||
"either",
|
||||
]
|
||||
|
|
|
|||
|
|
@ -5,3 +5,4 @@ edition = "2021"
|
|||
|
||||
[dependencies]
|
||||
anyhow = "1.0.66"
|
||||
itertools = "0.10.5"
|
||||
|
|
|
|||
52
2022/src/bin/day03.rs
Normal file
52
2022/src/bin/day03.rs
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
use std::collections::HashSet;
|
||||
|
||||
use itertools::Itertools;
|
||||
|
||||
const INPUT: &str = include_str!("../../input/day03.txt");
|
||||
|
||||
fn main() {
|
||||
println!("{}", part1(INPUT));
|
||||
println!("{}", part2(INPUT));
|
||||
}
|
||||
|
||||
fn part1(input: &str) -> usize {
|
||||
let mut sum = 0;
|
||||
for line in input.split('\n').filter(|l| !l.is_empty()) {
|
||||
let mid = line.len() / 2;
|
||||
|
||||
let l = &line[..mid];
|
||||
let r = &line[mid..];
|
||||
|
||||
let first: HashSet<char> = l.chars().collect();
|
||||
let second: HashSet<char> = r.chars().collect();
|
||||
|
||||
let shared = first.intersection(&second).next().unwrap();
|
||||
sum += priority(shared);
|
||||
}
|
||||
sum
|
||||
}
|
||||
|
||||
const ALPHABET: &str = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
|
||||
|
||||
fn priority(c: &char) -> usize {
|
||||
1 + ALPHABET.chars().position(|x| x == *c).unwrap_or_default()
|
||||
}
|
||||
|
||||
fn part2(input: &str) -> usize {
|
||||
let mut sum = 0;
|
||||
let lines = input.split('\n').filter(|l| !l.is_empty());
|
||||
for group in &lines.chunks(3) {
|
||||
let sets: Vec<HashSet<char>> = group
|
||||
.map(|rucksack| rucksack.chars().collect::<HashSet<char>>())
|
||||
.collect();
|
||||
|
||||
let mut shared = sets[0].clone();
|
||||
shared = shared.intersection(&sets[1]).cloned().collect();
|
||||
shared = shared.intersection(&sets[2]).cloned().collect();
|
||||
|
||||
let badge = shared.iter().next().unwrap();
|
||||
|
||||
sum += priority(badge);
|
||||
}
|
||||
sum
|
||||
}
|
||||
Loading…
Reference in a new issue