Complete Cell State After D Days - Spicy Coders

Recent

Thursday, August 31, 2017

Complete Cell State After D Days

There is a colony of 8 cells arranged in a straight line where each day every cell competes with its adjacent cells(neighbours). Each day, for each cell, if it's neighbours are both active or both inactive, the cell becomes inactive the next day, otherwise it becomes active the next day.
The two cells at the ends have only single adjacent cell, so the other imaginary adjacent cell can be assumed to be always inactive.
On a given day, even after updating the cell state, consider it's previous day's state for updating the state of other cells.
Complete the function cellComplete which takes an 8 element array of integer cells representing the current state of 8 cells and an integer D days representing the number of days to simulate.
An integer value of 1 represents an active cell and value of 0 represents an inactive cell.
Input Format:
The first line contains 8 integer values representing the initial state of the cells.
The second line contains D - which represents the number of days.
Output Format:
The first line contains the state of the cells after D days.
Boundary Conditions:
1 <= D <= 1000
Example Input/Output 1:
Input:
1 0 0 0 0 1 0 0
3
Output:
0 0 1 1 1 0 1 0
Example Input/Output 2:
Input:
1 0 0 0 0 1 0 0
2
Output:
1 0 1 1 0 0 0 1


Source code:\\C
#include<stdio.h>
#define CELLSCOUNT 8 
int* cellComplete(int cells[], int days) {
    int i,j,a[8];
for(j=0;j<days;j++){
    int c=0;
    while(c<CELLSCOUNT){
        a[c]=cells[c];
        c++;
    }
    for(i=0;i<CELLSCOUNT;i++){
        if(i==0||i==CELLSCOUNT){
            if(a[i+1]==0||a[i-1]==0)
            cells[i]=0;
            else
            cells[i]=1;
        }
        else if(a[i+1]==0&&a[i-1]==0||a[i+1]==1&&a[i-1]==1)
        cells[i]=0;
        else
        cells[i]=1;
    }
}
return cells;
}int main() {
       int cells[CELLSCOUNT];

       //Accept the input for the cell values
       int index;
       for (index = 0; index < CELLSCOUNT; index++) {
           scanf("%d",&cells[index]);
       }

       int DAYS;
       scanf("%d",&DAYS); //Get the number of days
       int* modified = cellComplete(cells, DAYS);

       //Print the modified cell values
       for (index = 0; index < CELLSCOUNT; index++) {
           printf("%d ",modified[index]);
       }
   }


//Java:

import java.util.*;

public class Hello{

    final static int CELLCOUNT = 8;
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int cells[] = new int[CELLCOUNT];
        for(int index=0; index < CELLCOUNT; index++){
            cells[index]=sc.nextInt();
        }
        int daysToProcess = sc.nextInt();
        cells = cellComplete(cells, daysToProcess);
         
        for(int index=0; index < CELLCOUNT; index++){
            System.out.print(cells[index] + " ");
        }
    }
   static int[] cellComplete(int cells[], int days){
   int i,j,t=0,p,n;
   for(i=0;i<days;i++)
     for(j=0;j<8;j++)
      {
         p=(j==0)?0:t;
         n=(j==7)?0:cells[j+1];
         t=cells[j];
         cells[j]=(p==n)?0:1;
       }
    return cells;

}


No comments:

Post a Comment