Added Day 2 and command line argument for specifying which day to run
This commit is contained in:
parent
ffc549c907
commit
2217a5d1ea
File diff suppressed because it is too large
Load Diff
|
@ -32,5 +32,4 @@ pub fn run() {
|
|||
assert!(calorie_totals.len() >= 3);
|
||||
println!("Day 1 Part A Answer: {}", calorie_totals[0]);
|
||||
println!("Day 1 Part B Answer: {}", calorie_totals[0] + calorie_totals[1] + calorie_totals[2]);
|
||||
|
||||
}
|
||||
|
|
|
@ -0,0 +1,71 @@
|
|||
use std::fs::File;
|
||||
use std::io::BufReader;
|
||||
use std::io::BufRead;
|
||||
|
||||
pub fn run() {
|
||||
let file = File::open("resources/day2input.txt").expect("Input file not found.");
|
||||
let reader = BufReader::new(file);
|
||||
|
||||
let mut part1_score: u32 = 0;
|
||||
let mut part2_score: u32 = 0;
|
||||
|
||||
for line in reader.lines() {
|
||||
let str = line.unwrap();
|
||||
let input_arguments = str.split(" ").collect::<Vec<&str>>();
|
||||
|
||||
println!("Round: {:?}, {:?}", input_arguments[0], input_arguments[1]);
|
||||
|
||||
let instruction_a = input_arguments[0].chars().next().unwrap();
|
||||
let instruction_b = input_arguments[1].chars().next().unwrap();
|
||||
|
||||
if instruction_b == 'X' {
|
||||
part1_score += check_outcome(instruction_b, instruction_a) + get_shape_value(instruction_b); // rock
|
||||
part2_score += get_shape_value(get_losing_move(instruction_a)); // lose
|
||||
} else if instruction_b == 'Y' {
|
||||
part1_score += check_outcome(instruction_b, instruction_a) + get_shape_value(instruction_b); // paper
|
||||
part2_score += 3 + get_shape_value(instruction_a); // draw
|
||||
} else if instruction_b == 'Z' {
|
||||
part1_score += check_outcome(instruction_b, instruction_a) + get_shape_value(instruction_b); // scissors
|
||||
part2_score += 6 + get_shape_value(get_winning_move(instruction_a)); // win
|
||||
}
|
||||
}
|
||||
|
||||
println!("Day 2 Part 1 Answer: {:?}", part1_score);
|
||||
println!("Day 2 Part 2 Answer: {:?}", part2_score);
|
||||
}
|
||||
|
||||
fn get_shape_value(shape: char) -> u32 {
|
||||
return match shape {
|
||||
'X' | 'A' => 1, // rock
|
||||
'Y' | 'B' => 2, // paper
|
||||
'Z' | 'C' => 3, // scissor
|
||||
_ => panic!()
|
||||
}
|
||||
}
|
||||
|
||||
fn get_losing_move(shape: char) -> char {
|
||||
return match shape {
|
||||
'X' | 'A' => 'C', // rock
|
||||
'Y' | 'B' => 'A', // paper
|
||||
'Z' | 'C' => 'B', // scissor
|
||||
_ => panic!()
|
||||
}
|
||||
}
|
||||
|
||||
fn get_winning_move(shape: char) -> char {
|
||||
return match shape {
|
||||
'X' | 'A' => 'B', // rock
|
||||
'Y' | 'B' => 'C', // paper
|
||||
'Z' | 'C' => 'A', // scissor
|
||||
_ => panic!()
|
||||
}
|
||||
}
|
||||
|
||||
fn check_outcome(a: char, b: char) -> u32 {
|
||||
if get_shape_value(a) == get_shape_value(b) {
|
||||
return 3;
|
||||
} else if get_losing_move(a) == b {
|
||||
return 6;
|
||||
}
|
||||
return 0;
|
||||
}
|
|
@ -1,5 +1,19 @@
|
|||
use std::env;
|
||||
|
||||
mod day1;
|
||||
mod day2;
|
||||
|
||||
fn main() {
|
||||
day1::run();
|
||||
let args: Vec<String> = env::args().collect();
|
||||
match args.len() {
|
||||
2 => {
|
||||
let day_to_run = &args[1];
|
||||
match &day_to_run[..] {
|
||||
"day1" => day1::run(),
|
||||
"day2" => day2::run(),
|
||||
_ => eprintln!("error: invalid day")
|
||||
}
|
||||
},
|
||||
_ => eprintln!("Error: not enough or too many arguments.")
|
||||
};
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue