2023 Day 16 Part 2 code tidy

We can simplify (but obfuscate) some of the beam direction calculations.
This commit is contained in:
2023-12-16 09:57:44 +00:00
parent a40aaa9d37
commit 55902dc9b6

View File

@@ -131,21 +131,15 @@ private:
case '.': case '.':
break; break;
case '\\': case '\\':
if (beam.dir_ == north) { beam.dir_ = west; } std::swap(beam.dir_.first, beam.dir_.second);
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(); }
break; break;
case '/': case '/':
if (beam.dir_ == north) { beam.dir_ = east; } std::swap(beam.dir_.first, beam.dir_.second);
else if (beam.dir_ == east) { beam.dir_ = north; } beam.dir_.first = -beam.dir_.first;
else if (beam.dir_ == south) { beam.dir_ = west; } beam.dir_.second = -beam.dir_.second;
else if (beam.dir_ == west) { beam.dir_ = south; }
else { std::abort(); }
break; break;
case '|': case '|':
if (beam.dir_ == east || beam.dir_ == west) { if (beam.dir_.second == 0) {
Beam beam2{beam}; Beam beam2{beam};
beam2.dir_ = north; beam2.dir_ = north;
beam2.loc_ = beam2.loc_ + beam2.dir_; beam2.loc_ = beam2.loc_ + beam2.dir_;
@@ -154,7 +148,7 @@ private:
} }
break; break;
case '-': case '-':
if (beam.dir_ == north || beam.dir_ == south) { if (beam.dir_.first == 0) {
Beam beam2{beam}; Beam beam2{beam};
beam2.dir_ = east; beam2.dir_ = east;
beam2.loc_ = beam2.loc_ + beam2.dir_; beam2.loc_ = beam2.loc_ + beam2.dir_;