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/day04.cpp | 78 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 2017/src/day04.cpp (limited to '2017/src/day04.cpp') diff --git a/2017/src/day04.cpp b/2017/src/day04.cpp new file mode 100644 index 0000000..01e89b2 --- /dev/null +++ b/2017/src/day04.cpp @@ -0,0 +1,78 @@ +#include +#include +#include +#include +#include +#include +#include + +using namespace std; + +namespace { + +vector +read_lines(const filesystem::path& filename) +{ + ifstream file{ filename }; + vector lines; + + for ( string line; getline(file, line); ) { + lines.emplace_back(line); + } + + return lines; +} + +vector +split(const string& line) +{ + stringstream strm{ line }; + vector words; + + for ( string word; strm >> word; ) { + words.emplace_back(word); + } + + return words; +} + +void +part1(const vector& lines) +{ + auto num = ranges::count_if(lines, [](const string& line) { + auto words = split(line); + set set{ words.begin(), words.end() }; + + return set.size() == words.size(); + }); + + cout << "Part1: " << num << '\n'; +} + +void +part2(const vector& lines) +{ + auto num = ranges::count_if(lines, [](const string& line) { + auto words = split(line); + set set; + + for ( auto word: words ) { + ranges::sort(word); + set.insert(word); + } + + return set.size() == words.size(); + }); + + cout << "Part2: " << num << '\n'; +} + +} // namespace + +int +main() +{ + auto lines = read_lines("data/day04.txt"); + part1(lines); + part2(lines); +} -- cgit v1.3