From 56e890cec0a28c0a485212ccebfaf774235a79a2 Mon Sep 17 00:00:00 2001 From: Thomas Schmucker Date: Wed, 3 Jan 2024 23:35:54 +0100 Subject: prepare for more puzzles ... :) --- src/day04.cpp | 114 ---------------------------------------------------------- 1 file changed, 114 deletions(-) delete mode 100644 src/day04.cpp (limited to 'src/day04.cpp') diff --git a/src/day04.cpp b/src/day04.cpp deleted file mode 100644 index 0d3e552..0000000 --- a/src/day04.cpp +++ /dev/null @@ -1,114 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include - -using namespace std; - -vector -read_file(string_view filename) -{ - fstream input{ filename }; - vector data; - - for ( string line; getline(input, line); ) { - data.emplace_back(line); - } - - return data; -} - -vector -split(const string& line, char sep) -{ - stringstream input{ line }; - vector parts; - - for ( string part; getline(input, part, sep); ) { - parts.emplace_back(part); - } - - return parts; -} - -template -Container -read_ints(const string& line) -{ - Container container{}; - stringstream input{ line }; - - for ( typename Container::value_type value; input >> value; ) { - container.emplace(value); - } - - return container; -} - -auto -build_data_set(string_view filename) -{ - vector values; - - for ( const auto& line: read_file(filename) ) { - const auto cards = split(line, ':'); - const auto numbers = split(cards[1], '|'); - - const auto winning_numbers = read_ints>(numbers[0]); - const auto card_numbers = read_ints>(numbers[1]); - - auto count = 0U; - for ( auto number: winning_numbers ) { - if ( card_numbers.contains(number) ) { - ++count; - } - } - values.emplace_back(count); - } - - return values; -} - -void -pass1(const vector& values) -{ - auto sum = 0U; - for ( auto value: values ) { - if ( value != 0 ) { - sum += (1U << (value - 1)); - } - } - - cout << sum << endl; -} - -void -pass2(const vector& values) -{ - auto count = 0U; - - function process = [&](size_t start, size_t end) -> void { - for ( ; start != end; ++start ) { - auto value = values[start]; - - ++count; - - process(start + 1, start + value + 1); - } - }; - - process(0, values.size()); - - cout << count << endl; -} - -int -main() -{ - const auto values = build_data_set("data/day04.txt"); - pass1(values); - pass2(values); -} -- cgit v1.3