package Ġcom . cur tis lb . ad vent of code . year 2 0 2 0 . day 1 7 . con way Ċ Ċ import Ġcom . cur tis lb . ad vent of code . common . collection . Int Vector Ċ import Ġcom . cur tis lb . ad vent of code . common . collection . Mutable Int Vector Ċ import Ġcom . cur tis lb . ad vent of code . common . grid . Point Ċ Ċ /** Ċ Ġ* ĠTODO Ċ Ġ*/ Ċ class ĠCon way C ubes ( initialState : ĠString , Ġdimension Count : ĠInt Ġ= Ġ 3 ) Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠTODO ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġactive C ubes : ĠSet < Int Vector > Ġ= Ġmutable Set Of < Int Vector >(). apply Ġ{ ĊĠĠĠĠĠĠĠ ĠinitialState . trim (). lines (). forEach Indexed Ġ{ ĠrowIndex , Ġline Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġline . forEach Indexed Ġ{ Ġcol Index , Ġchar Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( char Ġ== Ġ'# ') Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpoint Ġ= ĠPoint . from Matrix Coordinates ( rowIndex , Ġcol Index ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvector Ġ= ĠMutable Int Vector . of Z eros ( dimension Count ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis [ 0 ] Ġ= Ġpoint . x ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis [ 1 ] Ġ= Ġpoint . y ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( vector ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠTODO ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġactivity Level : ĠInt Ġget () Ġ= Ġactive C ubes . size ĊĊĠĠĠ Ġfun Ġupdate ( cycle Count : ĠInt Ġ= Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( cycle Ġin Ġ 1 .. cycle Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Active C ubes Ġ= Ġmutable Set Of < Int Vector >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinactive C ubes Ġ= Ġmutable Set Of < Int Vector >() ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġactive C ubes . forEach Ġ{ Ġcube Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġactive Neighbor Count Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcube . neighbors (). forEach Ġ{ Ġneighbor Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( neighbor Ġin Ġactive C ubes ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactive Neighbor Count ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinactive C ubes . add ( neighbor ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( active Neighbor Count Ġin Ġ 2 .. 3 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Active C ubes . add ( cube ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġinactive C ubes . forEach Ġ{ Ġcube Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cube . neighbors (). count Ġ{ Ġit Ġin Ġactive C ubes Ġ} Ġ== Ġ 3 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Active C ubes . add ( cube ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġactive C ubes Ġ= Ġnew Active C ubes ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ= Ġactive C ubes . toString () Ċ } Ċ