advent-of-code/src/2023/06-wait-for-it/part_one.rs

51 lines
1.2 KiB
Rust

use std::fs::File;
use std::io::{self, BufRead};
use std::path::Path;
pub fn part_one() {
if let Ok(lines) = read_lines("./input.txt") {
let mut margin = 1;
let mut race_results: Vec<Vec<u32>> = Vec::new();
for line in lines {
race_results.push(process_line(&line.unwrap()));
}
for i in 0..race_results[0].len() {
margin *= process_race_result(race_results[0][i], race_results[1][i]);
}
println!("{:?}", margin);
}
}
fn process_line(s: &str) -> Vec<u32> {
let nums_str = s.split(':').collect::<Vec<&str>>()[1]
.split_whitespace()
.collect::<Vec<&str>>();
let nums: Vec<u32> = nums_str.iter().map(|s| s.parse::<u32>().unwrap()).collect();
return nums;
}
fn process_race_result(time: u32, distance: u32) -> u32 {
let mut win_count = 0;
for i in 0..time {
if i * (time - i) > distance {
win_count += 1;
}
}
return win_count;
}
fn read_lines<P>(filename: P) -> io::Result<io::Lines<io::BufReader<File>>>
where
P: AsRef<Path>,
{
let file = File::open(filename)?;
Ok(io::BufReader::new(file).lines())
}