Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #define nmax 100
- int bit (unsigned char v[nmax][nmax], int a, int b, int n) {
- if (a<0 || a>=8*n)return 0;
- if (b<0 || b>=8*n)return 0;
- if(v[a][b/8] & (1<<(b%8)))return 1;
- return 0;
- }
- int vecini ( int a, int b, unsigned char v[nmax][nmax],int n)
- {
- int k=0;
- if ( bit( v, a+1, b,n) )
- k++;
- if ( bit( v, a+1, b+1,n))
- k++;
- if ( bit( v, a-1, b,n) )
- k++;
- if ( bit( v, a-1, b+1,n))
- k++;
- if ( bit( v, a-1, b-1,n) )
- k++;
- if ( bit( v, a+1, b-1,n) )
- k++;
- if ( bit( v, a, b-1,n) )
- k++;
- if ( bit( v, a, b+1,n) )
- k++;
- return k;
- }
- void set ( unsigned char v[nmax][nmax], int a, int b, int valoare,int n)
- {
- v[a][b/8]=v[a][b/8] | (valoare<<(b%8));
- }
- void evolve ( unsigned char v1[nmax][nmax], unsigned char v2[nmax][nmax],int n)
- {
- int k=0;
- int i,j;
- for (i=0;i<8*n;i++)
- for (j=0;j<8*n;j++)
- if (bit(v1,i,j,n)){
- k=vecini(i,j,v1,n);
- if ((k!=3) && (k!=2))
- set (v2,i,j,0,n);
- else
- set (v2,i,j,1,n);
- }
- else
- {
- k=vecini(i,j,v1,n);
- if (k==3)
- set (v2,i,j,1,n);
- else
- set (v2,i,j,0,n);
- }
- }
- int main () {
- unsigned char v1[nmax][nmax],v2[nmax][nmax];
- int n,i,j,nrgen,k,t,y;
- scanf ("%d", &n);
- for (i=0;i<8*n;i++)
- for (j=0;j<n;j++) {
- scanf ("%d", &k);
- v1[i][j]=k;
- }
- scanf ("%d", &nrgen);
- for (i=1;i<=nrgen;i++)
- {
- if (i%2)
- {
- for(t=0;t<8*n;t++)
- for(y =0;y<n;y++)
- v2[t][y]=0;
- evolve (v1,v2,n);
- }
- else{
- for(t=0;t<8*n;t++)
- for(y =0;y<n;y++)
- v1[t][y]=0;
- evolve (v2,v1,n);}
- }
- if (nrgen%2) {
- for (i=0;i<8*n;i++)
- {
- for (j=0;j<n;j++)
- printf ("%d ",(int)v2[i][j]);
- printf ("\n");
- }
- }
- else
- {
- for (i=0;i<8*n;i++) {
- for (j=0;j<n;j++)
- printf ("%d ", (int)v1[i][j]);
- printf ("\n");
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement