diff options
author | Santo Cariotti <santo@dcariotti.me> | 2022-12-05 19:46:06 +0100 |
---|---|---|
committer | Santo Cariotti <santo@dcariotti.me> | 2022-12-05 19:46:06 +0100 |
commit | cf6303a5bc1558ebdb7b467da38f74cd3ac3a9b1 (patch) | |
tree | 6292cb239a8cf114179c6e7c8b3015840dfbae6e /day4/src | |
parent | 6e10cc2773fcaff64902b13f44443da014f38be7 (diff) |
Add 2022
Diffstat (limited to 'day4/src')
-rw-r--r-- | day4/src/main.rs | 107 |
1 files changed, 0 insertions, 107 deletions
diff --git a/day4/src/main.rs b/day4/src/main.rs deleted file mode 100644 index 4b2f9b3..0000000 --- a/day4/src/main.rs +++ /dev/null @@ -1,107 +0,0 @@ -use std::fs::File; -use std::io::{BufRead, BufReader}; - -fn part1(grids: &Vec<Vec<u32>>, mut inputs: Vec<u32>) -> u32 { - let mut values = Vec::<u32>::new(); - - for _ in 0..4 { - values.push(inputs.remove(0)); - } - - let mut winner: i8 = -1; - for input in inputs { - if winner >= 0 { - break; - } - values.push(input); - for i in 0..grids.len() { - // Search by rows - for j in [0, 5, 10, 15, 20] { - let mut n = 0; - for k in 0..5 { - let x = grids[i][j + k]; - if values.iter().any(|&i| i == x) { - n += 1; - } - } - if n == 5 { - winner = i as i8; - } - } - - // Search by cols - if winner < 0 { - for j in 0..5 { - let mut n = 0; - for k in [0, 5, 10, 15, 20] { - let x = grids[i][j + k]; - if values.iter().any(|&i| i == x) { - n += 1; - } - } - if n == 5 { - winner = i as i8; - } - } - } - - if winner >= 0 { - break; - } - } - } - - let mut sum = 0; - for x in &grids[winner as usize] { - if values.iter().any(|&i| i == *x) { - continue; - } - - sum += x; - } - - sum * values.pop().unwrap() -} - -fn main() -> std::io::Result<()> { - let file = File::open("input.txt")?; - let reader = BufReader::new(file); - let mut lines = reader.lines(); - - let inputs: Vec<_> = lines - .next() - .unwrap() - .unwrap() - .trim() - .split(',') - .map(|x| x.parse::<u32>().unwrap()) - .collect::<Vec<u32>>(); - - let mut grids: Vec<Vec<u32>> = vec![]; - let mut n: usize = 0; - - lines.next(); // Ignore the first empty line - while let Some(line) = lines.next() { - let mut line = line.unwrap(); - grids.push(Vec::with_capacity(5 * 5)); - - for _ in 0..5 { - grids[n].extend( - line.trim() - .split(' ') - .filter(|x| !x.is_empty()) - .map(|x| x.parse::<u32>().unwrap()) - .collect::<Vec<u32>>(), - ); - line = match lines.next() { - Some(x) => x.unwrap(), - None => "".to_string(), - }; - } - n += 1; - } - - println!("{}", part1(&grids, inputs.clone())); - - Ok(()) -} |