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/day06.cpp | 82 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 2017/src/day06.cpp (limited to '2017/src/day06.cpp') diff --git a/2017/src/day06.cpp b/2017/src/day06.cpp new file mode 100644 index 0000000..596ca2c --- /dev/null +++ b/2017/src/day06.cpp @@ -0,0 +1,82 @@ +#include +#include +#include +#include +#include +#include + +using namespace std; + +namespace { + +vector +read_lines(const filesystem::path& filename) +{ + ifstream file{ filename }; + vector lines; + + for ( int value{}; file >> value; ) { + lines.emplace_back(value); + } + + return lines; +} + +void +distribute(vector& values) +{ + auto iter = ranges::max_element(values); + auto max_value = *iter; + + *iter = 0; + + while ( max_value-- > 0 ) { + ++iter; + if ( iter == values.end() ) { + iter = values.begin(); + } + *iter += 1; + } +} + +void +part1(vector values) +{ + set> seen; + for ( int step = 0;; ++step ) { + if ( seen.contains(values) ) { + cout << "Part1: " << step << '\n'; + return; + } + + seen.insert(values); + + distribute(values); + } +} + +void +part2(vector values) +{ + map, int> seen; + for ( int step = 0;; ++step ) { + if ( seen.contains(values) ) { + cout << "Part2: " << step - seen.at(values) << '\n'; + return; + } + + seen.emplace(values, step); + + distribute(values); + } +} + +} // namespace + +int +main() +{ + auto values = read_lines("data/day06.txt"); + part1(values); + part2(values); +} -- cgit v1.3