#include <stdio.h>
#include <string.h>
// plane size
#define FSIZE_X 160
#define FSIZE_Y 80
#define SPACE_CH ' '
int draw_plane(char *p, int x, int y, char *str) {
int len, i;
if ((x < 0) || (x + len - 1 >= FSIZE_X) ||
(y < 0) || (y >= FSIZE_Y)) return 1;
for (i = 0; i < len; i++) {
p[y * FSIZE_X + x + i] = str[i];
}
return 0;
}
int print_plane(char *p) {
int x1, y1, x2, y2, x, y, i;
char str[FSIZE_X + 1];
x1 = FSIZE_X - 1;
x2 = 0;
y1 = FSIZE_Y - 1;
y2 = 0;
for (x = 0; x < FSIZE_X; x++) {
for (y = 0; y < FSIZE_Y; y++) {
if (p[y * FSIZE_X + x] != SPACE_CH) {
if (x < x1) x1 = x;
if (y < y1) y1 = y;
if (x > x2) x2 = x;
if (y > y2) y2 = y;
}
}
}
for (y = y1; y <= y2; y++) {
i = 0;
for (x = x1; x <= x2; x++) {
str[i] = p[y * FSIZE_X + x];
i++;
}
str[i] = 0;
}
return 0;
}
int draw_hex(int n) {
char p[FSIZE_X * FSIZE_Y];
int md[6] = { 1, 0, 1, 1, 1, 1};
int xd[6] = { 1, -1, -4, -1, 1, 0};
int yd[6] = { -1, -1, 0, 1, 1, 0};
int xad[6] = { 1, -1, 0, -1, 1, 4};
int yad[6] = { -1, -1, 0, 1, 1, 0};
char *ach[6] = {"/", "\\", "----", "/", "\\", "----"};
int x, y, xp, yp, m, co, i;
char str[32];
for (i = 0; i < FSIZE_X * FSIZE_Y; i++) {
p[i] = SPACE_CH;
}
x = FSIZE_X / 2;
y = FSIZE_Y / 2;
m = 0;
co = 0;
for (i = 0; i < n; i++) {
xp = x;
yp = y;
while(md[m] == 0) {
md[m]++;
m++;
m = m % 6;
}
if (co == 0) {
co = md[m];
}
x += xd[m];
y += yd[m];
draw_plane(p, x, y, ach[m]);
x += xad[m];
y += yad[m];
snprintf(str
, sizeof(str
) - 1, "%d", i
); draw_plane
(p
, xp
- strlen(str
) + 1, yp
, str
);
co--;
if (co == 0) {
md[m]++;
m++;
m = m % 6;
}
}
snprintf(str
, sizeof(str
) - 1, "%d", i
); draw_plane
(p
, x
- strlen(str
) + 1, y
, str
);
print_plane(p);
return 0;
}
int main(void) {
// your code goes here
draw_hex(0);
draw_hex(6);
draw_hex(32);
draw_hex(99);
draw_hex(200);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KCi8vIHBsYW5lIHNpemUKI2RlZmluZSBGU0laRV9YIDE2MAojZGVmaW5lIEZTSVpFX1kgODAKCiNkZWZpbmUgU1BBQ0VfQ0ggJyAnCgppbnQgZHJhd19wbGFuZShjaGFyICpwLCBpbnQgeCwgaW50IHksIGNoYXIgKnN0cikgewoJaW50IGxlbiwgaTsKCQoJbGVuID0gc3RybGVuKHN0cik7CglpZiAoKHggPCAwKSB8fCAoeCArIGxlbiAtIDEgPj0gRlNJWkVfWCkgfHwgCgkgICAgKHkgPCAwKSB8fCAoeSA+PSBGU0laRV9ZKSkgcmV0dXJuIDE7Cglmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKCQlwW3kgKiBGU0laRV9YICsgeCArIGldID0gc3RyW2ldOwoJfQoJcmV0dXJuIDA7Cn0KCmludCBwcmludF9wbGFuZShjaGFyICpwKSB7CglpbnQgeDEsIHkxLCB4MiwgeTIsIHgsIHksIGk7CgljaGFyIHN0cltGU0laRV9YICsgMV07CgkKCXgxID0gRlNJWkVfWCAtIDE7Cgl4MiA9IDA7Cgl5MSA9IEZTSVpFX1kgLSAxOwoJeTIgPSAwOwoJCglmb3IgKHggPSAwOyB4IDwgRlNJWkVfWDsgeCsrKSB7CgkJZm9yICh5ID0gMDsgeSA8IEZTSVpFX1k7IHkrKykgewoJCQlpZiAocFt5ICogRlNJWkVfWCArIHhdICE9IFNQQUNFX0NIKSB7CgkJCQlpZiAoeCA8IHgxKSB4MSA9IHg7CgkJCQlpZiAoeSA8IHkxKSB5MSA9IHk7CgkJCQlpZiAoeCA+IHgyKSB4MiA9IHg7CgkJCQlpZiAoeSA+IHkyKSB5MiA9IHk7CgkJCX0KCQl9Cgl9CgkKCWZvciAoeSA9IHkxOyB5IDw9IHkyOyB5KyspIHsKCQlpID0gMDsKCQlmb3IgKHggPSB4MTsgeCA8PSB4MjsgeCsrKSB7CgkJCXN0cltpXSA9IHBbeSAqIEZTSVpFX1ggKyB4XTsKCQkJaSsrOwoJCX0KCQlzdHJbaV0gPSAwOwoJCXByaW50ZigiJXNcbiIsIHN0cik7Cgl9CglyZXR1cm4gMDsKfQoKaW50IGRyYXdfaGV4KGludCBuKSB7CgljaGFyIHBbRlNJWkVfWCAqIEZTSVpFX1ldOwoJaW50IG1kWzZdICA9IHsgIDEsICAwLCAgMSwgIDEsICAxLCAgMX07CglpbnQgeGRbNl0gID0geyAgMSwgLTEsIC00LCAtMSwgIDEsICAwfTsKCWludCB5ZFs2XSAgPSB7IC0xLCAtMSwgIDAsICAxLCAgMSwgIDB9OwoJaW50IHhhZFs2XSA9IHsgIDEsIC0xLCAgMCwgLTEsICAxLCAgNH07CglpbnQgeWFkWzZdID0geyAtMSwgLTEsICAwLCAgMSwgIDEsICAwfTsKCWNoYXIgKmFjaFs2XSA9IHsiLyIsICJcXCIsICItLS0tIiwgIi8iLCAiXFwiLCAiLS0tLSJ9OwoJaW50IHgsIHksIHhwLCB5cCwgbSwgY28sIGk7CgljaGFyIHN0clszMl07CgkKCWZvciAoaSA9IDA7IGkgPCBGU0laRV9YICogRlNJWkVfWTsgaSsrKSB7CgkJcFtpXSA9IFNQQUNFX0NIOwoJfQoJCgl4ID0gRlNJWkVfWCAvIDI7Cgl5ID0gRlNJWkVfWSAvIDI7CgltID0gMDsKCWNvID0gMDsKCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKCQl4cCA9IHg7CgkJeXAgPSB5OwoJCQoJCXdoaWxlKG1kW21dID09IDApIHsKCQkJbWRbbV0rKzsKCQkJbSsrOwoJCQltID0gbSAlIDY7CgkJfQoJCQoJCWlmIChjbyA9PSAwKSB7CgkJCWNvID0gbWRbbV07CgkJfQoJCQoJCXggKz0geGRbbV07CgkJeSArPSB5ZFttXTsKCQlkcmF3X3BsYW5lKHAsIHgsIHksIGFjaFttXSk7CgkJeCArPSB4YWRbbV07CgkJeSArPSB5YWRbbV07CgkJCgkJc25wcmludGYoc3RyLCBzaXplb2Yoc3RyKSAtIDEsICIlZCIsIGkpOwoJCWRyYXdfcGxhbmUocCwgeHAgLSBzdHJsZW4oc3RyKSArIDEsIHlwLCBzdHIpOwoJCQoJCWNvLS07CgkJaWYgKGNvID09IDApIHsKCQkJbWRbbV0rKzsKCQkJbSsrOwoJCQltID0gbSAlIDY7CgkJfQoJfQoJc25wcmludGYoc3RyLCBzaXplb2Yoc3RyKSAtIDEsICIlZCIsIGkpOwoJZHJhd19wbGFuZShwLCB4IC0gc3RybGVuKHN0cikgKyAxLCB5LCBzdHIpOwoJCglwcmludGYoIm49JWRcbiIsIG4pOwoJcHJpbnRfcGxhbmUocCk7CglwcmludGYoIlxuIik7CglyZXR1cm4gMDsKfQoKaW50IG1haW4odm9pZCkgewoJLy8geW91ciBjb2RlIGdvZXMgaGVyZQoJZHJhd19oZXgoMCk7CglkcmF3X2hleCg2KTsKCWRyYXdfaGV4KDMyKTsKCWRyYXdfaGV4KDk5KTsKCWRyYXdfaGV4KDIwMCk7CglyZXR1cm4gMDsKfQo=