feat: implement day 06
This commit is contained in:
parent
f165c8fa66
commit
39aa33152f
104
src/day06.rs
Normal file
104
src/day06.rs
Normal file
@ -0,0 +1,104 @@
|
||||
use std::time::Instant;
|
||||
|
||||
pub fn execute_task01(content: &str) {
|
||||
let start = Instant::now();
|
||||
let product_correct_races = solve_01(content).unwrap();
|
||||
let duration = start.elapsed();
|
||||
|
||||
assert_eq!(1624896, product_correct_races);
|
||||
println!("Day06 - Task01 - Duration: {duration:?} - Product Correct Races: {}", product_correct_races)
|
||||
}
|
||||
|
||||
pub fn execute_task02(content: &str) {
|
||||
let start = Instant::now();
|
||||
let product_correct_races = solve_02(content).unwrap();
|
||||
let duration = start.elapsed();
|
||||
|
||||
//assert_eq!(322500873, product_correct_races);
|
||||
println!("Day06 - Task02 - Duration: {duration:?} - Correct Race: {}", product_correct_races)
|
||||
}
|
||||
|
||||
fn solve_01(content: &str) -> anyhow::Result<usize> {
|
||||
let result = content
|
||||
.lines()
|
||||
.map(|line| line
|
||||
.split_once(":")
|
||||
.unwrap()
|
||||
.1
|
||||
.trim())
|
||||
.map(|line| line
|
||||
.split(" ")
|
||||
.filter(|part| part.len() > 0)
|
||||
.map(|data| data.parse::<i64>().unwrap())
|
||||
.collect::<Vec<i64>>())
|
||||
.collect::<Vec<Vec<i64>>>();
|
||||
|
||||
let mut races = vec![];
|
||||
|
||||
for i in 0..result[0].len() {
|
||||
races.push((result[0][i].clone(), result[1][i].clone()))
|
||||
}
|
||||
|
||||
Ok(races
|
||||
.iter()
|
||||
.map(|(time, distance)| calc_possible_options(*time, *distance))
|
||||
.map(|options| options.len())
|
||||
.product())
|
||||
}
|
||||
|
||||
fn solve_02(content: &str) -> anyhow::Result<usize> {
|
||||
let result = content
|
||||
.lines()
|
||||
.map(|line| line
|
||||
.split_once(":")
|
||||
.unwrap()
|
||||
.1
|
||||
.trim())
|
||||
.map(|line| line
|
||||
.replace(" ", "")
|
||||
.parse::<i64>().unwrap())
|
||||
.collect::<Vec<i64>>();
|
||||
|
||||
let mut races = vec![(result[0].clone(), result[1].clone())];
|
||||
Ok(races
|
||||
.iter()
|
||||
.map(|(time, distance)| calc_possible_options(*time, *distance))
|
||||
.map(|options| options.len())
|
||||
.product())
|
||||
}
|
||||
|
||||
|
||||
fn calc_possible_options(time: i64, distance: i64) -> Vec<i64> {
|
||||
let mut data = vec![];
|
||||
// TODO Performance!!!
|
||||
for i in 1..time {
|
||||
let y = i * (time - i);
|
||||
if y > distance {
|
||||
data.push(i)
|
||||
} else if data.len() > 0 {
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
data
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_solve_01() {
|
||||
let example = r#"Time: 7 15 30
|
||||
Distance: 9 40 200"#;
|
||||
|
||||
let result = solve_01(example).unwrap();
|
||||
|
||||
assert_eq!(288, result);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_solve_02() {
|
||||
let example = r#"Time: 7 15 30
|
||||
Distance: 9 40 200"#;
|
||||
|
||||
let result = solve_02(example).unwrap();
|
||||
|
||||
assert_eq!(71503, result);
|
||||
}
|
2
src/input/day06/input.txt
Normal file
2
src/input/day06/input.txt
Normal file
@ -0,0 +1,2 @@
|
||||
Time: 56 97 78 75
|
||||
Distance: 546 1927 1131 1139
|
@ -4,12 +4,14 @@ mod day02;
|
||||
mod day03;
|
||||
mod day04;
|
||||
mod day05;
|
||||
mod day06;
|
||||
|
||||
const CONTENT01: &'static str = include_str!("input/day01/input.txt");
|
||||
const CONTENT02: &'static str = include_str!("input/day02/input.txt");
|
||||
const CONTENT03: &'static str = include_str!("input/day03/input.txt");
|
||||
const CONTENT04: &'static str = include_str!("input/day04/input.txt");
|
||||
const CONTENT05: &'static str = include_str!("input/day05/input.txt");
|
||||
const CONTENT06: &'static str = include_str!("input/day06/input.txt");
|
||||
|
||||
fn main() {
|
||||
day01::execute_task01(CONTENT01);
|
||||
@ -25,5 +27,8 @@ fn main() {
|
||||
day04::execute_task02(CONTENT04);
|
||||
println!();
|
||||
day05::execute_task01(CONTENT05);
|
||||
day05::execute_task02(CONTENT05);
|
||||
//day05::execute_task02(CONTENT05); // Performance Issues
|
||||
println!();
|
||||
day06::execute_task01(CONTENT06);
|
||||
day06::execute_task02(CONTENT06);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user