From 2a1072a2af3cb4ef98e35b77ad2dc44ee38bcf16 Mon Sep 17 00:00:00 2001 From: Thomas Ruoff Date: Mon, 3 Jan 2022 08:50:58 +0100 Subject: [PATCH] day 04 task 2 --- day04/src/main.rs | 31 +++++++++++++++++++++---------- 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/day04/src/main.rs b/day04/src/main.rs index db5c857..3f78f3c 100644 --- a/day04/src/main.rs +++ b/day04/src/main.rs @@ -7,7 +7,7 @@ struct Field { struct Board { fields: Vec, won: bool, - score: u16, + score: u32, } impl std::fmt::Display for Board { @@ -27,18 +27,17 @@ impl std::fmt::Display for Board { } impl Board { - fn mark_number(&mut self, draw: u16) { + fn mark_number(&mut self, draw: u16) -> Option { if self.won { - return; + return None; } - let field = self.fields .iter_mut() .find(|f| f.value == draw); if field.is_none() { - return + return None } field.unwrap().drawn = true; @@ -60,8 +59,11 @@ impl Board { // calc score if self.won { let undrawn_sum = self.fields.iter().filter(|f| !f.drawn).fold(0, |accm, f| accm + f.value ); - self.score = undrawn_sum * draw; + self.score = undrawn_sum as u32 * draw as u32; + return Some(self.score); } + + return None; } } @@ -71,18 +73,27 @@ fn main() { println!("draws: {:?}", draws); let mut boards = parse_boards(&input); + let mut last_board_won: usize = usize::MAX; + let mut last_board_won_score: u32 = u32::MAX; for draw in draws.iter() { println!("draw: {:?}", draw); for (index, board) in boards.iter_mut().enumerate() { - board.mark_number(*draw); + let score = board.mark_number(*draw); println!("board {}:\n{}", index, board); - if board.won { - println!("board {} won with score {}", index, board.score); - return; + + if score.is_some() { + last_board_won_score = score.unwrap(); + last_board_won = index; } } } + + if last_board_won_score < u32::MAX { + println!("board {} won last with score {}", last_board_won, last_board_won_score); + } else { + println!("only loosers here"); + } } fn parse_draws(data: &String) -> Vec {