import java.util.List;
import java.util.ArrayList;

public class Cell {
  private static int numBlack;
  private List<Cell> neighbors;
  private boolean isBlack = false;
  private boolean nextIsBlack = false;
  public Cell (boolean startState) {
    isBlack = startState;
    if (isBlack) {
      numBlack++;
    }
    neighbors = new ArrayList<Cell>();
  }
  public void setNeighbor(Cell c) {
    neighbors.add(c);
  }
  public void computeNextState() {
    int numBlack = 0;
    for (Cell c : neighbors) {
      if (c.isBlack()) {
        numBlack++;
      }
    }
    if (isBlack) {
      if (numBlack < 2 || numBlack > 3) {
        nextIsBlack = false;
      } else {
        nextIsBlack = true;
      }
    } else if (numBlack == 3) {
      nextIsBlack = true;
    }
  }
  public boolean isBlack() {
    return isBlack;
  }
  public void nextState() {
    if (isBlack && !nextIsBlack) {
      numBlack--;
    } else if (!isBlack && nextIsBlack) {
      numBlack++;
    }
    isBlack = nextIsBlack;
  }
  public static int getNumBlack() {
    return numBlack;
  }
}
