Functional Programming approach with relatively fast Rust code
usestd::fs;fnparse(toparse:&str)->i64{toparse.parse::<i64>().expect("Failed to parse number")}fnpart1(data:&Vec<(i64,i64)>,taken:&mutVec<i64>,index:i64,acc:i64,part2:bool)->i64{iftaken.contains(&index){if!part2{acc}else{0}}else{ifdata.get(indexasusize)==None{returnacc};letcidx=data[indexasusize];taken.push(index);matchcidx.0{2=>part1(&data,taken,index+1,acc+cidx.1,part2),0=>part1(&data,taken,index+cidx.1,acc,part2),_=>part1(&data,taken,index+1,acc,part2)}}}fnpart2(mutdata:Vec<(i64,i64)>)->i64{letdatalen:usize=data.len();foriin0..datalen{letcurrentelem=data[i];letswitch:i64=matchcurrentelem.0{0=>1,1=>0,_=>continue};data[i]=(switch,currentelem.1);letval=part1(&data,&mutVec::new(),0i64,0i64,true);data[i]=(currentelem.0,currentelem.1);ifval!=0{returnval};}return0;}fnmain(){letdata=fs::read_to_string("./day8.txt").unwrap().split("\n").collect::<Vec<_>>().iter().map(|x|{lettwoparts=x.split(" ").collect::<Vec<_>>();letpart1=matchtwoparts[0]{"jmp"=>0,"nop"=>1,"acc"=>2,_=>666};(part1,parse(twoparts[1]))}).collect::<Vec<_>>();letpart1answer=part1(&data,&mutVec::new(),0i64,0i64,false);letpart2answer=part2(data);println!("Answer for Part 1: {}\nAnswer for Part 2: {}",part1answer,part2answer);}
For further actions, you may consider blocking this person and/or reporting abuse
We're a place where coders share, stay up-to-date and grow their careers.
Functional Programming approach with relatively fast Rust code