Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<string.h>
- #include<stdio.h>
- const int m = 48;
- int draws[48][9];
- int board[27] = {0};
- void invert(int* dst , int* src)
- {
- int i;
- for(i=0 ; i<9 ; i++)
- dst[i] = 1-src[i];
- }
- void rot180(int* dst , int* src)
- {
- int i;
- for(i=0 ; i<9 ; i++)
- dst[i] = src[8-i];
- }
- void transpose2d(int* dst , int* src)
- {
- int i;
- for(i=0 ; i<9 ; i++)
- dst[i] = src[i/3 + (i%3)*3];
- }
- void mirror2d(int* dst , int* src)
- {
- int i;
- for(i=0 ; i<9 ; i++)
- dst[i] = src[i+2-2*(i%3)];
- }
- int isDraw()
- {
- int draw = 1;
- int i;
- for(i=0 ; i<9 ; i++)
- draw = draw && (board[i] + board[i+9] + board[i+18])%3;
- for(i=0 ; i<3 ; i++)
- draw = draw && (board[i] + board[i+12] + board[i+24])%3 && (board[i+6] + board[i+12] + board[i+18])%3;
- for(i=0 ; i<9 ; i+=3)
- draw = draw && (board[i] + board[i+10] + board[i+20])%3 && (board[i+2] + board[i+10] + board[i+18])%3;
- for(i=-4 ; i<=4 ; i+=2)
- draw = draw && (board[i+4] + board[13] + board[-i+22])%3;
- return draw;
- }
- void main()
- {
- int i,j,k;
- int no = 0 , yes = 0;
- int draw0[] = {1,0,0,0,1,1,0,1,0};
- int draw1[] = {1,0,1,0,1,0,0,1,0};
- int draw2[] = {1,0,0,0,1,1,1,1,0};
- memcpy( &draws[0] , &draw0 , 9*sizeof(int) );
- memcpy( &draws[1] , &draw1 , 9*sizeof(int) );
- memcpy( &draws[2] , &draw2 , 9*sizeof(int) );
- for(i=3 ; i<6 ; i++)
- rot180(draws[i] , draws[i-3]);
- for(i=6 ; i<12 ; i++)
- transpose2d(draws[i] , draws[i-6]);
- for(i=12 ; i<24 ; i++)
- mirror2d(draws[i] , draws[i-12]);
- for(i=24 ; i<48 ; i++)
- invert(draws[i] , draws[i-24]);
- for(i=0 ; i<m ; i++)
- {
- memcpy( &board[0] , &draws[i] , 9*sizeof(int) );
- for(j=0 ; j<m ; j++)
- {
- memcpy( &board[9] , &draws[j] , 9*sizeof(int) );
- for(k=0 ; k<m ; k++)
- {
- memcpy( &board[18] , &draws[k] , 9*sizeof(int) );
- if(isDraw())
- yes ++;
- else
- no ++;
- }
- }
- }
- printf("draws: %d without draw: %d\n",yes,no);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement