mirror of
https://github.com/bertptrs/adventofcode.git
synced 2025-12-27 05:40:32 +01:00
Partial incorrect part 2.
This commit is contained in:
@@ -25,6 +25,24 @@ namespace {
|
|||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::vector<int> advance(const std::vector<int>& numbers) {
|
||||||
|
std::vector<int> new_numbers;
|
||||||
|
new_numbers.reserve(numbers.size());
|
||||||
|
|
||||||
|
for (int rank = 0; rank < numbers.size(); ++rank) {
|
||||||
|
int n = 0;
|
||||||
|
for (int pos = rank; pos < numbers.size(); ++pos) {
|
||||||
|
n += get_modifier(rank, pos) * numbers[pos];
|
||||||
|
}
|
||||||
|
|
||||||
|
n = std::abs(n % 10);
|
||||||
|
|
||||||
|
new_numbers.push_back(n);
|
||||||
|
}
|
||||||
|
|
||||||
|
return new_numbers;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void aoc2019::day16_part1(std::istream &input, std::ostream &output) {
|
void aoc2019::day16_part1(std::istream &input, std::ostream &output) {
|
||||||
@@ -36,7 +54,7 @@ void aoc2019::day16_part1(std::istream &input, std::ostream &output) {
|
|||||||
|
|
||||||
for (int rank = 0; rank < numbers.size(); ++rank) {
|
for (int rank = 0; rank < numbers.size(); ++rank) {
|
||||||
int n = 0;
|
int n = 0;
|
||||||
for (int pos = 0; pos < numbers.size(); ++pos) {
|
for (int pos = rank; pos < numbers.size(); ++pos) {
|
||||||
n += get_modifier(rank, pos) * numbers[pos];
|
n += get_modifier(rank, pos) * numbers[pos];
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -53,5 +71,38 @@ void aoc2019::day16_part1(std::istream &input, std::ostream &output) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void aoc2019::day16_part2(std::istream &input, std::ostream &output) {
|
void aoc2019::day16_part2(std::istream &input, std::ostream &output) {
|
||||||
output << "Not implemented\n";
|
auto numbers = read_input(input);
|
||||||
|
const auto initial_size = numbers.size();
|
||||||
|
|
||||||
|
constexpr auto repetitions = 10000;
|
||||||
|
|
||||||
|
numbers.reserve(repetitions * numbers.size());
|
||||||
|
|
||||||
|
int offset = 0;
|
||||||
|
for (int i = 0; i < 7; ++i) {
|
||||||
|
offset *= 10;
|
||||||
|
offset += numbers[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 1; i < repetitions; ++i) {
|
||||||
|
std::copy(numbers.begin(), numbers.begin() + initial_size, std::back_inserter(numbers));
|
||||||
|
}
|
||||||
|
|
||||||
|
numbers = std::vector(numbers.begin() + offset, numbers.end());
|
||||||
|
|
||||||
|
for (int i = 0; i < 100; ++i) {
|
||||||
|
std::vector<int> partial_sums(numbers.size());
|
||||||
|
std::vector<int> new_numbers(numbers.size());
|
||||||
|
|
||||||
|
partial_sums[0] = numbers[0];
|
||||||
|
for (int j = 1; j < numbers.size(); ++j) {
|
||||||
|
partial_sums[j] = partial_sums[j - 1] + numbers[j];
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int j = 0; j < numbers.size(); ++j) {
|
||||||
|
new_numbers[j] = partial_sums.back() - partial_sums[j] + numbers[j];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
std::copy(numbers.begin(), numbers.begin() + 8, std::ostream_iterator<int>(output));
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user