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.
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.
The first line contains the state of the cells after D days.
Boundary Conditions:
1 <= D <= 1000
1 <= D <= 1000
Example Input/Output 1:
Input:
1 0 0 0 0 1 0 0
3
Input:
1 0 0 0 0 1 0 0
3
Output:
0 0 1 1 1 0 1 0
0 0 1 1 1 0 1 0
Example Input/Output 2:
Input:
1 0 0 0 0 1 0 0
2
Input:
1 0 0 0 0 1 0 0
2
Output:
1 0 1 1 0 0 0 1
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