#include #include #include #define N O-> #define Li(V,K)[(K)*Ga/32+V/32] #define Mg(P,V,K)(P Li(V,K)>>(V&31)&1) #define H(P,V,K)(P Li(V,K)|=1<<(V&31)) #define U(P)calloc(P,1) #define Au(V,K)Al[K|N U+V+V-1&7] #define Ti(V,I,K,Y)((V^I&&K^Y&&I=Li/2)+(V>D[P],Au(P,8)>>D[P], N V, N K)) Ar *U, *Au, W, Li, F; Mo Al[27]; S { Ar V, K, U, T; S *H; } *C, *Zn; S * Zr (Mo V, Mo K, Mo T) { S *O = C, *W = Zn; *(Mg(U, V, K)?&W:&O)=0; while (O) O = (W = !N T || (N T &= -!!(N V - V | N K - K | !(T - N T ^ 1))) ? O : 0) ? N H : 0; return W; } void Ag (Mo V, Mo K, Mo P, Mo T, S * O) { S *H = (O ? N H : C); *(H ? &O : &Zn) = O = *(O ? &N H : &C) = U (sizeof (S)); N U = P; N T = T; N H = H; N V = V; N K = K; F & 32 || H(U, V, K); } void main (Mo V, char ** O) { char *H, Sg[106]; srand (time (0)); while (*++O && (sscanf (*O, "%lu", W ? &Li : &W) || (--**O, F |= !((**O - 57) % 14) << (**O - 57) / 14)) ); puts("%!\n/S{ 0 setlinewidth} /N{ showpage} /O{ moveto rlineto stroke} def def def S"); for (V = 0; V < 8; Al[8 | (V - 2) & 7] = Al[V] = !!(V & 3) * (1 - (V & 4) / 2) * 4, V++); do { U = U (V = (As * Ga + 31) / 8); Au = U (V); for (*U = -W-1, H = U(W); ++*U; H[*U+W] = Mn); Ag (Ga / 2, As / 2, 5, 1, C); Ag (Ga / 2, As / 2, 1, 1, C); while (C) { Ar I[7], Y[5], D[13]; S *Ge, *O = C; if (N T) { D[8] = (F & 4 ? Mn : W ? H[N T % W] : (N T & 85) % 3); W ((!!C>>!C)); W ((!!C<> 1) | F & 1)); }