From d396dc3221fcf893c885bd9a370b9a30f25b31dd Mon Sep 17 00:00:00 2001 From: Thomas Schmucker Date: Sun, 12 Jan 2025 17:36:26 +0100 Subject: aoc 2016, days 4, 5, 6 --- 2016/src/day05.cpp | 74 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 2016/src/day05.cpp (limited to '2016/src/day05.cpp') diff --git a/2016/src/day05.cpp b/2016/src/day05.cpp new file mode 100644 index 0000000..dfce653 --- /dev/null +++ b/2016/src/day05.cpp @@ -0,0 +1,74 @@ +// Standard C++ +#include +#include +#include +#include + +// Standard C +#include // memcmp + +// System +#include + +using namespace std; + +void +part1(string_view puzzle) +{ + array digest{}; + + string result; + + string input; + for ( unsigned long counter = 0;; ++counter ) { + input = puzzle; + input += to_string(counter); + MD5Data(input.data(), input.size(), digest.data()); + + if ( memcmp(digest.data(), "00000", 5) == 0 ) { + result += digest.at(5); + if ( result.length() == 8 ) { + cout << result << endl; + return; + } + } + } +} + +void +part2(string_view puzzle) +{ + array digest{}; + + string result = "________"; + + string input; + for ( unsigned long counter = 0;; ++counter ) { + input = puzzle; + input += to_string(counter); + MD5Data(input.data(), input.size(), digest.data()); + + if ( memcmp(digest.data(), "00000", 5) == 0 ) { + auto position = digest.at(5) - '0'; + if ( position < 0 || position > 7 ) { + continue; + } + if ( result.at(size_t(position)) != '_' ) { + continue; + } + result.at(size_t(position)) = digest.at(6); + if ( result.find('_') == string::npos ) { + cout << result << endl; + return; + } + } + } +} + +int +main() +{ + auto puzzle = "reyedfim"s; + part1(puzzle); + part2(puzzle); +} -- cgit v1.3