mirror of
https://gitlab.com/MisterBiggs/aoc-2023-rust.git
synced 2025-06-15 14:36:50 +00:00
just in time for bedtime
This commit is contained in:
parent
a6db3400ca
commit
9941589ba7
35
src/day4.rs
35
src/day4.rs
@ -1,12 +1,14 @@
|
||||
use std::collections::HashSet;
|
||||
use std::fs;
|
||||
|
||||
use itertools::Itertools;
|
||||
|
||||
pub fn run() {
|
||||
println!("Day 4:");
|
||||
let input = fs::read_to_string("./inputs/day4.txt").expect("Could not read file");
|
||||
|
||||
println!("\tPart 1: {}", part1(&input));
|
||||
// println!("\tPart 2: {}", part2(&input));
|
||||
println!("\tPart 2: {}", part2(&input));
|
||||
}
|
||||
|
||||
fn part1(cards: &str) -> usize {
|
||||
@ -35,8 +37,33 @@ fn part1(cards: &str) -> usize {
|
||||
total_wins
|
||||
}
|
||||
|
||||
fn part2(schematic: &str) -> usize {
|
||||
todo!()
|
||||
fn part2(cards: &str) -> usize {
|
||||
let number_of_cards: usize = cards.lines().collect::<Vec<_>>().len();
|
||||
let mut card_wins = vec![0; number_of_cards];
|
||||
|
||||
for (current_card_number, card) in cards.lines().enumerate() {
|
||||
let (_, card_numbers) = card.split_once(':').unwrap();
|
||||
let (winners_raw, chances_raw) = card_numbers.split_once('|').unwrap();
|
||||
|
||||
let winners = winners_raw
|
||||
.split(' ')
|
||||
.filter(|s| !s.is_empty())
|
||||
.map(|win| win.trim().parse::<usize>().unwrap())
|
||||
.collect::<HashSet<usize>>();
|
||||
let chances = chances_raw
|
||||
.split(' ')
|
||||
.filter(|s| !s.is_empty())
|
||||
.map(|chance| chance.trim().parse::<usize>().unwrap())
|
||||
.collect::<HashSet<usize>>();
|
||||
|
||||
let wins = winners.intersection(&chances).count();
|
||||
|
||||
for index in 1..=wins {
|
||||
card_wins[index + current_card_number] += 1 + card_wins[current_card_number];
|
||||
}
|
||||
}
|
||||
|
||||
card_wins.iter().sum::<usize>() + number_of_cards
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
@ -64,6 +91,6 @@ Card 4: 41 92 73 84 69 | 59 84 76 51 58 5 54 83
|
||||
Card 5: 87 83 26 28 32 | 88 30 70 12 93 22 82 36
|
||||
Card 6: 31 18 13 56 72 | 74 77 10 23 35 67 36 11";
|
||||
|
||||
assert_eq!(part2(input), 467835);
|
||||
assert_eq!(part2(input), 30);
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user