class ĠWorld ( grid Width : ĠInt , Ġgrid Height : ĠInt ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġwidth : ĠInt Ġ= Ġgrid Width ĊĠĠĠ Ġprivate Ġval Ġheight : ĠInt Ġ= Ġgrid Height ĊĠĠĠ Ġprivate Ġval Ġcell Size : ĠInt Ġ= Ġ 1 0 ĊĠĠĠ Ġprivate Ġval Ġwidth Cells : ĠInt Ġ= Ġwidth Ġ/ Ġcell Size ĊĠĠĠ Ġprivate Ġval Ġheight Cells : ĠInt Ġ= Ġheight Ġ/ Ġcell Size ĊĠĠĠ Ġprivate Ġval Ġcells Ġ= Ġmutable ListOf < Cell >() ĊĊĠĠĠ Ġfun Ġget Cells (): ĠList < Cell > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcells ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Cell At Pos ( x : ĠInt , Ġy : ĠInt ): ĠCell Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( cell Ġin Ġcells ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cell . getX () Ġ== Ġx Ġ&& Ġcell . getY () Ġ== Ġy ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcell ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠCell (- 1 , Ġ- 1 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Neighbor Cells ( cell : ĠCell ): ĠMutable List < Cell > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġneighbor Cells Ġ= Ġmutable ListOf < Cell >() ĊĠĠĠĠĠĠĠ Ġval Ġcell X Ġ= Ġcell . getX () ĊĠĠĠĠĠĠĠ Ġval Ġcell Y Ġ= Ġcell . getY () ĊĊĠĠĠĠĠĠĠ Ġval Ġtop Left Cell Ġ= Ġget Cell At Pos ( cell X Ġ- Ġcell Size , Ġcell Y Ġ- Ġcell Size ) ĊĠĠĠĠĠĠĠ Ġval Ġtop Cell Ġ= Ġget Cell At Pos ( cell X , Ġcell Y Ġ- Ġcell Size ) ĊĠĠĠĠĠĠĠ Ġval Ġtop Right Cell Ġ= Ġget Cell At Pos ( cell X Ġ+ Ġcell Size , Ġcell Y Ġ- Ġcell Size ) ĊĠĠĠĠĠĠĠ Ġval Ġleft Cell Ġ= Ġget Cell At Pos ( cell X Ġ- Ġcell Size , Ġcell Y ) ĊĠĠĠĠĠĠĠ Ġval Ġright Cell Ġ= Ġget Cell At Pos ( cell X Ġ+ Ġcell Size , Ġcell Y ) ĊĠĠĠĠĠĠĠ Ġval Ġbottom Left Cell Ġ= Ġget Cell At Pos ( cell X Ġ- Ġcell Size , Ġcell Y Ġ+ Ġcell Size ) ĊĠĠĠĠĠĠĠ Ġval Ġbottom Cell Ġ= Ġget Cell At Pos ( cell X , Ġcell Y Ġ+ Ġcell Size ) ĊĠĠĠĠĠĠĠ Ġval Ġbottom Right Cell Ġ= Ġget Cell At Pos ( cell X Ġ+ Ġcell Size , Ġcell Y Ġ+ Ġcell Size ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( top Left Cell . getX () Ġ!= Ġ- 1 Ġ&& Ġtop Left Cell . getY () Ġ!= Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġneighbor Cells . add ( top Left Cell ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( top Cell . getX () Ġ!= Ġ- 1 Ġ&& Ġtop Cell . getY () Ġ!= Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġneighbor Cells . add ( top Cell ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( top Right Cell . getX () Ġ!= Ġ- 1 Ġ&& Ġtop Right Cell . getY () Ġ!= Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġneighbor Cells . add ( top Right Cell ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( left Cell . getX () Ġ!= Ġ- 1 Ġ&& Ġleft Cell . getY () Ġ!= Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġneighbor Cells . add ( left Cell ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( right Cell . getX () Ġ!= Ġ- 1 Ġ&& Ġright Cell . getY () Ġ!= Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġneighbor Cells . add ( right Cell ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( bottom Left Cell . getX () Ġ!= Ġ- 1 Ġ&& Ġbottom Left Cell . getY () Ġ!= Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġneighbor Cells . add ( bottom Left Cell ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( bottom Cell . getX () Ġ!= Ġ- 1 Ġ&& Ġbottom Cell . getY () Ġ!= Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġneighbor Cells . add ( bottom Cell ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( bottom Right Cell . getX () Ġ!= Ġ- 1 Ġ&& Ġbottom Right Cell . getY () Ġ!= Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġneighbor Cells . add ( bottom Right Cell ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġneighbor Cells ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcalculate Neighbor Alive Count () Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( cell Ġin Ġcells ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcell . reset Alive Neighbor Count () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġneighbor Cells Ġ= Ġget Neighbor Cells ( cell ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( neighbor Cell Ġin Ġneighbor Cells ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( neighbor Cell . is Alive ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcell . increment Alive Neighbor Count () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġactivate Cells () Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( cell Ġin Ġcells ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcell Alive Neighbor Count Ġ= Ġcell . get Alive Neighbor Count () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cell . is Alive ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cell Alive Neighbor Count Ġ< Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcell . kill () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( cell Alive Neighbor Count Ġ== Ġ 2 Ġ|| Ġcell Alive Neighbor Count Ġ== Ġ 3 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcell . activate Cell () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( cell Alive Neighbor Count Ġ> Ġ 3 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcell . kill () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cell Alive Neighbor Count Ġ== Ġ 3 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcell . activate Cell () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġactivate Random Cells () Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. 2 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcells [( 0 .. cells . size ). random ()]. activate Cell () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġactivate Cert ain Cells () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠA ĠCell ĠBlock ĊĠĠĠĠĠĠĠ Ġget Cell At Pos ( 3 Ġ* Ġcell Size , Ġ 3 Ġ* Ġcell Size ). activate Cell () ĊĠĠĠĠĠĠĠ Ġget Cell At Pos ( 4 Ġ* Ġcell Size , Ġ 3 Ġ* Ġcell Size ). activate Cell () ĊĠĠĠĠĠĠĠ Ġget Cell At Pos ( 3 Ġ* Ġcell Size , Ġ 4 Ġ* Ġcell Size ). activate Cell () ĊĠĠĠĠĠĠĠ Ġget Cell At Pos ( 4 Ġ* Ġcell Size , Ġ 4 Ġ* Ġcell Size ). activate Cell () ĊĊĠĠĠĠĠĠĠ Ġ// ĠAnother ĠCell ĠBlock ĊĠĠĠĠĠĠĠ Ġget Cell At Pos ( 3 0 Ġ* Ġcell Size , Ġ 5 Ġ* Ġcell Size ). activate Cell () ĊĠĠĠĠĠĠĠ Ġget Cell At Pos ( 3 1 Ġ* Ġcell Size , Ġ 5 Ġ* Ġcell Size ). activate Cell () ĊĠĠĠĠĠĠĠ Ġget Cell At Pos ( 3 0 Ġ* Ġcell Size , Ġ 6 Ġ* Ġcell Size ). activate Cell () ĊĠĠĠĠĠĠĠ Ġget Cell At Pos ( 3 1 Ġ* Ġcell Size , Ġ 6 Ġ* Ġcell Size ). activate Cell () ĊĊĠĠĠĠĠĠĠ Ġ// ĠA ĠB linker ĊĠĠĠĠĠĠĠ Ġget Cell At Pos ( 8 Ġ* Ġcell Size , Ġ 8 Ġ* Ġcell Size ). activate Cell () ĊĠĠĠĠĠĠĠ Ġget Cell At Pos ( 9 Ġ* Ġcell Size , Ġ 8 Ġ* Ġcell Size ). activate Cell () ĊĠĠĠĠĠĠĠ Ġget Cell At Pos ( 1 0 Ġ* Ġcell Size , Ġ 8 Ġ* Ġcell Size ). activate Cell () ĊĊĠĠĠĠĠĠĠ Ġ// ĠA ĠGl ider ĊĠĠĠĠĠĠĠ Ġget Cell At Pos ( 2 0 Ġ* Ġcell Size , Ġ 2 0 Ġ* Ġcell Size ). activate Cell () ĊĠĠĠĠĠĠĠ Ġget Cell At Pos ( 2 1 Ġ* Ġcell Size , Ġ 2 0 Ġ* Ġcell Size ). activate Cell () ĊĠĠĠĠĠĠĠ Ġget Cell At Pos ( 2 2 Ġ* Ġcell Size , Ġ 2 0 Ġ* Ġcell Size ). activate Cell () ĊĠĠĠĠĠĠĠ Ġget Cell At Pos ( 2 2 Ġ* Ġcell Size , Ġ 1 9 Ġ* Ġcell Size ). activate Cell () ĊĠĠĠĠĠĠĠ Ġget Cell At Pos ( 2 1 Ġ* Ġcell Size , Ġ 1 8 Ġ* Ġcell Size ). activate Cell () ĊĊĠĠĠĠĠĠĠ Ġ// ĠRandom Ġcells ĊĠĠĠĠĠĠĠ Ġactivate Random Cells () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġgo sper Gl ider Gun () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠFirst ĠCell ĠBlock ĊĠĠĠĠĠĠĠ Ġget Cell At Pos ( 2 Ġ* Ġcell Size , Ġ 9 Ġ* Ġcell Size ). activate Cell () ĊĠĠĠĠĠĠĠ Ġget Cell At Pos ( 3 Ġ* Ġcell Size , Ġ 9 Ġ* Ġcell Size ). activate Cell () ĊĠĠĠĠĠĠĠ Ġget Cell At Pos ( 2 Ġ* Ġcell Size , Ġ 1 0 Ġ* Ġcell Size ). activate Cell () ĊĠĠĠĠĠĠĠ Ġget Cell At Pos ( 3 Ġ* Ġcell Size , Ġ 1 0 Ġ* Ġcell Size ). activate Cell () ĊĊĠĠĠĠĠĠĠ Ġ// ĠSecond ĠCell ĠBlock ĊĠĠĠĠĠĠĠ Ġget Cell At Pos ( 3 6 Ġ* Ġcell Size , Ġ 7 Ġ* Ġcell Size ). activate Cell () ĊĠĠĠĠĠĠĠ Ġget Cell At Pos ( 3 7 Ġ* Ġcell Size , Ġ 7 Ġ* Ġcell Size ). activate Cell () ĊĠĠĠĠĠĠĠ Ġget Cell At Pos ( 3 6 Ġ* Ġcell Size , Ġ 8 Ġ* Ġcell Size ). activate Cell () ĊĠĠĠĠĠĠĠ Ġget Cell At Pos ( 3 7 Ġ* Ġcell Size , Ġ 8 Ġ* Ġcell Size ). activate Cell () ĊĊĠĠĠĠĠĠĠ Ġ// ĠLeft ĠSomething ĊĠĠĠĠĠĠĠ Ġget Cell At Pos ( 1 2 Ġ* Ġcell Size , Ġ 9 Ġ* Ġcell Size ). activate Cell () ĊĠĠĠĠĠĠĠ Ġget Cell At Pos ( 1 2 Ġ* Ġcell Size , Ġ 1 0 Ġ* Ġcell Size ). activate Cell () ĊĠĠĠĠĠĠĠ Ġget Cell At Pos ( 1 2 Ġ* Ġcell Size , Ġ 1 1 Ġ* Ġcell Size ). activate Cell () ĊĠĠĠĠĠĠĠ Ġget Cell At Pos ( 1 3 Ġ* Ġcell Size , Ġ 8 Ġ* Ġcell Size ). activate Cell () ĊĠĠĠĠĠĠĠ Ġget Cell At Pos ( 1 3 Ġ* Ġcell Size , Ġ 1 2 Ġ* Ġcell Size ). activate Cell () ĊĠĠĠĠĠĠĠ Ġget Cell At Pos ( 1 4 Ġ* Ġcell Size , Ġ 7 Ġ* Ġcell Size ). activate Cell () ĊĠĠĠĠĠĠĠ Ġget Cell At Pos ( 1 5 Ġ* Ġcell Size , Ġ 7 Ġ* Ġcell Size ). activate Cell () ĊĠĠĠĠĠĠĠ Ġget Cell At Pos ( 1 4 Ġ* Ġcell Size , Ġ 1 3 Ġ* Ġcell Size ). activate Cell () ĊĠĠĠĠĠĠĠ Ġget Cell At Pos ( 1 5 Ġ* Ġcell Size , Ġ 1 3 Ġ* Ġcell Size ). activate Cell () ĊĠĠĠĠĠĠĠ Ġget Cell At Pos ( 1 6 Ġ* Ġcell Size , Ġ 1 0 Ġ* Ġcell Size ). activate Cell () ĊĠĠĠĠĠĠĠ Ġget Cell At Pos ( 1 7 Ġ* Ġcell Size , Ġ 8 Ġ* Ġcell Size ). activate Cell () ĊĠĠĠĠĠĠĠ Ġget Cell At Pos ( 1 7 Ġ* Ġcell Size , Ġ 1 2 Ġ* Ġcell Size ). activate Cell () ĊĠĠĠĠĠĠĠ Ġget Cell At Pos ( 1 8 Ġ* Ġcell Size , Ġ 9 Ġ* Ġcell Size ). activate Cell () ĊĠĠĠĠĠĠĠ Ġget Cell At Pos ( 1 8 Ġ* Ġcell Size , Ġ 1 0 Ġ* Ġcell Size ). activate Cell () ĊĠĠĠĠĠĠĠ Ġget Cell At Pos ( 1 8 Ġ* Ġcell Size , Ġ 1 1 Ġ* Ġcell Size ). activate Cell () ĊĠĠĠĠĠĠĠ Ġget Cell At Pos ( 1 9 Ġ* Ġcell Size , Ġ 1 0 Ġ* Ġcell Size ). activate Cell () ĊĊĠĠĠĠĠĠĠ Ġ// ĠRight ĠSomething ĊĠĠĠĠĠĠĠ Ġget Cell At Pos ( 2 2 Ġ* Ġcell Size , Ġ 7 Ġ* Ġcell Size ). activate Cell () ĊĠĠĠĠĠĠĠ Ġget Cell At Pos ( 2 3 Ġ* Ġcell Size , Ġ 7 Ġ* Ġcell Size ). activate Cell () ĊĠĠĠĠĠĠĠ Ġget Cell At Pos ( 2 2 Ġ* Ġcell Size , Ġ 8 Ġ* Ġcell Size ). activate Cell () ĊĠĠĠĠĠĠĠ Ġget Cell At Pos ( 2 3 Ġ* Ġcell Size , Ġ 8 Ġ* Ġcell Size ). activate Cell () ĊĠĠĠĠĠĠĠ Ġget Cell At Pos ( 2 2 Ġ* Ġcell Size , Ġ 9 Ġ* Ġcell Size ). activate Cell () ĊĠĠĠĠĠĠĠ Ġget Cell At Pos ( 2 3 Ġ* Ġcell Size , Ġ 9 Ġ* Ġcell Size ). activate Cell () ĊĠĠĠĠĠĠĠ Ġget Cell At Pos ( 2 4 Ġ* Ġcell Size , Ġ 6 Ġ* Ġcell Size ). activate Cell () ĊĠĠĠĠĠĠĠ Ġget Cell At Pos ( 2 4 Ġ* Ġcell Size , Ġ 1 0 Ġ* Ġcell Size ). activate Cell () ĊĠĠĠĠĠĠĠ Ġget Cell At Pos ( 2 6 Ġ* Ġcell Size , Ġ 6 Ġ* Ġcell Size ). activate Cell () ĊĠĠĠĠĠĠĠ Ġget Cell At Pos ( 2 6 Ġ* Ġcell Size , Ġ 1 0 Ġ* Ġcell Size ). activate Cell () ĊĠĠĠĠĠĠĠ Ġget Cell At Pos ( 2 6 Ġ* Ġcell Size , Ġ 5 Ġ* Ġcell Size ). activate Cell () ĊĠĠĠĠĠĠĠ Ġget Cell At Pos ( 2 6 Ġ* Ġcell Size , Ġ 1 1 Ġ* Ġcell Size ). activate Cell () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsetup () Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( cell X Ġin Ġ 0 .. width Cells ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( cell Y Ġin Ġ 0 .. height Cells ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcells . add ( Cell ( cell X Ġ* Ġcell Size , Ġcell Y Ġ* Ġcell Size )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġactivate Cert ain Cells () ĊĠĠĠĠĠĠĠ Ġgo sper Gl ider Gun () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate () Ġ{ ĊĠĠĠĠĠĠĠ Ġcalculate Neighbor Alive Count () ĊĠĠĠĠĠĠĠ Ġactivate Cells () ĊĠĠĠ Ġ} Ċ }