Solution day 2
							parent
							
								
									88dd4fe6a7
								
							
						
					
					
						commit
						da050ab5da
					
				
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| 
						 | 
					@ -0,0 +1,54 @@
 | 
				
			||||||
 | 
					use std::fs::File;
 | 
				
			||||||
 | 
					use std::io;
 | 
				
			||||||
 | 
					use std::io::BufRead;
 | 
				
			||||||
 | 
					use std::io::BufReader;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// Parses a string & returns its effect on the horizontal & vertical position/aim
 | 
				
			||||||
 | 
					pub fn parse_ins(s: &str) -> (i32, i32) {
 | 
				
			||||||
 | 
					    let mut parts = s.split_ascii_whitespace();
 | 
				
			||||||
 | 
					    let command = parts.next().unwrap();
 | 
				
			||||||
 | 
					    let num: i32 = parts.next().unwrap().parse().unwrap();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    match command {
 | 
				
			||||||
 | 
					        "forward" => (num, 0),
 | 
				
			||||||
 | 
					        "down" => (0, num),
 | 
				
			||||||
 | 
					        "up" => (0, -num),
 | 
				
			||||||
 | 
					        _ => unimplemented!(),
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pub fn part1() -> io::Result<i32> {
 | 
				
			||||||
 | 
					    let file = File::open("input/day2")?;
 | 
				
			||||||
 | 
					    let reader = BufReader::new(file);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    let mut forward = 0;
 | 
				
			||||||
 | 
					    let mut depth = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    for line in reader.lines() {
 | 
				
			||||||
 | 
					        let (f, d) = parse_ins(&line.unwrap());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        forward += f;
 | 
				
			||||||
 | 
					        depth += d;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    Ok(forward * depth)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pub fn part2() -> io::Result<i32> {
 | 
				
			||||||
 | 
					    let file = File::open("input/day2")?;
 | 
				
			||||||
 | 
					    let reader = BufReader::new(file);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    let mut forward = 0;
 | 
				
			||||||
 | 
					    let mut depth = 0;
 | 
				
			||||||
 | 
					    let mut aim = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    for line in reader.lines() {
 | 
				
			||||||
 | 
					        let (f, a) = parse_ins(&line.unwrap());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        aim += a;
 | 
				
			||||||
 | 
					        forward += f;
 | 
				
			||||||
 | 
					        depth += aim * f;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    Ok(forward * depth)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -1 +1,2 @@
 | 
				
			||||||
pub mod day_1;
 | 
					pub mod day_1;
 | 
				
			||||||
 | 
					pub mod day_2;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -4,4 +4,6 @@ fn main() {
 | 
				
			||||||
    // Day 1
 | 
					    // Day 1
 | 
				
			||||||
    println!("Day 1, part 1: {}", days::day_1::part1().unwrap());
 | 
					    println!("Day 1, part 1: {}", days::day_1::part1().unwrap());
 | 
				
			||||||
    println!("Day 1, part 2: {}", days::day_1::part2().unwrap());
 | 
					    println!("Day 1, part 2: {}", days::day_1::part2().unwrap());
 | 
				
			||||||
 | 
					    println!("Day 2, part 1: {}", days::day_2::part1().unwrap());
 | 
				
			||||||
 | 
					    println!("Day 2, part 2: {}", days::day_2::part2().unwrap());
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Reference in New Issue