diff options
-rw-r--r-- | lib.h | 3 | ||||
-rw-r--r-- | main.c | 11 |
2 files changed, 7 insertions, 7 deletions
@@ -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; @@ -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) |