Make next_pos iterate over indices.
This commit is contained in:
17
main.cc
17
main.cc
@@ -145,6 +145,7 @@ namespace {
|
||||
|
||||
/** Get grid length */
|
||||
auto length() const noexcept -> size_t { return length_; }
|
||||
auto end() const noexcept -> size_t { return grid_.size(); }
|
||||
|
||||
auto pos_x(Pos const& pos) const noexcept -> size_t { return pos % length_; }
|
||||
auto pos_y(Pos const& pos) const noexcept -> size_t { return pos / length_; }
|
||||
@@ -195,14 +196,14 @@ namespace {
|
||||
return ye - pos_y(pos);
|
||||
}
|
||||
|
||||
/** Get the next position to check. n is the size of the square we just
|
||||
* added.
|
||||
/** Get the next position to check starting at pos.
|
||||
*
|
||||
* Returns grid_.length() if no more positions avaialble.
|
||||
*/
|
||||
auto next_pos(Pos const &pos, size_t n) const noexcept -> Pos {
|
||||
auto const b = grid_.begin() + pos_x(pos) + n + pos_y(pos) * length_;
|
||||
auto next_pos(Pos const &pos) const noexcept -> Pos {
|
||||
auto const b = grid_.begin() + pos;
|
||||
auto const p = std::find(b, grid_.end(), empty);
|
||||
auto const v = p - grid_.begin();
|
||||
return v;
|
||||
return p - grid_.begin();
|
||||
}
|
||||
|
||||
private:
|
||||
@@ -296,11 +297,11 @@ namespace {
|
||||
grid.add(sq);
|
||||
sqs.push_back(sq);
|
||||
|
||||
pos = grid.next_pos(pos, idx);
|
||||
pos = grid.next_pos(pos + idx);
|
||||
idx = grid.largest_square(pos, n);
|
||||
|
||||
// Have we reached the end? If so success!
|
||||
if (grid.pos_x(pos) == 0 && grid.pos_y(pos) == grid.length()) { break; }
|
||||
if (pos == grid.end()) { break; }
|
||||
}
|
||||
|
||||
return Results(length, sqs);
|
||||
|
||||
Reference in New Issue
Block a user