Advent 2023 Day 4
This commit is contained in:
parent
53c9379380
commit
1d48f6f245
3 changed files with 276 additions and 0 deletions
49
advent_of_code_2023/day4/main2.rs
Normal file
49
advent_of_code_2023/day4/main2.rs
Normal file
|
|
@ -0,0 +1,49 @@
|
|||
use std::cmp::min;
|
||||
use std::fs::read_to_string;
|
||||
use std::collections::HashSet;
|
||||
|
||||
struct Card {
|
||||
numbers: Vec<i32>,
|
||||
winners: HashSet<i32>
|
||||
}
|
||||
|
||||
fn count_wins(card: &Card) -> usize {
|
||||
let mut hits = 0;
|
||||
|
||||
for number in &card.numbers {
|
||||
if card.winners.contains(&number) {
|
||||
hits += 1;
|
||||
}
|
||||
}
|
||||
|
||||
hits
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let cards = read_to_string("input.txt").unwrap().lines().map(|line| {
|
||||
let (_, card) = line.split_once(':').unwrap();
|
||||
let (numbers, winners) = card.split_once('|').unwrap();
|
||||
|
||||
let numbers = numbers.split(' ').filter(|numstr| { !numstr.is_empty() }).map(|number| {
|
||||
number.parse::<i32>().unwrap()
|
||||
}).collect::<Vec<_>>();
|
||||
|
||||
let winners = winners.split(' ').filter(|numstr| { !numstr.is_empty() }).map(|number| {
|
||||
number.parse::<i32>().unwrap()
|
||||
}).collect::<HashSet<_>>();
|
||||
|
||||
Card{numbers: numbers, winners: winners}
|
||||
}).collect::<Vec<_>>();
|
||||
|
||||
let mut stacks = vec![1; cards.len()];
|
||||
|
||||
for idx in 0..stacks.len() {
|
||||
let score = count_wins(&cards[idx]);
|
||||
|
||||
for wins in (idx + 1)..min(idx + score + 1, stacks.len()) {
|
||||
stacks[wins] += stacks[idx];
|
||||
}
|
||||
}
|
||||
|
||||
println!("Total #cards: {}", stacks.iter().sum::<i32>());
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue