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 --- makefile | 3 ++- src/day15.cpp | 62 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 64 insertions(+), 1 deletion(-) create mode 100644 src/day15.cpp diff --git a/makefile b/makefile index e57b256..87d8aee 100644 --- a/makefile +++ b/makefile @@ -13,7 +13,8 @@ all: bin/day01 \ bin/day11 \ bin/day12 \ bin/day13 \ - bin/day14 + bin/day14 \ + bin/day15 bin: mkdir $@ 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