From 55902dc9b6263e46abbf7e78c10a27958f3a5f06 Mon Sep 17 00:00:00 2001 From: Matthew Gretton-Dann Date: Sat, 16 Dec 2023 09:57:44 +0000 Subject: [PATCH] 2023 Day 16 Part 2 code tidy We can simplify (but obfuscate) some of the beam direction calculations. --- 2023/puzzle-16-02.cc | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/2023/puzzle-16-02.cc b/2023/puzzle-16-02.cc index 545cf44..c0156db 100644 --- a/2023/puzzle-16-02.cc +++ b/2023/puzzle-16-02.cc @@ -131,21 +131,15 @@ private: case '.': break; case '\\': - if (beam.dir_ == north) { beam.dir_ = west; } - else if (beam.dir_ == east) { beam.dir_ = south; } - else if (beam.dir_ == south) { beam.dir_ = east; } - else if (beam.dir_ == west) { beam.dir_ = north; } - else { std::abort(); } + std::swap(beam.dir_.first, beam.dir_.second); break; case '/': - if (beam.dir_ == north) { beam.dir_ = east; } - else if (beam.dir_ == east) { beam.dir_ = north; } - else if (beam.dir_ == south) { beam.dir_ = west; } - else if (beam.dir_ == west) { beam.dir_ = south; } - else { std::abort(); } + std::swap(beam.dir_.first, beam.dir_.second); + beam.dir_.first = -beam.dir_.first; + beam.dir_.second = -beam.dir_.second; break; case '|': - if (beam.dir_ == east || beam.dir_ == west) { + if (beam.dir_.second == 0) { Beam beam2{beam}; beam2.dir_ = north; beam2.loc_ = beam2.loc_ + beam2.dir_; @@ -154,7 +148,7 @@ private: } break; case '-': - if (beam.dir_ == north || beam.dir_ == south) { + if (beam.dir_.first == 0) { Beam beam2{beam}; beam2.dir_ = east; beam2.loc_ = beam2.loc_ + beam2.dir_;