OFFSET
1,2
PROG
(C)
#include <stdio.h>
#define SIZE 20
int grid[SIZE][SIZE];
int direction[] = {0, -1, 1, 0, 0, 1, -1, 0};
main() {
int i, j, x1, y1, x2, y2, stepSize;
int direction1pos=0, direction2pos=4, val;
x1 = y1 = x2 = y2 = SIZE/2;
for (val=grid[y1][x1]=1, stepSize=0; ; ++stepSize) {
if (x1<1 || x1>=SIZE-1 || x2<1 || x2>=SIZE-1) break;
if (y1<1 || y1>=SIZE-1 || y2<1 || y2>=SIZE-1) break;
for (i=stepSize|1; i; ++val, --i) {
x1 += direction[direction1pos ];
y1 += direction[direction1pos+1];
x2 += direction[direction2pos ];
y2 += direction[direction2pos+1];
grid[y1][x1] = val*2;
grid[y2][x2] = val*2+1;
}
direction1pos = (direction1pos+2) & 7;
direction2pos = (direction2pos+2) & 7;
}
direction1pos=0;
x1 = y1 = SIZE/2;
for (stepSize=2; ; ++stepSize) {
for (i=stepSize/2; i; --i) {
if (grid[y1][x1]==0) return;
printf("%d, ", grid[y1][x1]);
x1 += direction[direction1pos ];
y1 += direction[direction1pos+1];
}
direction1pos = (direction1pos+2) & 7;
}
}
CROSSREFS
KEYWORD
nonn
AUTHOR
Alex Ratushnyak, Dec 04 2012
STATUS
approved