diff --git a/2019/inputs/16.txt b/2019/inputs/16.txt new file mode 100644 index 0000000..b120de8 --- /dev/null +++ b/2019/inputs/16.txt @@ -0,0 +1 @@ +59758034323742284979562302567188059299994912382665665642838883745982029056376663436508823581366924333715600017551568562558429576180672045533950505975691099771937719816036746551442321193912312169741318691856211013074397344457854784758130321667776862471401531789634126843370279186945621597012426944937230330233464053506510141241904155782847336539673866875764558260690223994721394144728780319578298145328345914839568238002359693873874318334948461885586664697152894541318898569630928429305464745641599948619110150923544454316910363268172732923554361048379061622935009089396894630658539536284162963303290768551107950942989042863293547237058600513191659935 diff --git a/2019/src/day16.cpp b/2019/src/day16.cpp index 61765e5..ecb817a 100644 --- a/2019/src/day16.cpp +++ b/2019/src/day16.cpp @@ -1,10 +1,57 @@ #include +#include +#include +#include +#include #include "days.hpp" +namespace { + std::array base_pattern{0, 1, 0, -1}; + + int get_modifier(int rank, int pos) { + pos += 1; + pos /= rank + 1; + + return base_pattern[pos % 4]; + } + + std::vector read_input(std::istream &input) { + std::vector result; + + for (char c; input >> c;) { + assert(std::isdigit(c)); + result.push_back(c - '0'); + } + + return result; + } +} + void aoc2019::day16_part1(std::istream &input, std::ostream &output) { - output << "Not implemented\n"; + auto numbers = read_input(input); + + for (int i = 0; i < 100; ++i) { + std::vector new_numbers; + new_numbers.reserve(numbers.size()); + + for (int rank = 0; rank < numbers.size(); ++rank) { + int n = 0; + for (int pos = 0; pos < numbers.size(); ++pos) { + n += get_modifier(rank, pos) * numbers[pos]; + } + + n = std::abs(n % 10); + + new_numbers.push_back(n); + } + + numbers = new_numbers; + } + + std::copy(numbers.begin(), numbers.begin() + 8, std::ostream_iterator(output)); + output << std::endl; } void aoc2019::day16_part2(std::istream &input, std::ostream &output) { - output << "Not implemented\n"; + output << "Not implemented\n"; } diff --git a/2019/tests/samples/16-1-1.in b/2019/tests/samples/16-1-1.in new file mode 100644 index 0000000..a0d6069 --- /dev/null +++ b/2019/tests/samples/16-1-1.in @@ -0,0 +1 @@ +80871224585914546619083218645595 diff --git a/2019/tests/samples/16-1-1.out b/2019/tests/samples/16-1-1.out new file mode 100644 index 0000000..e3a8042 --- /dev/null +++ b/2019/tests/samples/16-1-1.out @@ -0,0 +1 @@ +24176176 diff --git a/2019/tests/samples/16-1-2.in b/2019/tests/samples/16-1-2.in new file mode 100644 index 0000000..e62b53a --- /dev/null +++ b/2019/tests/samples/16-1-2.in @@ -0,0 +1 @@ +19617804207202209144916044189917 diff --git a/2019/tests/samples/16-1-2.out b/2019/tests/samples/16-1-2.out new file mode 100644 index 0000000..a8ff9e0 --- /dev/null +++ b/2019/tests/samples/16-1-2.out @@ -0,0 +1 @@ +73745418 diff --git a/2019/tests/samples/16-1-3.in b/2019/tests/samples/16-1-3.in new file mode 100644 index 0000000..fc400a2 --- /dev/null +++ b/2019/tests/samples/16-1-3.in @@ -0,0 +1 @@ +69317163492948606335995924319873 diff --git a/2019/tests/samples/16-1-3.out b/2019/tests/samples/16-1-3.out new file mode 100644 index 0000000..628d8a5 --- /dev/null +++ b/2019/tests/samples/16-1-3.out @@ -0,0 +1 @@ +52432133