From 631aadb1508a884e8e6667d8ab22399525200d78 Mon Sep 17 00:00:00 2001 From: Thomas Schmucker Date: Fri, 15 Dec 2023 08:54:08 +0100 Subject: Lösung für Tag 15, Teil 1 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/day15.cpp | 62 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 src/day15.cpp (limited to 'src/day15.cpp') diff --git a/src/day15.cpp b/src/day15.cpp new file mode 100644 index 0000000..905110f --- /dev/null +++ b/src/day15.cpp @@ -0,0 +1,62 @@ +#include +#include +#include +#include +#include +using namespace std; + +string +read_file(string_view filename) +{ + fstream input{ filename }; + return { istreambuf_iterator{ input }, istreambuf_iterator{} }; +} + +inline string& +rtrim(string& s, const char* t = " \t\n\r\f\v") +{ + s.erase(s.find_last_not_of(t) + 1); + return s; +} + +vector +split(const string& line, char sep) +{ + vector parts{}; + stringstream input{ line }; + + for ( string part; getline(input, part, sep); ) { + parts.emplace_back(rtrim(part)); + } + + return parts; +} + +unsigned int +calculate_hash(string_view str) +{ + unsigned int value = 0; + for ( auto chr: str ) { + value += static_cast(chr); + value *= 17; + } + return value % 256; +} + +void +part1() +{ + const auto line = read_file("data/day15.txt"); + const auto parts = split(line, ','); + unsigned long value = 0; + for ( const auto& part: parts ) { + value += calculate_hash(part); + } + cout << value << endl; +} + +int +main() +{ + part1(); +} -- cgit v1.3