Day 02 optimizations + Day 03

This commit is contained in:
Daniel S. 2022-12-03 19:22:43 +01:00
parent 07251c2305
commit 4aaf8aca52
5 changed files with 52 additions and 10 deletions

View file

@ -8,3 +8,4 @@ edition = "2021"
[dependencies] [dependencies]
aoc-runner = "0.3.0" aoc-runner = "0.3.0"
aoc-runner-derive = "0.3.0" aoc-runner-derive = "0.3.0"
itertools = "0.10.5"

View file

@ -16,10 +16,9 @@ pub enum Outcome {
Draw, Draw,
} }
impl Outcome { impl Outcome {
fn other(&self, choice: &Choice) -> Choice { fn other(&self, choice: &Choice) -> Choice {
match (self,choice) { match (self, choice) {
(Outcome::Win, Choice::Rock) => Choice::Paper, (Outcome::Win, Choice::Rock) => Choice::Paper,
(Outcome::Win, Choice::Paper) => Choice::Scissors, (Outcome::Win, Choice::Paper) => Choice::Scissors,
(Outcome::Win, Choice::Scissors) => Choice::Rock, (Outcome::Win, Choice::Scissors) => Choice::Rock,
@ -64,12 +63,10 @@ impl Choice {
(Choice::Rock, Choice::Scissors) => Outcome::Win, (Choice::Rock, Choice::Scissors) => Outcome::Win,
(Choice::Paper, Choice::Rock) => Outcome::Win, (Choice::Paper, Choice::Rock) => Outcome::Win,
(Choice::Scissors, Choice::Paper) => Outcome::Win, (Choice::Scissors, Choice::Paper) => Outcome::Win,
(Choice::Rock, Choice::Rock) => Outcome::Draw,
(Choice::Paper, Choice::Paper) => Outcome::Draw,
(Choice::Scissors, Choice::Scissors) => Outcome::Draw,
(Choice::Rock, Choice::Paper) => Outcome::Loose, (Choice::Rock, Choice::Paper) => Outcome::Loose,
(Choice::Paper, Choice::Scissors) => Outcome::Loose, (Choice::Paper, Choice::Scissors) => Outcome::Loose,
(Choice::Scissors, Choice::Rock) => Outcome::Loose, (Choice::Scissors, Choice::Rock) => Outcome::Loose,
_ => Outcome::Draw,
} }
} }
} }
@ -113,9 +110,6 @@ pub fn solve_part1(input: &[(Choice, Choice)]) -> usize {
.sum() .sum()
} }
#[aoc(day2, part2)] #[aoc(day2, part2)]
pub fn solve_part2(input: &[(Choice, Choice)]) -> usize { pub fn solve_part2(input: &[(Choice, Choice)]) -> usize {
input input

46
src/day03.rs Normal file
View file

@ -0,0 +1,46 @@
use aoc_runner_derive::{aoc, aoc_generator};
use std::collections::HashSet;
#[aoc_generator(day3)]
pub fn input_generator(input: &str) -> Vec<Vec<char>> {
input.lines().map(|line| line.chars().collect()).collect()
}
#[aoc(day3, part1)]
pub fn solve_part1(input: &[Vec<char>]) -> usize {
let mut total: usize = 0;
for line in input {
let (a, b) = line.split_at(line.len() / 2);
let a: HashSet<&char> = a.iter().collect();
let b: HashSet<&char> = b.iter().collect();
total += a
.intersection(&b)
.map(|&&v| match v {
'a'..='z' => 1 + ((v as u8) - b'a') as usize,
'A'..='Z' => 27 + ((v as u8) - b'A') as usize,
_ => unreachable!(),
})
.sum::<usize>();
}
total
}
#[aoc(day3, part2)]
pub fn solve_part2(input: &[Vec<char>]) -> usize {
let mut total: usize = 0;
for chunk in input.chunks_exact(3) {
let chunk: HashSet<&char> = chunk
.iter()
.map(|v| v.iter().collect::<HashSet<&char>>())
.reduce(|a, b| a.intersection(&b).copied().collect())
.unwrap_or_default();
total += chunk
.iter()
.map(|&&v| match v {
'a'..='z' => 1 + ((v as u8) - b'a') as usize,
'A'..='Z' => 27 + ((v as u8) - b'A') as usize,
_ => unreachable!(),
})
.sum::<usize>();
}
total
}

View file

@ -1,6 +1,6 @@
use aoc_runner_derive::{aoc, aoc_generator}; use aoc_runner_derive::{aoc, aoc_generator};
#[aoc_generator(dayX)] #[aoc_generator(dayX)]
pub fn input_generator(input: &str) -> _ { pub fn input_generator(input: &str) -> usize {
todo!() todo!()
} }

View file

@ -1,4 +1,5 @@
use aoc_runner_derive::aoc_lib; use aoc_runner_derive::aoc_lib;
pub mod day01; pub mod day01;
pub mod day02; pub mod day02;
pub mod day03;
aoc_lib! { year = 2022 } aoc_lib! { year = 2022 }