From 6a4ac7008bc955c9aacca95917d53f0a8c7c4840 Mon Sep 17 00:00:00 2001 From: Glenn Griffin Date: Sun, 13 Dec 2020 15:18:50 -0800 Subject: [PATCH] day13 only part 1 --- input/2020/day13.txt | 2 ++ src/day13.rs | 42 ++++++++++++++++++++++++++++++++++++++++++ src/lib.rs | 1 + 3 files changed, 45 insertions(+) create mode 100644 input/2020/day13.txt create mode 100644 src/day13.rs diff --git a/input/2020/day13.txt b/input/2020/day13.txt new file mode 100644 index 0000000..6a5ab7a --- /dev/null +++ b/input/2020/day13.txt @@ -0,0 +1,2 @@ +1004345 +41,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,37,x,x,x,x,x,379,x,x,x,x,x,x,x,23,x,x,x,x,13,x,x,x,17,x,x,x,x,x,x,x,x,x,x,x,29,x,557,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,19 diff --git a/src/day13.rs b/src/day13.rs new file mode 100644 index 0000000..667a4e7 --- /dev/null +++ b/src/day13.rs @@ -0,0 +1,42 @@ +use aoc_runner_derive::aoc; + +#[aoc(day13, part1)] +fn solve_d13_p1(input: &str) -> usize { + let first_newline = input.find('\n').unwrap(); + let (t, bus_ids) = input.split_at(first_newline); + let bus_ids = bus_ids.trim(); + + let t: usize = t.parse().unwrap(); + + struct WaitTime { + bus_id: usize, + wait_time: usize, + } + let min_wait_time = bus_ids + .split(',') + .filter(|&x| x != "x") + .map(|x| x.parse::().unwrap()) + .fold( + WaitTime { + bus_id: usize::MAX, + wait_time: usize::MAX, + }, + |min, bus_id| { + let offset = t % bus_id; + let wait_time = if offset == 0 { + 0 + } else { + bus_id - offset + }; + if min.wait_time < wait_time { + min + } else { + WaitTime{ + bus_id, + wait_time, + } + } + }, + ); + min_wait_time.bus_id * min_wait_time.wait_time +} diff --git a/src/lib.rs b/src/lib.rs index 93b2826..b096756 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -2,6 +2,7 @@ pub mod day1; pub mod day10; pub mod day11; pub mod day12; +pub mod day13; pub mod day2; pub mod day3; pub mod day4;