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::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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user