#include <stdio.h>
int make_spiral(int *m, int s, int n, int hour, int is_cw);
int main(void)
{
int spiral_map[16][16];
int y, x, n, h;
make_spiral(spiral_map, 16, n, h, 1);
for (y = 0; y < n; y++){
for (x = 0; x < n; x++){
printf("%4d", spiral_map
[y
][x
]); }
}
return (0);
}
int make_spiral(int *m, int s, int n, int hour, int is_cw)
{
int x, y;
int c, l, v, i;
int t[] = {0, -1, 0, 1, 0, -1, 0, 1};
int *d = t + (hour / 3 % 4 + 4 & 3);
n & 1 || n++;
x = y = n / 2;
c = l = v = 0;
n *= n;
for (m[y * s + x] = ++c; c < n; v &= 3){
for (i = 0; i < l; i++){
x += d[v + 1];
y += d[v] * (is_cw ? 1 : -1);
m[y * s + x] = ++c;
}
if (++v & 1) l++;
}
return (0);
}
I2luY2x1ZGUgPHN0ZGlvLmg+CgppbnQgbWFrZV9zcGlyYWwoaW50ICptLCBpbnQgcywgaW50IG4sIGludCBob3VyLCBpbnQgaXNfY3cpOwoKaW50IG1haW4odm9pZCkKewogICAgaW50IHNwaXJhbF9tYXBbMTZdWzE2XTsKCWludCB5LCB4LCBuLCBoOwoKCXNjYW5mKCIlZCAlZCIsICZuLCAmaCk7CgltYWtlX3NwaXJhbChzcGlyYWxfbWFwLCAxNiwgbiwgaCwgMSk7CgoJZm9yICh5ID0gMDsgeSA8IG47IHkrKyl7CgkJZm9yICh4ID0gMDsgeCA8IG47IHgrKyl7CgkJCXByaW50ZigiJTRkIiwgc3BpcmFsX21hcFt5XVt4XSk7CgkJfQoJCXB1dHMoIiIpOwoJfQoKCXJldHVybiAoMCk7Cn0KCmludCBtYWtlX3NwaXJhbChpbnQgKm0sIGludCBzLCBpbnQgbiwgaW50IGhvdXIsIGludCBpc19jdykKewoJaW50IHgsIHk7CglpbnQgYywgbCwgdiwgaTsKCWludCB0W10gPSB7MCwgLTEsIDAsIDEsIDAsIC0xLCAwLCAxfTsKCWludCAqZCA9IHQgKyAoaG91ciAvIDMgJSA0ICsgNCAmIDMpOwoKCW4gJiAxIHx8IG4rKzsKCXggPSB5ID0gbiAvIDI7CgljID0gbCA9IHYgPSAwOwoJbiAqPSBuOwoKCWZvciAobVt5ICogcyArIHhdID0gKytjOyBjIDwgbjsgdiAmPSAzKXsKCQlmb3IgKGkgPSAwOyBpIDwgbDsgaSsrKXsKCQkJeCArPSBkW3YgKyAxXTsKCQkJeSArPSBkW3ZdICogKGlzX2N3ID8gMSA6IC0xKTsKCQkJbVt5ICogcyArIHhdID0gKytjOwoJCX0KCQlpZiAoKyt2ICYgMSkgbCsrOwoJfQoJcmV0dXJuICgwKTsKfQ==