2023 Day 16 Part 2 code tidy
We can simplify (but obfuscate) some of the beam direction calculations.
This commit is contained in:
@@ -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_;
|
||||||
|
Reference in New Issue
Block a user