#![allow(dead_code)] use std::fs::File; use std::io; use std::io::BufRead; use std::path::Path; use std::time::Instant; fn main() { let now = Instant::now(); part_one(); let part_one_duration = now.elapsed(); part_two(); let part_two_duration = now.elapsed(); println!( "p1: {}ms, p2: {}ms", part_one_duration.as_millis(), (part_two_duration - part_one_duration).as_millis() ); } fn read_lines

(filename: P) -> io::Result>> where P: AsRef, { // note that this discards a final newline let file = File::open(filename)?; Ok(io::BufReader::new(file).lines()) } fn part_one() { if let Ok(lines) = read_lines("./inputs/input") { let mut score = 0; for line in lines { let l = line.unwrap(); let them = l.chars().nth(0).unwrap() as u32 - 64; let you = l.chars().nth(2).unwrap() as u32 - 87; score += you; // 1 is Rock // 2 is Paper // 3 is Scissors if you == them { score += 3; } else if them == 1 && you == 2 { score += 6 } else if them == 2 && you == 3 { score += 6 } else if them == 3 && you == 1 { score += 6 } } println!("{}", score) } } fn part_two() { if let Ok(lines) = read_lines("./inputs/input") { let mut score = 0; for line in lines { let l = line.unwrap(); let them = l.chars().nth(0).unwrap() as u32 - 64; let outcome = l.chars().nth(2).unwrap() as u32 - 87; // 1 is Rock / you lose // 2 is Paper / you tie // 3 is Scissors / you win // compute what you throw plus the score of the round score += ((them + outcome) % 3) + 1 + (outcome - 1) * 3; } println!("{}", score) } }