diff --git a/src/day4/mod.rs b/src/day4/mod.rs index 456746c..9fba754 100644 --- a/src/day4/mod.rs +++ b/src/day4/mod.rs @@ -1,26 +1,53 @@ +use log::debug; + use super::utils::Part; struct Card { nb_winning: u32 } -pub fn parse(line: &str) -> Card { +fn parse(line: &str) -> Card { + debug!("Processing {}", line); let (_, values) = line.split_once(':').unwrap(); let (winning, numbers) = values.split_once('|').unwrap(); + let nb_win : Vec = winning.trim().split(' ').filter(|v| !v.is_empty()).map(|v| v.parse().unwrap()).collect(); + let nb_card : Vec = numbers.trim().split(' ').filter(|v| !v.is_empty()).map(|v| v.parse().unwrap()).collect(); - todo!() + debug!("{:?}", nb_win); + debug!("{:?}", nb_card); + + let mut value = 0; + for nb in nb_card { + if nb_win.contains(&nb) { + if value == 0 { + value = 1; + }else{ + value *= 2; + } + } + } + + Card { nb_winning: value } } pub fn solve(lines: Vec, part: Part) -> u32 { + let mut sum = 0; + for line in lines { + sum += parse(&line).nb_winning; + } - - todo!() + sum } #[cfg(test)] mod tests { + use super::parse; + #[test] fn test_line() { let line = "Card 1: 41 48 83 86 17 | 83 86 6 31 17 9 48 53".to_owned(); + + let card = parse(&line); + assert_eq!(card.nb_winning, 8); } } \ No newline at end of file