DEV Community

Cover image for Advent of Code 2023 - DAY 6
Antonio Perrone
Antonio Perrone

Posted on

Advent of Code 2023 - DAY 6

Problem Day 6: Wait For It

Here the day 6 problem statement: https://adventofcode.com/2023/day/6

Solution Part 1

pub fn part_one(input: &str) -> Option<u32> {
    let lines = input.split('\n').collect::<Vec<_>>();
    let times = lines[0].split(':').collect::<Vec<_>>()[1]
        .split(' ')
        .filter(|c| !c.is_empty())
        .collect::<Vec<_>>();
    let distances = lines[1].split(':').collect::<Vec<_>>()[1]
        .split(' ')
        .filter(|c| !c.is_empty())
        .collect::<Vec<_>>();

    let mut total = 1;

    for i in 0..times.len() {
        let mut winning = 0;

        let time = times[i].parse::<u32>().unwrap();

        for j in 0..=time {
            let distance = j * (time - j);
            if distance > distances[i].parse::<u32>().unwrap() {
                winning += 1;
            }
        }

        total *= winning;
    }

    Some(total)
}
Enter fullscreen mode Exit fullscreen mode

Solution Part 2

pub fn part_two(input: &str) -> Option<u32> {
    let lines = input.split('\n').collect::<Vec<_>>();
    let time = lines[0].split(':').collect::<Vec<_>>()[1]
        .split(' ')
        .filter(|c| !c.is_empty())
        .collect::<Vec<_>>()
        .join("")
        .parse::<f64>()
        .unwrap();
    let distance = lines[1].split(':').collect::<Vec<_>>()[1]
        .split(' ')
        .filter(|c| !c.is_empty())
        .collect::<Vec<_>>()
        .join("")
        .parse::<f64>()
        .unwrap();

    let min = (time - (time.powf(2.0) - 4.0 * distance).sqrt()) / 2.0;
    let max = (time + (time.powf(2.0) - 4.0 * distance).sqrt()) / 2.0;

    Some((max - min + 1.0) as u32)
}
Enter fullscreen mode Exit fullscreen mode

Here the repository with all puzzle solutions.

Top comments (0)