diff --git a/res/2015/day20/test_input.txt b/res/2015/day20/test_input.txt index e69de29..15c44e9 100644 --- a/res/2015/day20/test_input.txt +++ b/res/2015/day20/test_input.txt @@ -0,0 +1 @@ +149 diff --git a/src/2015/Day20.cpp b/src/2015/Day20.cpp index 623e2e6..45545e5 100644 --- a/src/2015/Day20.cpp +++ b/src/2015/Day20.cpp @@ -2,30 +2,51 @@ namespace y2015::day20 { - REGISTER_DAY(2015, Day20, std::vector, int); + REGISTER_DAY(2015, Day20, int, int); - REGISTER_TEST_EXAMPLE(2015, Day20, ExampleInput, 1, 0); - REGISTER_TEST(2015, Day20, Input, 1, 0); - REGISTER_TEST_EXAMPLE(2015, Day20, ExampleInput, 2, 0); - REGISTER_TEST(2015, Day20, Input, 2, 0); + REGISTER_TEST_EXAMPLE(2015, Day20, ExampleInput, 1, 8); + REGISTER_TEST(2015, Day20, Input, 1, 776160); + REGISTER_TEST_EXAMPLE(2015, Day20, ExampleInput, 2, 8); + REGISTER_TEST(2015, Day20, Input, 2, 786240); READ_INPUT(input) { - std::vector vec; - std::string str; - while (getline(input, str)) + int i = 0; + input >> i; + return i; + } + + int Solve(int input, int visits, int gifts) + { + // Assumption is that the solution can be found in 'limit' amount houses + int limit = 1'000'000; + if (visits == -1) + visits = limit; + std::vector data(limit, 0); + for (int i = 1; i < limit; i++) { + for (int j = 1; j <= visits; j++) + { + if (i * j - 1 >= limit) + break; + data[i * j - 1] += i * gifts; + } } - return vec; + for (int i = 0; i < data.size(); i++) + { + if (data[i] > input) + return i + 1; + } + return 0; } OUTPUT1(input) { - return 0; + return Solve(input, -1, 10); } OUTPUT2(input) { - return 0; + return Solve(input, 50, 11); } }