grids
This commit is contained in:
parent
e96354c4ec
commit
2955e6f3d9
@ -16,7 +16,6 @@ struct Coord {
|
||||
auto operator<=>(const Coord&) const = default;
|
||||
};
|
||||
|
||||
|
||||
auto Draw(std::ostream & out, std::map<Coord, std::int64_t> image) -> void;
|
||||
|
||||
/// Move one unit up
|
||||
|
43
lib/include/aocpp/Grid.hpp
Normal file
43
lib/include/aocpp/Grid.hpp
Normal file
@ -0,0 +1,43 @@
|
||||
#ifndef AOCPP_GRID_HPP_
|
||||
#define AOCPP_GRID_HPP_
|
||||
|
||||
#include <iostream>
|
||||
#include <vector>
|
||||
#include <utility>
|
||||
#include <type_traits>
|
||||
|
||||
#include <aocpp/Coord.hpp>
|
||||
|
||||
namespace aocpp {
|
||||
|
||||
struct Grid {
|
||||
std::vector<std::string> rows;
|
||||
|
||||
auto operator[](Coord c) -> char& { return rows[c.y][c.x]; }
|
||||
auto operator[](Coord c) const -> char { return rows[c.y][c.x]; }
|
||||
|
||||
static auto Parse(std::istream & in) -> Grid {
|
||||
Grid result;
|
||||
std::string line;
|
||||
while (std::getline(in, line)) {
|
||||
result.rows.emplace_back(std::move(line));
|
||||
}
|
||||
return {result};
|
||||
}
|
||||
|
||||
template <typename F>
|
||||
auto each(F f = F{}) const {
|
||||
auto const h = rows.size();
|
||||
for (std::size_t y = 0; y < h; y++) {
|
||||
auto const& row = rows[y];
|
||||
auto const w = row.size();
|
||||
for (std::size_t x = 0; x < w; x++) {
|
||||
f(Coord{static_cast<std::int64_t>(x), static_cast<std::int64_t>(y)}, row[x]);
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
Loading…
Reference in New Issue
Block a user