Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdint.h>
- #include <stdlib.h>
- #include <math.h>
- #include <malloc.h>
- typedef int32_t s32;
- struct vec2
- {
- s32 x;
- s32 y;
- };
- vec2 dirTable[] = { { 1, 0 }, { 0, -1 }, { -1, 0 }, { 0, 1 } };
- vec2 neighborTable[] = { { 0, 1 }, { 0, -1 }, { 1, -1 }, { 1, 0 }, { 1, 1 }, { -1, -1 }, { -1, 0 }, { -1, 1 } };
- s32 SumNeighbors(s32 *grid, vec2 pos);
- int main(int argc, char **argv)
- {
- // Guess
- s32 *grid = (s32 *)calloc(1024 * 1024, sizeof(s32));
- s32 largest = 0;
- s32 goal = 277678;
- vec2 pos = { 511, 511 };
- s32 dir = 0;
- s32 stepIter = 0;
- s32 stepMax = 1;
- s32 spiralStep = 0; // 0,1 0,1 ...
- // Fill first square
- grid[(1024 * pos.y) + pos.x] = 1;
- for (s32 i = 1; i < goal; i++)
- {
- pos.x += dirTable[dir].x;
- pos.y += dirTable[dir].y;
- s32 acc = grid[(1024 * pos.y) + pos.x];
- stepIter++;
- if (stepIter == stepMax)
- {
- stepIter = 0;
- dir++;
- if (dir > 3)
- {
- dir = 0;
- }
- spiralStep++;
- if (spiralStep == 2)
- {
- spiralStep = 0;
- stepMax++;
- }
- }
- }
- free(grid);
- printf("Largest: %d\n", largest);
- system("pause");
- return 0;
- }
- s32 SumNeighbors(s32 *grid, vec2 pos)
- {
- s32 result = 0;
- vec2 n = {};
- for (s32 ni = 0; ni < 8; ni++)
- {
- n = neighborTable[ni];
- result += grid[(1024 * (pos.y + n.y)) + (pos.x + n.y)];
- }
- return result;
- }
Add Comment
Please, Sign In to add comment