• [^] # Re: Maths

    Posté par . En réponse au message Advent of Code 2023, day 6. Évalué à 2. Dernière modification le 10 décembre 2023 à 16:35.

    J'ai enfin le temps d'avancer. Comme toi j'ai même hésité à coder. Pour la diversité je poste ma réponse rust

    useregex::Regex;
    usestd::env;
    usestd::io::{self,BufRead};
    fn course(time: u64,distance: u64)-> u64 {
    letdelta=(time*time)-(4*distance);
    ifdelta<=0{
    return0;
    }else{
    letsqrt=(deltaasf64).sqrt();
    lett=timeasf64;
    letx1=(-t+sqrt)/-2f64;
    letx2=(-t-sqrt)/-2f64;
    letmutmin=x1.abs().ceil()asu64;
    letmutmax=x2.abs().floor()asu64;
    if(time-min)*min==distance{
    min+=1;
    }
    if(time-max)*max==distance{
    max-=1;
    }
    returnmax-min+1;
    }
    }
    fn part1()-> u64 {
    lettoken_pattern=Regex::new(r"(\d+)").unwrap();
    letmuttimes: Vec<u64>=Vec::new();
    letmutdistances: Vec<u64>=Vec::new();
    forlineinio::stdin().lock().lines(){
    letl=line.unwrap();
    ifl.starts_with("Time:"){
    for(_,[seed])intoken_pattern.captures_iter(&l).map(|c|c.extract()){
    times.push(seed.parse::<u64>().unwrap());
    }
    }elseifl.starts_with("Distance:"){
    for(_,[seed])intoken_pattern.captures_iter(&l).map(|c|c.extract()){
    distances.push(seed.parse::<u64>().unwrap());
    }
    }
    }
    letmutresult: u64 =1;
    for(time,distance)intimes.iter().zip(distances.iter()){
    letways=course(*time,*distance);
    result*=ways;
    }
    returnresult;
    }
    fn part2()-> u64 {
    lettoken_pattern=Regex::new(r"(\d+)").unwrap();
    letmuttimes="".to_owned();
    letmutdistances="".to_owned();
    forlineinio::stdin().lock().lines(){
    letl=line.unwrap();
    ifl.starts_with("Time:"){
    for(_,[seed])intoken_pattern.captures_iter(&l).map(|c|c.extract()){
    times.push_str(seed);
    }
    }elseifl.starts_with("Distance:"){
    for(_,[seed])intoken_pattern.captures_iter(&l).map(|c|c.extract()){
    distances.push_str(seed);
    }
    }
    }
    lettime=times.parse::<u64>().unwrap();
    letdistance=distances.parse::<u64>().unwrap();
    returncourse(time,distance);
    }
    fn main(){
    letargs: Vec<String>=env::args().collect();
    ifargs.len()>1&&args[1]=="part2"{
    println!("Part 2: {}",part2());
    }else{
    println!("Part 1: {}",part1());
    }
    }

    https://linuxfr.org/users/barmic/journaux/y-en-a-marre-de-ce-gros-troll