1
0
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:
Anson Biggs 2023-12-04 00:03:44 -07:00
parent a6db3400ca
commit 9941589ba7

View File

@ -1,12 +1,14 @@
use std::collections::HashSet; use std::collections::HashSet;
use std::fs; use std::fs;
use itertools::Itertools;
pub fn run() { pub fn run() {
println!("Day 4:"); println!("Day 4:");
let input = fs::read_to_string("./inputs/day4.txt").expect("Could not read file"); let input = fs::read_to_string("./inputs/day4.txt").expect("Could not read file");
println!("\tPart 1: {}", part1(&input)); println!("\tPart 1: {}", part1(&input));
// println!("\tPart 2: {}", part2(&input)); println!("\tPart 2: {}", part2(&input));
} }
fn part1(cards: &str) -> usize { fn part1(cards: &str) -> usize {
@ -35,8 +37,33 @@ fn part1(cards: &str) -> usize {
total_wins total_wins
} }
fn part2(schematic: &str) -> usize { fn part2(cards: &str) -> usize {
todo!() 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)] #[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 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"; 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);
} }
} }