Clang tidy 2022 Day 10.

This commit is contained in:
2022-12-10 07:29:50 +00:00
parent 0e5e5b70d9
commit c9fa108996
2 changed files with 133 additions and 0 deletions

59
2022/puzzle-10-01.cc Normal file
View File

@@ -0,0 +1,59 @@
//
// Created by Matthew Gretton-Dann on 09/12/2022.
//
#include <array>
#include <iostream>
#include <numeric>
#include <string>
#include <utility>
using Int = std::int64_t;
using UInt = std::uint64_t;
struct State
{
auto addx(UInt incr, Int delta)
{
pc_ += incr;
if (current_sample_ != sample_points_.end() && *current_sample_ < pc_) {
std::cout << "Sample point: " << *current_sample_ << " value: " << x_ << " score "
<< x_ * *current_sample_ << " total " << score_ << '\n';
score_ += x_ * *current_sample_;
++current_sample_;
}
x_ += delta;
}
[[nodiscard]] auto score() const noexcept -> Int { return score_; }
Int x_{1};
Int score_{0};
UInt pc_{1};
static std::array<UInt, 6> const sample_points_;
std::array<UInt, 6>::const_iterator current_sample_{sample_points_.begin()};
};
std::array<UInt, 6> const State::sample_points_ = {20, 60, 100, 140, 180, 220};
auto main() -> int
{
std::string line;
State state;
using namespace std::literals::string_literals;
while (std::getline(std::cin, line) && !line.empty()) {
if (line == "noop"s) {
state.addx(1, 0);
}
else if (line.substr(0, 5) == "addx "s) {
state.addx(2, std::stoll(line.substr(5)));
}
else {
std::cerr << "Unable to interpret: " << line << '\n';
return EXIT_FAILURE;
}
}
std::cout << "Score: " << state.score() << '\n';
return 0;
}

74
2022/puzzle-10-02.cc Normal file
View File

@@ -0,0 +1,74 @@
//
// Created by Matthew Gretton-Dann on 09/12/2022.
//
#include <array>
#include <iostream>
#include <numeric>
#include <string>
#include <utility>
using Int = std::int64_t;
using UInt = std::uint64_t;
struct State
{
auto draw_crt() const
{
Int const loc{(static_cast<Int>(pc_) - 1) % 40};
if (std::abs(x_ - loc) < 2) {
std::cout << '#';
}
else {
std::cout << '.';
}
if (loc == 39) {
std::cout << '\n';
}
}
auto addx(UInt incr, Int delta)
{
for (unsigned i = 0; i < incr; ++i) {
draw_crt();
++pc_;
}
if (current_sample_ != sample_points_.end() && *current_sample_ < pc_) {
score_ += x_ * *current_sample_;
++current_sample_;
}
x_ += delta;
}
[[nodiscard]] auto score() const noexcept -> Int { return score_; }
Int x_{1};
Int score_{0};
UInt pc_{1};
static std::array<UInt, 6> const sample_points_;
std::array<UInt, 6>::const_iterator current_sample_{sample_points_.begin()};
};
std::array<UInt, 6> const State::sample_points_ = {20, 60, 100, 140, 180, 220};
auto main() -> int
{
std::string line;
State state;
using namespace std::literals::string_literals;
while (std::getline(std::cin, line) && !line.empty()) {
if (line == "noop"s) {
state.addx(1, 0);
}
else if (line.substr(0, 5) == "addx "s) {
state.addx(2, std::stoll(line.substr(5)));
}
else {
std::cerr << "Unable to interpret: " << line << '\n';
return EXIT_FAILURE;
}
}
std::cout << "Score: " << state.score() << '\n';
return 0;
}