From c9fa1089963ef7c7c0cc308b1d9d7113d289f800 Mon Sep 17 00:00:00 2001 From: Matthew Gretton-Dann Date: Sat, 10 Dec 2022 07:29:50 +0000 Subject: [PATCH] Clang tidy 2022 Day 10. --- 2022/puzzle-10-01.cc | 59 +++++++++++++++++++++++++++++++++++ 2022/puzzle-10-02.cc | 74 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 133 insertions(+) create mode 100644 2022/puzzle-10-01.cc create mode 100644 2022/puzzle-10-02.cc diff --git a/2022/puzzle-10-01.cc b/2022/puzzle-10-01.cc new file mode 100644 index 0000000..b715428 --- /dev/null +++ b/2022/puzzle-10-01.cc @@ -0,0 +1,59 @@ +// +// Created by Matthew Gretton-Dann on 09/12/2022. +// + +#include +#include +#include +#include +#include + +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 const sample_points_; + std::array::const_iterator current_sample_{sample_points_.begin()}; +}; + +std::array 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; +} diff --git a/2022/puzzle-10-02.cc b/2022/puzzle-10-02.cc new file mode 100644 index 0000000..92e3048 --- /dev/null +++ b/2022/puzzle-10-02.cc @@ -0,0 +1,74 @@ +// +// Created by Matthew Gretton-Dann on 09/12/2022. +// + +#include +#include +#include +#include +#include + +using Int = std::int64_t; +using UInt = std::uint64_t; + +struct State +{ + auto draw_crt() const + { + Int const loc{(static_cast(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 const sample_points_; + std::array::const_iterator current_sample_{sample_points_.begin()}; +}; + +std::array 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; +}