#include #include #include typedef struct card { char c; char t; int val; } CARD; #define D(x) #define PLS 0 #define PLW 1 #define PLN 2 #define PLE 3 CARD player[4][15]; int occ[4]; int value(char t) { if (isdigit(t)) return t-'0'; switch (t) { case 'T': return 10; case 'J': return 11; case 'Q': return 12; case 'K': return 13; case 'A': return 14; } D(printf("[UNKNOWN type: %c]\n", t)); return -1; } void sep() { int i; for (i=0;i<13;i++) printf("+---"); printf("+\n"); } void types(int pl) { int i; for (i=0; i<13;i++) printf("|%c %c", player[pl][i].t, player[pl][i].t); printf("|\n"); } void disp(int pl) { int i; switch (pl) { case 0: printf("South player:\n"); break; case 1: printf("West player:\n"); break; case 2: printf("North player:\n"); break; case 3: printf("East player:\n"); break; } sep(); types(pl); for (i=0; i<13;i++) printf("| %c ", player[pl][i].c); printf("|\n"); types(pl); sep(); } int color_val(char col) { switch (col) { case 'C': return 0; case 'D': return 1; case 'S': return 2; case 'H': return 3; default: D(printf("[wrong color!]\n")); return -1; } } int compare(CARD *c1, CARD *c2) { int diff = color_val(c1->c) - color_val(c2->c); if (diff) return diff; return c1->val - c2->val; } int main() { while (1) { int dealer,i; char deal; char buf[1024]; scanf("%c\n%s\n%s\n", &deal, buf, buf+52); D(printf("[INPUT: %c ||| %s]\n", deal, buf)); if (deal == '#') break; if (feof(stdin)) { D(printf("[UNTERM!]\n")); break; } switch(deal) { default: D(printf("[bad dealer: %c]\n",deal)); case 'N': dealer = PLN; break; case 'E': dealer = PLE; break; case 'W': dealer = PLW; break; case 'S': dealer = PLS; break; } occ[0]=occ[1]=occ[2]=occ[3]=0; for (i=0;i<52;i++) { char col=buf[2*i]; char typ=buf[2*i+1]; int pl=(dealer+1+i)%4; player[pl][occ[pl]].c = col; player[pl][occ[pl]].t = typ; player[pl][occ[pl]++].val = value(typ); } /*sort here*/ for (i=0;i<4;i++) { qsort(player[i], 13, sizeof(CARD), compare); disp(i); } } return 0; }