From 756f22d58bb198b8f34589c112e1003614ccdcd6 Mon Sep 17 00:00:00 2001 From: Thomas Schmucker Date: Sun, 2 Nov 2025 21:41:58 +0100 Subject: aoc 2017, days 1-20 --- 2017/src/day13.cpp | 77 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 2017/src/day13.cpp (limited to '2017/src/day13.cpp') diff --git a/2017/src/day13.cpp b/2017/src/day13.cpp new file mode 100644 index 0000000..759f302 --- /dev/null +++ b/2017/src/day13.cpp @@ -0,0 +1,77 @@ +#include +#include +#include +#include +#include + +using namespace std; + +namespace { + +vector> +read_file(const filesystem::path& filename) +{ + ifstream file{ filename }; + unsigned long depth = 0; + unsigned long range = 0; + char colon = 0; + + vector> data; + + while ( file >> depth >> colon >> range ) { + data.emplace_back(depth, range); + } + + return data; +} + +template +T +get_pos(T depth, T range, T time) +{ + const auto period = 2 * (range - 1); + const auto remainder = (depth + time) % period; + return remainder < range ? remainder : period - remainder; +} + +void +part1(const vector>& data) +{ + unsigned long sum = 0; + for ( const auto [depth, range]: data ) { + if ( get_pos(depth, range, 0UL) == 0 ) { + sum += depth * range; + } + } + cout << "Part1: " << sum << '\n'; +} + +void +part2(const vector>& data) +{ + for ( unsigned long delay = 0;; ++delay ) { + bool pass = true; + + for ( const auto [depth, range]: data ) { + if ( get_pos(depth, range, delay) == 0 ) { + pass = false; + break; + } + } + + if ( pass ) { + cout << "Part2: " << delay << '\n'; + return; + } + } +} + +} // namespace + +int +main() +{ + auto data = read_file("data/day13.txt"); + part1(data); + part2(data); +} -- cgit v1.3