summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib.h3
-rw-r--r--main.c11
2 files changed, 7 insertions, 7 deletions
diff --git a/lib.h b/lib.h
index bebc1df..1831f5e 100644
--- a/lib.h
+++ b/lib.h
@@ -2,12 +2,13 @@
#define LIB_H
#include <stdbool.h>
+#include <stdint.h>
#include <stdlib.h>
typedef struct State
{
// Sandpiles
- unsigned char *data;
+ uint64_t *data;
size_t dwidth;
size_t window_len;
diff --git a/main.c b/main.c
index 0a8e97a..c863e01 100644
--- a/main.c
+++ b/main.c
@@ -17,12 +17,11 @@
void step(state_t *state)
{
- state->data[((state->dwidth / 2) * state->dwidth) + (state->dwidth / 2)]++;
for (size_t i = 0; i < state->dwidth; ++i)
for (size_t j = 0; j < state->dwidth; ++j)
if (state->data[(i * state->dwidth) + j] >= 4)
{
- unsigned char *references[] = {
+ uint64_t *references[] = {
(j == 0) ? NULL : &state->data[((i)*state->dwidth) + j - 1],
(i == state->dwidth - 1)
? NULL
@@ -33,8 +32,8 @@ void step(state_t *state)
(i == 0) ? NULL : &state->data[((i - 1) * state->dwidth) + j]};
for (size_t k = 0; k < 4; ++k)
if (references[k])
- *references[k] += 1;
- state->data[(i * state->dwidth) + j] = 0;
+ *references[k] += state->data[(i * state->dwidth) + j] / 4;
+ state->data[(i * state->dwidth) + j] %= 4;
}
}
@@ -97,8 +96,8 @@ int main(void)
for (size_t i = 0; i < state.dwidth; ++i)
for (size_t j = 0; j < state.dwidth; ++j)
{
- Color c = {0};
- unsigned char sandpile = state.data[(i * state.dwidth) + j];
+ Color c = {0};
+ uint64_t sandpile = state.data[(i * state.dwidth) + j];
if (sandpile == 0)
c = BLACK;
else if (sandpile == 1)