feat: implement day04
This commit is contained in:
parent
e6d7480e7d
commit
f67485afc6
63
src/day04.rs
Normal file
63
src/day04.rs
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
use crate::utils;
|
||||||
|
|
||||||
|
pub fn execute_task01(content: &str) {
|
||||||
|
let vector = utils::convert_to_string_slice(&content);
|
||||||
|
let pairs: Vec<((i32, i32), (i32, i32))> = vector.iter().map(|line| convert_to_tuple(line)).collect();
|
||||||
|
|
||||||
|
let fully_pairs: usize = pairs
|
||||||
|
.into_iter()
|
||||||
|
.filter(|pair| is_fully_in_other(pair.0, pair.1))
|
||||||
|
.count();
|
||||||
|
|
||||||
|
println!("Day04 - Task01 - Sum of fully included pairs: {}", fully_pairs);
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn execute_task02(content: &str) {
|
||||||
|
let vector = utils::convert_to_string_slice(&content);
|
||||||
|
let pairs: Vec<((i32, i32), (i32, i32))> = vector.iter().map(|line| convert_to_tuple(line)).collect();
|
||||||
|
|
||||||
|
let fully_pairs: usize = pairs
|
||||||
|
.into_iter()
|
||||||
|
.filter(|pair| is_partial_in_other(pair.0, pair.1))
|
||||||
|
.count();
|
||||||
|
|
||||||
|
println!("Day04 - Task02 - Sum of partial included pairs: {}", fully_pairs);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
fn convert_to_tuple(line: &str) -> ((i32, i32), (i32, i32)) {
|
||||||
|
let pairs: Vec<(i32, i32)> = line
|
||||||
|
.split(",")
|
||||||
|
.map(|pair| {
|
||||||
|
let digits: Vec<i32> = pair.split("-").map(|digit| digit.parse::<i32>().unwrap()).collect();
|
||||||
|
return (digits[0], digits[1]);
|
||||||
|
})
|
||||||
|
.collect();
|
||||||
|
|
||||||
|
return (pairs[0], pairs[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
fn is_fully_in_other(first: (i32, i32), second: (i32,i32)) -> bool {
|
||||||
|
if first.0 <= second.0 && first.1 >= second.1 { // second is fully in first
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if second.0 <= first.0 && second.1 >= first.1 { // first is fully in second
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
fn is_partial_in_other(first: (i32, i32), second: (i32, i32)) -> bool {
|
||||||
|
if first.0 <= second.0 && first.1 >= second.0 { // 5-7, 6-9
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
if first.0 >= second.0 && first.0 <= second.1 { // 6-9, 5-7
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
1000
src/input/day04/input01
Normal file
1000
src/input/day04/input01
Normal file
File diff suppressed because it is too large
Load Diff
@ -2,10 +2,12 @@ mod utils;
|
|||||||
mod day01;
|
mod day01;
|
||||||
mod day02;
|
mod day02;
|
||||||
mod day03;
|
mod day03;
|
||||||
|
mod day04;
|
||||||
|
|
||||||
const CONTENT01: &'static str = include_str!("input/day01/input01");
|
const CONTENT01: &'static str = include_str!("input/day01/input01");
|
||||||
const CONTENT02: &'static str = include_str!("input/day02/input01");
|
const CONTENT02: &'static str = include_str!("input/day02/input01");
|
||||||
const CONTENT03: &'static str = include_str!("input/day03/input01");
|
const CONTENT03: &'static str = include_str!("input/day03/input01");
|
||||||
|
const CONTENT04: &'static str = include_str!("input/day04/input01");
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
day01::execute_task01(&CONTENT01);
|
day01::execute_task01(&CONTENT01);
|
||||||
@ -15,5 +17,8 @@ fn main() {
|
|||||||
day02::execute_task02(&CONTENT02);
|
day02::execute_task02(&CONTENT02);
|
||||||
|
|
||||||
day03::execute_task01(&CONTENT03);
|
day03::execute_task01(&CONTENT03);
|
||||||
day03::execute_task02(&CONTENT03)
|
day03::execute_task02(&CONTENT03);
|
||||||
|
|
||||||
|
day04::execute_task01(&CONTENT04);
|
||||||
|
day04::execute_task02(&CONTENT04)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user