Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.*;
- import java.lang.*;
- public class Test {
- public static void main(String args[]) {
- int n = Integer.parseInt(args[0]);
- Cell Field[][] = new Cell[n][n];
- int counter=0;
- for(int i=0; i<n;i++){
- for (int j=0; j<n;j++){
- Field[i][j]=new Cell(false, 0);
- }
- }
- Cell Check = new Cell(false, 0);
- Initialization(n,Field);
- do {
- Neighborhood(n,Field);
- Existence(n,Field);
- if( counter==0){System.out.println("First (Random) iteration: ");Draw(n,Field);}
- counter++;
- } while(!Check.CheckChanges());
- System.out.println(counter + " iterations soon..");
- Draw(n,Field);
- }
- private static void Initialization(int n, Cell Field[][]){
- Random r = new Random(System.currentTimeMillis());
- for (int i=0;i<n;i++){
- for(int j=0; j<n;j++){
- if(r.nextBoolean()) Field[i][j].SetCell();
- }
- }
- }
- private static void Neighborhood(int n,Cell Field[][]){
- for (int i = 0;i < n;i++){
- for(int j = 0; j < n;j++){
- Field[i][j].NeighArrayReset();
- if ((j - 1 >= 0) && Field[i][j - 1].Flag) Field[i][j].NeighborhoodProc(1,0);
- if ((j + 1 < n) && Field[i][j + 1].Flag) Field[i][j].NeighborhoodProc(1,2);
- if ((i + 1 < n) && Field[i + 1][j].Flag) Field[i][j].NeighborhoodProc(2,1);
- if ((i - 1 >= 0) && Field[i - 1][j].Flag) Field[i][j].NeighborhoodProc(0,1);
- if ((j + 1 <n) && (i +1 <n) && Field[i + 1][j + 1].Flag) Field[i][j].NeighborhoodProc(2,2);
- if ((j - 1 >= 0) && (i -1 >=0) && Field[i - 1][j - 1].Flag) Field[i][j].NeighborhoodProc(0,0);
- if ((j - 1 >= 0) && (i + 1<n) && Field[i + 1][j - 1].Flag) Field[i][j].NeighborhoodProc(2,0);
- if ((i - 1 >= 0) && (j + 1<n) && Field[i - 1][j + 1].Flag) Field[i][j].NeighborhoodProc(0,2);
- }
- }
- }
- private static void Existence(int n, Cell Field[][]){
- for (int i=0; i<n; i++){
- for (int j=0; j<n; j++){
- Field[i][j].CheckExistence();
- }
- }
- }
- private static void Draw(int n, Cell Field[][]){
- for (int i=0; i<n; i++){
- for (int j=0; j<n; j++){
- if(j+1==n) {
- if (Field[i][j].Flag) System.out.println(" O ");
- else System.out.println(" # ");
- } else {
- if (Field[i][j].Flag) System.out.print(" O ");
- else System.out.print(" # ");
- }
- }
- }
- }
- }
- class Cell {
- private static long Counter=0;
- private static long Changes=0;
- private boolean CellFlag;
- private int Neighbors;
- boolean Flag;
- private int[][] NeighArray ={{0,0,0},{0,0,0},{0,0,0}};
- Cell(boolean Cell, int n){
- CellFlag = Cell;
- Neighbors = n;
- Flag=CellFlag;
- }
- void SetCell(){
- CellFlag=true;
- Flag=true;
- Neighbors =0;
- }
- private void PopCell(){
- CellFlag=false;
- Flag = false;
- NeighArrayReset();
- }
- void CheckExistence() {
- if(CellFlag) ResetExistence();
- else SetExistence();
- }
- private void ResetExistence(){
- if (Neighbors>3 || Neighbors<2){
- PopCell();
- Counter++;
- }
- }
- private void SetExistence(){
- if (Neighbors==3) {
- SetCell();
- Counter++;
- }
- }
- boolean CheckChanges(){
- if (Changes==Counter) return true;
- else Changes=Counter;
- return false;
- }
- void NeighborhoodProc(int i, int j){
- if(NeighArray[i][j]!=1){
- NeighArray[i][j]=1;
- Neighbors++;
- }
- }
- void NeighArrayReset(){
- for (int i=0; i<3; i++){
- for (int j=0; j<3; j++){
- NeighArray[i][j]=0;
- }
- }
- Neighbors=0;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement