2022-06
This commit is contained in:
parent
5653ea0ec0
commit
f5f1680de3
67
2022/06.cpp
Normal file
67
2022/06.cpp
Normal 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;
|
||||
}
|
@ -7,6 +7,9 @@ target_link_libraries(2022_03 aocpp)
|
||||
add_executable(2022_04 04.cpp)
|
||||
target_link_libraries(2022_04 aocpp)
|
||||
|
||||
add_executable(2022_06 06.cpp)
|
||||
target_link_libraries(2022_06 aocpp)
|
||||
|
||||
add_executable(2022_08 08.cpp)
|
||||
target_link_libraries(2022_08 aocpp)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user