package Ġcom . kode inc . con way . algorithm Ċ Ċ private Ġfun Ġempty Map Fun ( x : ĠInt , Ġy : ĠInt , Ġmap : ĠCell Map ? Ġ= Ġnull ) Ġ= ĠDE AD _ CELL Ċ Ċ internal Ġenum Ġclass ĠCell Direction Ġ{ ĊĠĠĠ ĠNOR TH , ĠN ORT HE AST , ĠE AST , ĠS OUT HE AST , ĠS OUT H , ĠS OUT HW EST , ĠW EST , ĠNOR TH WEST ; Ċ } Ċ Ċ data Ġclass ĠCoord ( val Ġx : ĠInt , Ġval Ġy : ĠInt ) Ċ Ċ class ĠCell Map ( val Ġw : ĠInt , Ġval Ġh : ĠInt , Ġold Map : ĠCell Map ? Ġ= Ġnull , Ġmap Fill er : ĠMap Fill er Ġ= Ġ:: empty Map Fun ) Ġ{ ĊĊĠĠĠ Ġconstructor ( old Map : ĠCell Map , Ġmap Fill er : ĠMap Fill er ): Ġthis ( old Map . w , Ġold Map . h , Ġold Map , Ġmap Fill er ) ĊĊĠĠĠ Ġprivate Ġval Ġgrid Ġ= ĠArray ( w , Ġ{ Ġx Ġ-> ĠArray ( h ) Ġ{ Ġy -> Ġmap Fill er ( x , Ġy , Ġold Map ) Ġ} Ġ}) ĊĊĠĠĠ Ġprivate Ġfun Ġsafe X ( x : ĠInt ) Ġ= Ġx Ġin Ġ 0 .. ( w Ġ- Ġ 1 ) ĊĊĠĠĠ Ġprivate Ġfun Ġsafe Y ( y : ĠInt ) Ġ= Ġy Ġin Ġ 0 .. ( h Ġ- Ġ 1 ) ĊĊĠĠĠ Ġprivate Ġfun Ġsafe Coord ( x : ĠInt , Ġy : ĠInt ) Ġ= Ġsafe X ( x ) Ġ&& Ġsafe Y ( y ) ĊĊĠĠĠ Ġfun Ġcell ( x : ĠInt , Ġy : ĠInt ) Ġ= Ġif Ġ( safe Coord ( x , Ġy )) Ġ{ Ġgrid [ x ][ y ] Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ ĠDE AD _ CELL ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcell ( coord : ĠCoord ) Ġ= Ġcell ( coord . x , Ġcoord . y ) ĊĊĠĠĠ Ġfun Ġset Cell ( x : ĠInt , Ġy : ĠInt , Ġc : ĠCell ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( safe Coord ( x , Ġy )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgrid [ x ][ y ] Ġ= Ġc ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Cell ( coord : ĠCoord , Ġc : ĠCell ) Ġ= Ġset Cell ( coord . x , Ġcoord . y , Ġc ) ĊĊĠĠĠ Ġprivate Ġfun Ġinter rogate Neighbor L iveness ( coord : ĠCoord , Ġdirection : ĠCell Direction , Ġmap : ĠCell Map ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġinter rogate Neighbor L iveness ( coord . x , Ġcoord . y , Ġdirection , Ġmap ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinter rogate Neighbor L iveness ( x : ĠInt , Ġy : ĠInt , Ġdirection : ĠCell Direction , Ġmap : ĠCell Map ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( direction ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCell Direction . NORTH Ġ-> Ġmap . cell ( x , Ġy Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCell Direction . N ORT HE AST Ġ-> Ġmap . cell ( x Ġ+ Ġ 1 , Ġy Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCell Direction . EAST Ġ-> Ġmap . cell ( x Ġ+ Ġ 1 , Ġy ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCell Direction . SO UT HE AST Ġ-> Ġmap . cell ( x Ġ+ Ġ 1 , Ġy Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCell Direction . SO UTH Ġ-> Ġmap . cell ( x , Ġy Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCell Direction . SO UTH WEST Ġ-> Ġmap . cell ( x Ġ- Ġ 1 , Ġy Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCell Direction . WEST Ġ-> Ġmap . cell ( x Ġ- Ġ 1 , Ġy ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCell Direction . NORTH WEST Ġ-> Ġmap . cell ( x Ġ- Ġ 1 , Ġy Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcount Cell Neighbors ( x : ĠInt , Ġy : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠCell Direction . values (). count Ġ{ Ġinter rogate Neighbor L iveness ( x , Ġy , Ġit , Ġthis ) Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ internal Ġfun Ġev olve Map ( map : ĠCell Map , Ġe volver : ĠMap Fill er ): ĠCell Map Ġ{ ĊĠĠĠ Ġreturn ĠCell Map ( map , Ġe volver ) Ċ } Ċ