Working great ! :D
This commit is contained in:
parent
f9ca1c15f0
commit
da873ef463
@ -1,2 +1,4 @@
|
||||
extern crate core;
|
||||
|
||||
pub mod prob1;
|
||||
pub mod prob2;
|
@ -5,6 +5,6 @@ fn main() {
|
||||
let file_path = args
|
||||
.get(1)
|
||||
.expect("Please provide an argument on command-line.");
|
||||
let max = prob2::solve_part1(file_path);
|
||||
let max = prob2::solve_part2(file_path);
|
||||
println!("{max}");
|
||||
}
|
||||
|
@ -5,6 +5,7 @@ pub enum Play {
|
||||
Scissors,
|
||||
}
|
||||
|
||||
#[derive(Copy, Clone)]
|
||||
enum ResultPlay {
|
||||
Win,
|
||||
Draw,
|
||||
@ -97,6 +98,41 @@ pub fn round_score(play: char, counter_play: char) -> i32 {
|
||||
}
|
||||
}
|
||||
|
||||
fn choose_answer(strat: &ResultPlay, input: Play) -> Play {
|
||||
use Play::*;
|
||||
use ResultPlay::*;
|
||||
match strat {
|
||||
Loss => match input {
|
||||
Rock => Scissors,
|
||||
Paper => Rock,
|
||||
Scissors => Paper,
|
||||
},
|
||||
Draw => input,
|
||||
Win => match input {
|
||||
Rock => Paper,
|
||||
Paper => Scissors,
|
||||
Scissors => Rock,
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
fn getting_score(game_output: &ResultPlay, play: Play) -> i32 {
|
||||
let game: i32 = (*game_output).into();
|
||||
let play_result: i32 = play.into();
|
||||
game + play_result
|
||||
}
|
||||
|
||||
pub fn second_strat(play: char, strat: char) -> i32 {
|
||||
let coup = Play::from(play);
|
||||
let response = match strat {
|
||||
'X' => ResultPlay::Loss,
|
||||
'Y' => ResultPlay::Draw,
|
||||
'Z' => ResultPlay::Win,
|
||||
other => panic!("Wrong letter {other}"),
|
||||
};
|
||||
getting_score(&response, choose_answer(&response, coup))
|
||||
}
|
||||
|
||||
pub fn solve_part1(file_path: &str) -> i32 {
|
||||
let contents =
|
||||
std::fs::read_to_string(file_path).expect("Please provide a text file as an argument.");
|
||||
@ -113,3 +149,20 @@ pub fn solve_part1(file_path: &str) -> i32 {
|
||||
.iter()
|
||||
.sum()
|
||||
}
|
||||
|
||||
pub fn solve_part2(file_path: &str) -> i32 {
|
||||
let contents =
|
||||
std::fs::read_to_string(file_path).expect("Please provide a text file as an argument.");
|
||||
let lines: Vec<&str> = contents.split('\n').collect();
|
||||
lines
|
||||
.iter()
|
||||
.map(|line| {
|
||||
let mut line_iter = line.chars();
|
||||
let first: char = line_iter.next().unwrap_or('R');
|
||||
let last: char = line_iter.last().unwrap_or('R');
|
||||
second_strat(first, last)
|
||||
})
|
||||
.collect::<Vec<i32>>()
|
||||
.iter()
|
||||
.sum()
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user