diff options
author | kaiwu <kaiwu2004@gmail.com> | 2022-03-16 17:53:25 +0800 |
---|---|---|
committer | kaiwu <kaiwu2004@gmail.com> | 2022-03-16 17:53:25 +0800 |
commit | 02b94aafe0c11962b24d0d6f70794fb630e3ceca (patch) | |
tree | 7da92575571cd83acecaf52dddd2aa19f9f2ca10 /src | |
parent | 1b4d1293fd4f5d222a13dcaa9bf0dbfe4aaaa4e6 (diff) | |
download | advent-of-code-02b94aafe0c11962b24d0d6f70794fb630e3ceca.tar.gz advent-of-code-02b94aafe0c11962b24d0d6f70794fb630e3ceca.zip |
day 6
Diffstat (limited to 'src')
-rw-r--r-- | src/2015/day6/aoc.h | 35 |
1 files changed, 34 insertions, 1 deletions
diff --git a/src/2015/day6/aoc.h b/src/2015/day6/aoc.h index 1567afc..c178277 100644 --- a/src/2015/day6/aoc.h +++ b/src/2015/day6/aoc.h @@ -4,6 +4,39 @@ namespace aoc2015 { +struct grid { + uint8_t* pool; + + struct unit { + int x; + int y; + }; + + grid(int x, int y) { + pool = (uint8_t*)malloc(x * y); + memset(pool, 0x0, x * y); + } + + template <typename F, typename... Args> + void traverse(unit u1, unit u2, F&& f, Args&&... args) { + for (int i = u1.x; i <= u2.x; i++) { + for (int j = u1.y; j <= u2.y; j++) { + f(pool[i * j], std::forward<Args>(args)...); + } + } + } + + void turn_on(unit u1, unit u2) { + traverse(u1, u2, [](uint8_t& u) { u = 1; }); + } + void turn_off(unit u1, unit u2) { + traverse(u1, u2, [](uint8_t& u) { u = 0; }); + } + void toggle(unit u1, unit u2) { + traverse(u1, u2, [](uint8_t& u) { u = !u; }); + } +}; + int day6(line_view); -} +} // namespace aoc2015 |