aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorkaiwu <kaiwu2004@gmail.com>2022-03-16 17:53:25 +0800
committerkaiwu <kaiwu2004@gmail.com>2022-03-16 17:53:25 +0800
commit02b94aafe0c11962b24d0d6f70794fb630e3ceca (patch)
tree7da92575571cd83acecaf52dddd2aa19f9f2ca10 /src
parent1b4d1293fd4f5d222a13dcaa9bf0dbfe4aaaa4e6 (diff)
downloadadvent-of-code-02b94aafe0c11962b24d0d6f70794fb630e3ceca.tar.gz
advent-of-code-02b94aafe0c11962b24d0d6f70794fb630e3ceca.zip
day 6
Diffstat (limited to 'src')
-rw-r--r--src/2015/day6/aoc.h35
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