From 81cbc23069bdee7af154057c8b7fd2fae3223bf0 Mon Sep 17 00:00:00 2001 From: nekineki Date: Mon, 4 Dec 2023 09:52:23 +0100 Subject: improve day04 --- 2023/day04.rs | 51 +++++++++++++++++++-------------------------------- 1 file changed, 19 insertions(+), 32 deletions(-) (limited to '2023') diff --git a/2023/day04.rs b/2023/day04.rs index 0bed2c7..2f29934 100644 --- a/2023/day04.rs +++ b/2023/day04.rs @@ -16,47 +16,34 @@ fn main() { let mut res1 = 0; - let mut counts: Vec = Vec::new(); + let mut copies = vec![1; lines.len()]; - for line in &lines { - let s1: Vec<&str> = line.split(":").collect(); - let game_num: u32 = s1[0] - .replace(" ", " ") - .replace(" ", " ") - .split(" ") - .collect::>()[1] - .parse() - .unwrap(); - let s2: Vec<&str> = s1[1].trim().split("|").collect::>(); + for (i, line) in lines.into_iter().enumerate() { + let nows = line.split_whitespace().collect::>().join(" "); + let (first, rest) = line.split_once(": ").unwrap(); - let winning: Vec = s2[0] - .trim() - .replace(" ", " ") - .split(" ") + let game_num = first.split_once(" ").unwrap().1; + let (win, actual) = rest.split_once(" | ").unwrap(); + let win = win + .split_whitespace() .map(|x| x.parse::().unwrap()) - .collect(); - let actual: Vec = s2[1] - .trim() - .replace(" ", " ") - .replace(" ", " ") - .split(" ") + .collect::>(); + let actual = actual + .split_whitespace() .map(|x| x.parse::().unwrap()) - .collect(); + .collect::>(); - let count: i32 = actual.iter().filter(|x| winning.contains(x)).count() as i32; - counts.push(count); - // println!("{}", count); - res1 += 1_i32.checked_shl((count - 1) as u32).unwrap_or(0); - } - let mut copies: Vec = vec![0; counts.len()]; + let count = actual.iter().filter(|x| win.contains(x)).count(); + if count > 0 { + res1 += 1 << (count - 1); + } - for i in 0..counts.len() { - for j in i..i + counts[i] as usize { - copies[j + 1] += 1 + copies[i]; + for j in i..i + count { + copies[j + 1] += copies[i]; } } - let res2 = copies.iter().sum::() + copies.len() as i32; + let res2: u32 = copies.iter().sum(); println!("res1: {}", res1); println!("res2: {}", res2); -- cgit v1.2.3