diff --git a/2017/01.cpp b/2017/01.cpp new file mode 100644 index 0000000..459b6ae --- /dev/null +++ b/2017/01.cpp @@ -0,0 +1,54 @@ +#include +#include +#include +#include + +#include + +#include + +namespace { + +auto Captcha(std::string const& input, std::size_t offset) -> std::int64_t { + std::int64_t acc = 0; + std::size_t const n = input.size(); + for (std::size_t i = 0; i < n; ++i) { + if (input[i] == input[(i+offset)%n]) { + acc += input[i] - '0'; + } + } + return acc; +} + +auto Part1(std::string const& input) -> std::int64_t { + return Captcha(input, 1); +} + +auto Part2(std::string const& input) -> std::int64_t { + return Captcha(input, input.size() / 2); +} + +} // namespace + +TEST_SUITE("2017-01 examples") { + TEST_CASE("part 1") { + CHECK(Part1("1122") == 3); + CHECK(Part1("1111") == 4); + CHECK(Part1("1234") == 0); + CHECK(Part1("91212129") == 9); + } + TEST_CASE("part 2") { + CHECK(Part2("1212") == 6); + CHECK(Part2("1221") == 0); + CHECK(Part2("123425") == 4); + CHECK(Part2("123123") == 12); + CHECK(Part2("12131415") == 4); + } +} + +auto main(int argc, char** argv) -> int { + std::string input; + std::getline(*aocpp::Startup(argc, argv), input); + std::cout << "Part 1: " << Part1(input) << std::endl; + std::cout << "Part 2: " << Part2(input) << std::endl; +}