solution: day 3

This commit is contained in:
YK 2024-11-19 21:45:46 +03:00
parent ad4d777770
commit be167e4b2c
2 changed files with 49 additions and 1 deletions

View File

@ -1,6 +1,6 @@
pub mod d1; pub mod d1;
pub mod d2; pub mod d2;
// pub mod d3; pub mod d3;
// pub mod d4; // pub mod d4;
// pub mod d5; // pub mod d5;
// pub mod d6; // pub mod d6;

48
src/days/d3.rs Normal file
View File

@ -0,0 +1,48 @@
use crate::prelude::*;
pub type I = &'static str;
pub type O = usize;
fn _silver (data: &I) -> O {
data.lines().filter(|line| {
let v = line.trim().split_ascii_whitespace().filter(|part| !part.is_empty()).map(|num| num.trim().parse::<u16>().unwrap()).collect_vec();
v[0] + v[1] > v[2] &&
v[1] + v[2] > v[0] &&
v[0] + v[2] > v[1]
}).count()
}
fn _gold (data: &I) -> O {
let mut counter = 0;
for chunk in &data.lines().chunks(3) {
let v = chunk.map(|line| line.trim().split_ascii_whitespace().filter(|part| !part.is_empty()).map(|num| num.trim().parse::<u16>().unwrap()).collect_vec()).collect_vec();
counter += (0usize..3).into_iter().filter(|&i| v[0][i] + v[1][i] > v[2][i] && v[1][i] + v[2][i] > v[0][i] && v[2][i] + v[0][i] > v[1][i]).count();
}
counter
}
#[cfg(test)]
mod test {
use super::*;
fn read () -> I {
inc!(3)
}
#[test]
fn silver () {
let data = read();
let ans = _silver(&data);
assert_eq!(ans, 993)
}
#[test]
fn gold () {
let data = read();
let ans = _gold(&data);
assert_eq!(ans, 1849)
}
}