Retourner au contenu associé (entrée de forum : Advent of Code 2023, day 6)
Posté par barmic 🦦 le 10 décembre 2023 à 16:35. 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
AltStyle によって変換されたページ (->オリジナル) / アドレス: モード: デフォルト 音声ブラウザ ルビ付き 配色反転 文字拡大 モバイル
[^] # Re: Maths
Posté par barmic 🦦 . 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
https://linuxfr.org/users/barmic/journaux/y-en-a-marre-de-ce-gros-troll