Solutions for 2018 day 11

This commit is contained in:
2022-12-22 06:08:38 +00:00
parent 041da7b737
commit b6ac5462ff
2 changed files with 135 additions and 0 deletions

66
2018/puzzle-11-01.cc Normal file
View File

@@ -0,0 +1,66 @@
//
// Created by Matthew Gretton-Dann on 01/12/2022.
//
#include <array>
#include <cstdlib>
#include <iomanip>
#include <iostream>
#include <regex>
#include <utility>
constexpr std::size_t grid_size{300};
using Int = std::int64_t;
using Grid = std::array<std::array<Int, grid_size>, grid_size>;
using SmallGrid = std::array<std::array<Int, grid_size - 2>, grid_size - 2>;
auto main() -> int
{
std::string line;
if (!std::getline(std::cin, line)) {
std::cerr << "Unable to read line.\n";
return EXIT_FAILURE;
}
Int const serial{std::stoll(line)};
Grid grid;
for (Int y{0}; y < grid_size; ++y) {
for (Int x{0}; x < grid_size; ++x) {
Int const rack_id{x + 1 + 10};
Int power{(rack_id * (y + 1) + serial) * rack_id};
power /= 100;
power %= 10;
power -= 5;
grid.at(y).at(x) = power;
}
}
SmallGrid small_grid;
for (Int y{0}; y < small_grid.size(); ++y) {
for (Int x{0}; x < small_grid.size(); ++x) {
small_grid[y][x] = 0;
for (Int dy{0}; dy < 3; ++dy) {
for (Int dx{0}; dx < 3; ++dx) {
small_grid[y][x] += grid[y + dy][x + dx];
}
}
}
}
Int max_power{std::numeric_limits<Int>::min()};
Int max_x{0};
Int max_y{0};
for (Int y{0}; y < small_grid.size(); ++y) {
for (Int x{0}; x < small_grid.size(); ++x) {
if (max_power < small_grid[y][x]) {
max_power = small_grid[y][x];
max_x = x + 1;
max_y = y + 1;
}
}
}
std::cout << "Maximum power: " << max_power << "\n";
std::cout << "Coordinates: " << max_x << "," << max_y << "\n";
return EXIT_SUCCESS;
}

69
2018/puzzle-11-02.cc Normal file
View File

@@ -0,0 +1,69 @@
//
// Created by Matthew Gretton-Dann on 01/12/2022.
//
#include <array>
#include <cstdlib>
#include <iomanip>
#include <iostream>
#include <regex>
#include <utility>
constexpr std::size_t grid_size{300};
using Int = std::int64_t;
using Grid = std::array<std::array<Int, grid_size>, grid_size>;
using SmallGrid = std::array<std::array<Int, grid_size - 2>, grid_size - 2>;
auto main() -> int
{
std::string line;
if (!std::getline(std::cin, line)) {
std::cerr << "Unable to read line.\n";
return EXIT_FAILURE;
}
Int const serial{std::stoll(line)};
Grid grid;
for (Int y{0}; y < grid_size; ++y) {
for (Int x{0}; x < grid_size; ++x) {
Int const rack_id{x + 1 + 10};
Int power{(rack_id * (y + 1) + serial) * rack_id};
power /= 100;
power %= 10;
power -= 5;
grid.at(y).at(x) = power;
}
}
Int max_power{std::numeric_limits<Int>::min()};
Int max_x{0};
Int max_y{0};
Int max_g{0};
Grid small_grid{grid};
for (Int g{0}; g < grid_size; ++g) {
Int sgs(grid_size - g);
for (Int y{0}; y < sgs; ++y) {
for (Int x{0}; x < sgs; ++x) {
for (Int dx{0}; dx <= g; ++dx) {
small_grid[y][x] += grid[y + g][x + dx];
}
for (Int dy{0}; dy < g; ++dy) {
small_grid[y][x] += grid[y + dy][x + g];
}
if (max_power < small_grid[y][x]) {
max_power = small_grid[y][x];
max_x = x + 1;
max_y = y + 1;
max_g = g + 1;
}
}
}
}
std::cout << "Maximum power: " << max_power << "\n";
std::cout << "Coordinates: " << max_x << "," << max_y << "," << max_g << "\n";
return EXIT_SUCCESS;
}