From a490b2a72faae8e68a3b07837b485fcb0a8ceeb0 Mon Sep 17 00:00:00 2001 From: Florent DENEF Date: Fri, 2 Dec 2022 16:42:46 +0100 Subject: [PATCH 1/3] Better panic message. --- src/prob2/mod.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/prob2/mod.rs b/src/prob2/mod.rs index d938ce7..1f8dee1 100644 --- a/src/prob2/mod.rs +++ b/src/prob2/mod.rs @@ -40,7 +40,10 @@ impl From for Play { 'X' => Play::Rock, 'Y' => Play::Paper, 'Z' => Play::Scissors, - _ => panic!("Only A, B, C, X, Y or Z letters are available."), + other => panic!( + "Only A, B, C, X, Y or Z letters are available. Had {}", + other + ), } } } From 5aa28c2b07905cfdc535117d150b09b0beee288b Mon Sep 17 00:00:00 2001 From: Florent DENEF Date: Fri, 2 Dec 2022 16:43:02 +0100 Subject: [PATCH 2/3] The thing is working (forced to use a variable for the conversion with into()). --- src/prob2/mod.rs | 36 +++++++++++++++++++++++++++++------- 1 file changed, 29 insertions(+), 7 deletions(-) diff --git a/src/prob2/mod.rs b/src/prob2/mod.rs index 1f8dee1..1646b0f 100644 --- a/src/prob2/mod.rs +++ b/src/prob2/mod.rs @@ -62,17 +62,39 @@ pub fn round_score(play: char, counter_play: char) -> i32 { let coup = Play::from(play); // translate to the play let counter = Play::from(counter_play); // translate to the play if coup == counter { - (ResultPlay::Draw as i32) + (counter_play as i32) + let draw: i32 = ResultPlay::Draw.into(); + let result: i32 = counter.into(); + draw + result } else { use Play::*; use ResultPlay::*; + let loss: i32 = Loss.into(); + let win: i32 = Win.into(); match (&coup, &counter) { - (Rock, Paper) => (Win as i32) + (counter as i32), - (Rock, Scissors) => (Loss as i32) + (counter as i32), - (Paper, Rock) => (Loss as i32) + (counter as i32), - (Paper, Scissors) => (Win as i32) + (counter as i32), - (Scissors, Rock) => (Win as i32) + (counter as i32), - (Scissors, Paper) => (Loss as i32) + (counter as i32), + (Rock, Paper) => { + let result: i32 = counter.into(); + win + result + } + (Rock, Scissors) => { + let result: i32 = counter.into(); + loss + result + } + (Paper, Rock) => { + let result: i32 = counter.into(); + loss + result + } + (Paper, Scissors) => { + let result: i32 = counter.into(); + win + result + } + (Scissors, Rock) => { + let result: i32 = counter.into(); + win + result + } + (Scissors, Paper) => { + let result: i32 = counter.into(); + loss + result + } _ => panic!("Case not covered, impossible to reach."), } } From 07b0bf755852d84190f13485416256487a057303 Mon Sep 17 00:00:00 2001 From: Florent DENEF Date: Fri, 2 Dec 2022 16:43:29 +0100 Subject: [PATCH 3/3] Using the solver for the part 1 form the second problem --- src/main.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main.rs b/src/main.rs index 4d0c721..2ab289a 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,10 +1,10 @@ -use advent_of_code::prob1; +use advent_of_code::{prob1, prob2}; fn main() { let args: Vec = std::env::args().collect(); let file_path = args .get(1) .expect("Please provide an argument on command-line."); - let max = prob1::solve_part2(file_path); + let max = prob2::solve_part1(file_path); println!("{max}"); }