Skip Navigation

Rust Day 6 solution, I feel like a god rn

I messed around in desmos for like 20 mins trying to find an algebraic solution to day 6 and made this. I feel as if this is the best way to solve the problem by graphing f(x) = (x-max_time/2)^2. Finding its y-intercept, finding its vertex (max_time/2) and then finding the minimum x needed to get the max distance by solving for max_distance = f(x).

fn main() {
    let mut raw_input = include_str!("input.txt")
        .lines()
        .map(|f| {

        f.split_ascii_whitespace()
        .skip(1)
        .collect::<String>()
        .parse::<usize>()
        .unwrap()
        
        //for part 1, first parse then collect to a Vec<&str>

    }) ;

    let max_time = raw_input.next().unwrap();
    let max_distance = raw_input.next().unwrap();

    print!("{}", determine_range(max_time, max_distance));

    //let max_times = raw_input.next().unwrap();
    //let max_distances = raw_input.next().unwrap();

    // let races = (0..max_times.len()).map(|i| {
    //     determine_range(max_times[i], max_distances[i])
    // });

    // let total = races.reduce(|acc,x| x*acc).unwrap();
}

fn determine_range(max_time: usize, max_dist: usize) -> f64 {
    let vertex = max_time as f64/2.0;
    let min_y = vertex * vertex - max_dist as f64;
    let min_x = vertex - min_y.sqrt()+ 0.001;

    let mut res = 2.0 * ( (vertex-0.001).floor() - min_x.ceil() + 1.0);
    if vertex.fract() == 0.0 {
        res+=1.0;
    }
    res
}
1
1 comments