day4 part2
This commit is contained in:
parent
89a46e88f5
commit
b1bfc50625
@ -5,4 +5,4 @@ edition = "2021"
|
||||
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
[dependencies]
|
||||
[dependencies]
|
@ -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::<Vec<usize>>());
|
||||
|
||||
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::<i32>().unwrap()}) // convert to i32
|
||||
// .collect::<Vec<_>>()
|
||||
// })
|
||||
// .collect::<Vec<_>>()
|
||||
// })
|
||||
// .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);
|
||||
// }
|
||||
|
Loading…
Reference in New Issue
Block a user