#include #include #define JF 0 #define JG 1 #define JH 2 #define JI 3 #define a(p,q,r,s) s=(pM=L[J##p]; ((p##0)s->M[0])(s r); U s; } #define k(p, q) C struct { K* M; q } p #define l(p) printf(O+p #define m(p, q) (_->P+(q<<4&0360))[017&p] #define n void #define o int #define A char #define B const #define C typedef #define D C n #define E C o #define U return #define V(p) (p<3)?0:(p<6)?3:6 #define W(p,q,r) ((p)q->M[r])(q) B A* B O = " %c%s\0\n0 1 2 3 4 5 6 7 8\n\n\0%s\n\0you win\0you: \0%1s\0%d %d\0you lose\0cpu: %c %d %d\n\0 \0"; D (*K)(n); k(F, o P[00400]; ); k(G, F* Q; B A* R; ); k(H, F* Q; B A* R; ); k(I, F* Q; B A* R; ); D (*F0)(F*); E (*F1)(F*); D (*F2)(F*, o, o, o); E (*F3)(F*, o, o, o); D (*F4)(F*); D (*G0)(G*, F*); E (*G1)(G*); E (*G2)(G*, o*, o*, o*); E (*G3)(G*); D (*H0)(H*, F*); D (*I0)(I*, F*); n OOOO(F* _) { o p; c(p, 0, 0xFF) _->P[p] = 0; } o OOOl(F* _) { o p, q, r; e(p, 0, 9, q, 0, 9, r, 1, 10) if(((F3)_->M[3])(_, p, q, r)) U 1; U 0; } n OOlO(F* _, o p, o q, o r) { m(p,q) = r; } o OOll(F* _, o r, o s, o t) { o u = 0; if(t > 0 && t < 10 && r >= 0 && r < 9 && s >= 0 && s < 9 && m(r,s) == 0) { o p, q; o w = V(r); o x = V(s); c(p, 0, 9) if(m(p,s) == t || m(r,p) == t) goto v; d(p, w, w+3, q, x, x+3) if(m(p,q) == t) goto v; u = 1; v: U u; } goto v; } n OlOO(F* _) { o p, q; for(q = 0, l(28)), p = 0; q < 9; p++, q = (p < 9)?q:(p=0,l(0), q+'a', O+((q == 2 || q == 5) ? 27 : 28)),q+1)) { l(2), m(p,q) == 0 ? '.' : '0' + m(p,q), O+((p == 2 || p==5) ? 82 : 83)); } l(7)); } n lOll(G* _, F* p) { _->Q = p; _->R = O+6; } o OlOl(G* _) { o p, q, r; if(((G2)_->M[2])(_, &p, &q, &r)) { ((F2)_->Q->M[2])(_->Q, p, q, r); U 1; } U 0; } n OllO(G* _) { l(30), _->R); } n Olll(H* _, F *p) { lOll((G*)_, p); _->R = O+34; } o lOOO(H* _, o* p, o* q, o* r) { do { A s[3]; l(42)); fflush(stdout); scanf(O+48, s); if(*s == 'q') U 0; else *q = (*s >= 'a' && *s <= 'i') ? *s - 'a' : 9; scanf(O+52, p, r); } while(!((F3)_->Q->M[3])(_->Q, *p, *q, *r)); U 1; } n lOOl(I* _, F* p) { lOll((G*)_, p); _->R = O+58; } o lOlO(I* _, o* p, o* q, o* r) { o s, t, u; o v = 0; o w[01331]; e(s, 0, 9, t, 0, 9, u, 1, 10) if(((F3)_->Q->M[3])(_->Q, s, t, u)) w[v++] = s | (t << 5) | (u << 10); s = rand() % v; *p = w[s] & 0x1f; *q = (w[s] & 0x3e0) >> 5; *r = (w[s] & 0x7c00) >> 10; l(67), *q + 'a', *p, *r); U 1; } K M[17] = { (K)OOOO, (K)OOOl, (K)OOlO, (K)OOll, (K)OlOO, (K)0000, (K)OlOl, (K)0000, (K)OllO, (K)Olll, (K)OlOl, (K)lOOO, (K)OllO, (K)lOOl, (K)OlOl, (K)lOlO, (K)OllO } ; K* L[4] = { M+0x0, M+0x5, M+0x9, M+0xD } ; h(F) i(G, F*) i(I, F*) i(H, F*) o main(o s, A** t) { o p = 42; F* q = 0; G* r[2] = { 0, 0} ; if(s-- > 1) { srand(atoi(t[s])); U main(s, t); } q = NF(); r[0] = (G*)NH(q); r[1] = (G*)NI(q); for(p&=1; !(p&4); p&=5) { W(F4,q,4); if(W(G1,r[p],1)) { if(!W(F1,q,1)) { W(F4,q,4); W(G3,r[p],3); p = 4; } } else { p = 4; } p++; } free((n*)q); free((n*)r[0]); free((n*)r[1]); U 0; }