From b45dd9596200dcdbb4c91c8ab05f7dcfde302af4 Mon Sep 17 00:00:00 2001 From: Thomas Schmucker Date: Mon, 2 Dec 2024 21:48:58 +0100 Subject: cleanup --- 2024/src/day02.cpp | 35 +++++++++++++++++------------------ 1 file changed, 17 insertions(+), 18 deletions(-) (limited to '2024/src') diff --git a/2024/src/day02.cpp b/2024/src/day02.cpp index c8ca66f..e3597a3 100644 --- a/2024/src/day02.cpp +++ b/2024/src/day02.cpp @@ -1,4 +1,3 @@ -#include #include #include #include @@ -12,11 +11,11 @@ read_file(string_view filename) fstream input{ filename }; vector> lines; - auto split = [](const string& str) { - stringstream sstr{ str }; + auto split = [](const string& line) { + stringstream line_stream{ line }; vector values; - for ( long value = 0; sstr >> value; ) { + for ( long value = 0; line_stream >> value; ) { values.emplace_back(value); } return values; @@ -25,7 +24,6 @@ read_file(string_view filename) for ( string line; getline(input, line); ) { lines.emplace_back(split(line)); } - return lines; } @@ -43,6 +41,19 @@ is_safe(const vector& values) return all_positive || all_negative; } +bool +is_real_safe(const vector& values) +{ + for ( size_t i = 0; i != values.size(); ++i ) { + auto values_copy = values; + values_copy.erase(values_copy.begin() + ptrdiff_t(i)); + if ( is_safe(values_copy) ) { + return true; + } + } + return false; +} + void part1(const vector>& lines) { @@ -52,19 +63,7 @@ part1(const vector>& lines) void part2(const vector>& lines) { - long safe_count = 0; - for ( const auto& line: lines ) { - auto safe = false; - for ( size_t i = 0; i != line.size(); ++i ) { - auto copy = line; - copy.erase(copy.begin() + ptrdiff_t(i)); - safe |= is_safe(copy); - } - if ( safe ) { - ++safe_count; - } - } - cout << safe_count << endl; + cout << ranges::count_if(lines, is_real_safe) << endl; } int -- cgit v1.3