This commit is contained in:
Eric Mertens 2023-01-23 22:37:02 -05:00
parent 5653ea0ec0
commit f5f1680de3
2 changed files with 70 additions and 0 deletions

67
2022/06.cpp Normal file
View File

@ -0,0 +1,67 @@
#include <algorithm>
#include <array>
#include <cstdint>
#include <iostream>
#include <stdexcept>
#include <string>
#include <limits>
#include <doctest.h>
#include <aocpp/Startup.hpp>
namespace {
auto Solve(std::string const& input, std::size_t n) -> std::size_t
{
std::array<std::size_t, 256> counts {};
std::size_t uniques {0};
auto const inc = [&](char c) {
if (0 == counts[static_cast<std::uint8_t>(c)]++) {
uniques++;
}
};
auto const dec = [&](char c) {
if (0 == --counts[static_cast<std::uint8_t>(c)]) {
uniques--;
}
};
for (std::size_t i = 0; i < n; ++i) {
inc(input[i]);
}
for (std::size_t i = n; i < input.size(); ++i) {
dec(input[i-n]);
inc(input[i]);
if (uniques == n) { return i+1; }
}
throw std::runtime_error{"bad input"};
}
} // namespace
TEST_SUITE("2022-06 examples") {
TEST_CASE("examples") {
CHECK(Solve("bvwbjplbgvbhsrlpgdmjqwftvncz", 4) == 5);
CHECK(Solve("nppdvjthqldpwncqszvftbrmjlhg", 4) == 6);
CHECK(Solve("nznrnfrfntjfmvfwmzdfjlvtqnbhcprsg", 4) == 10);
CHECK(Solve("zcfzfwzzqfrljwzlrfnpqdbhtmscgvjw", 4) == 11);
CHECK(Solve("mjqjpqmgbljsphdztnvjfqwrcgsmlb", 14) == 19);
CHECK(Solve("bvwbjplbgvbhsrlpgdmjqwftvncz", 14) == 23);
CHECK(Solve("nppdvjthqldpwncqszvftbrmjlhg", 14) == 23);
CHECK(Solve("nznrnfrfntjfmvfwmzdfjlvtqnbhcprsg", 14) == 29);
CHECK(Solve("zcfzfwzzqfrljwzlrfnpqdbhtmscgvjw", 14) == 26);
}
}
auto main(int argc, char** argv) -> int {
std::string input;
std::getline(*aocpp::Startup(argc, argv), input);
std::cout << "Part 1: " << Solve(input, 4) << std::endl;
std::cout << "Part 2: " << Solve(input, 14) << std::endl;
}

View File

@ -7,6 +7,9 @@ target_link_libraries(2022_03 aocpp)
add_executable(2022_04 04.cpp) add_executable(2022_04 04.cpp)
target_link_libraries(2022_04 aocpp) target_link_libraries(2022_04 aocpp)
add_executable(2022_06 06.cpp)
target_link_libraries(2022_06 aocpp)
add_executable(2022_08 08.cpp) add_executable(2022_08 08.cpp)
target_link_libraries(2022_08 aocpp) target_link_libraries(2022_08 aocpp)