#include #include #include #include char *m = "6m2o1v7{;~E|DvCq:k6m'bhbkcqhsmurnnhkdbdbh'L/U/T)a+n-q7sFtM{NtVga;M8A55@/L/'DM>H:A?>D;LCRJWPWU`X`Y`[_]h`bj^mSuFt>j3ZDPDM':r;st?q@oEoFnElDk>k 2048 || A > 2048 ) { return printf("%s {36<=width<=2048} {12<=height<=2048}\n", *J); } I = M + 1; C = I * A; q = malloc(C * 2); for(R = 6; R * R < M * A * 144; R += 6) {} b = malloc(R * R); o = malloc(C * (LL = 2 * sizeof(int))); if( !q || !b || !o ) { puts("Out of memory"); return 1; } srand(time(NULL)); srand(7); p = q; for(y = 0; y < A * 2; y++) { for(x = 0; x < I; x++) *p++ = y && y < A * 2 - 1 && x && x < M - 1 ? r() > 0.47 ? 0 : 1 : 15; } for(t = 0; t < 3; t++) { for(y = 1; y < A * 2 - 1; y++) { for(x = 1; x < M - 1; q[y * I + x++] |= z > 3 ? 2 : 0) for(z = v = -1; v < 2; v++) for(u = -1; u < 2; u++) z += q[(y + v) * I + x + u] & 1; } p = q; for(x = 0; x < C * 2; x++) *p++ /= 2; } p = q; for(y = 0; y < A * 2; y += 2) { for(x = 0; x < I; x++) *p++ = q[y * I + x] | q[-~y * I + x]; } *p = 0; for(t = 0; t < 4; t++) { x = r() * C; x += strlen(q + x); if( x >= C ) x = strlen(q); if( x >= C ) { t = 4; x = 0; } if( t & 3 ) { for(v = u % I; x % I - v && q[x] - 2; x += x % I > v ? -1 : 1) { q[x] = 0; } for(; x - u && q[x] - 2; x += x > u ? -I : I) { q[x] = 0; } q[x] = 0; } *o = x; for(y = 1; y;) { if( !q[v = o[--y]] ) { q[v] = 2; o[y++] = v - M - 1; o[y++] = v - 1; o[y++] = v + I; o[y++] = v + 1; } } u = x; } p = q; for(y = 0; y < A; y++, *p++ = 10) { for(x = 0; x < M; x++, p++) *p = *p - 2 ? 1 : 32; } j = 6; for(z = R; z - j > 1 || z == u;) { u = (j + z) / 2; memset(b, 0, R * R); S = u / 90.0; v = 0; for(p = m; i(0) > 0; p += 3) { for(memset(o, 0, u * LL); i(2) > 0; p += 6) { for(t = 0; t < u * 4; t++) { Z = t / (u * 4.0); x = L(); p++; y = L(); p--; g = o + y * 2; if( *g ) { *g = *g < x ? *g : x; g++; *g = *g > x ? *g : x; } else { *g = g[1] = x; v = v > y ? v : y; } } } g = o; for(y = 0; y < u; y++, g += 2) for(x = *g; *g && x <= g[1]; x++) b[y * u + x] = p < m + 73 ? (x + y) & 1 : 1; } w = b; for(y = 0; y <= v; y += 6) { p = w; for(x = 0; x < u; x++) { if( (*w++ = 63 + b[y * u + x] + b[-~y * u + x] * 2 + b[(y + 2) * u + x] * 4 + b[(y + 3) * u + x] * 8 + b[(y + 4) * u + x] * 16 + b[(y + 5) * u + x] * 32) > 63 ) p = w; } w = p; *w++ = 45; } *w = 0; w = q + sprintf(q, "\x1bPq\"1;1;%d;%d#1;2;100;100;100#1", u, u); E = *w = 1; for(p = b; E && *p; W()) { for(v = 0; *p - 45 && p[v] == *p && v < 99; v++) {} if( v > 3 ) { x = strcspn(w, n); if( x > 3 && v > 9 ) { *w++ = 33; *w++ = v / 10 + 48; *w++ = v % 10 + 48; p += v - 1; } else if( x > 2 ) { if( v > 9 ) v = 9; *w++ = 33; *w++ = 48 + v; p += v - 1; } } *w++ = *p++; } for(; w - q < C - 3 && E; *w++ = 36) { W(); } if( E ) j = u; else z = u; } strcpy(w, "\x1b\\"); puts(q); return 0; }