From b1bfc506255f9df4ba83d6e5e104f854ecc595ab Mon Sep 17 00:00:00 2001 From: Candygoblen123 Date: Tue, 5 Dec 2023 15:26:58 -0500 Subject: [PATCH] day4 part2 --- day4/Cargo.toml | 2 +- day4/src/main.rs | 77 ++++++++++++++++++++++++++++++++++++++++-------- 2 files changed, 66 insertions(+), 13 deletions(-) diff --git a/day4/Cargo.toml b/day4/Cargo.toml index 8842130..eb81094 100644 --- a/day4/Cargo.toml +++ b/day4/Cargo.toml @@ -5,4 +5,4 @@ edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html -[dependencies] +[dependencies] \ No newline at end of file diff --git a/day4/src/main.rs b/day4/src/main.rs index 8f1e9d7..6053943 100644 --- a/day4/src/main.rs +++ b/day4/src/main.rs @@ -1,4 +1,5 @@ use std::fs; +use std::collections::VecDeque; fn main() { let input = fs::read_to_string("input.txt").unwrap(); @@ -20,27 +21,79 @@ fn main() { }) .collect(); - let mut total_pts = 0; - for card in input { - let mut card_pts = 0; + let mut queue = VecDeque::from((0..input.len()).collect::>()); + + let mut total_cards = 0; + while !queue.is_empty() { + let card_num = queue.pop_front().unwrap(); + let card = input.get(card_num).unwrap(); + total_cards += 1; + let mut dup_cards = 0; let winning_nums = card.first().unwrap(); let our_nums = card.last().unwrap(); + //dp would kill here, but im lazy for num in our_nums { if winning_nums.contains(num) { - if card_pts == 0 { - card_pts = 1; - } else { - card_pts *= 2; - } + dup_cards += 1; + } + } + for card in (card_num + 1)..=(card_num + dup_cards) { + if card < input.len() { + queue.push_back(card); } } - - //println!("{}", card_pts); - total_pts += card_pts; } - println!("{:?}", total_pts); + println!("{:?}", total_cards); } + + +// use std::fs; + +// fn main() { +// let input = fs::read_to_string("input.txt").unwrap(); + +// // an array in this format [[card 1: [winning nums][ our nums]]] +// let input: Vec<_> = input.split('\n') // split days +// .map(|card| &card[(card.find(':').unwrap() + 1)..]) // remove day numbers +// .map(|card| card.trim()) // trim extra whitespace +// .map(|card| { +// card.split('|') // split winning/own numbers +// .map(|numbers| { +// numbers.trim() // trim whitespace +// .split(' ') // split into individual nums +// .filter(|x| !x.is_empty()) // remove empty strings +// .map(|x| {return x.parse::().unwrap()}) // convert to i32 +// .collect::>() +// }) +// .collect::>() +// }) +// .collect(); + +// let mut total_pts = 0; +// for card in input { +// let mut card_pts = 0; +// let winning_nums = card.first().unwrap(); +// let our_nums = card.last().unwrap(); + +// for num in our_nums { +// if winning_nums.contains(num) { +// if card_pts == 0 { +// card_pts = 1; +// } else { +// card_pts *= 2; +// } +// } +// } + +// //println!("{}", card_pts); +// total_pts += card_pts; +// } + + + +// println!("{:?}", total_pts); +// }