package Ġcom . github . danger ground . a oc 2 0 2 0 . util Ċ Ċ class ĠWorld ( val Ġmap : ĠMutable List < String >) Ġ{ ĊĊĠĠĠ Ġvar Ġend less Width Ġ= Ġfalse ĊĊĠĠĠ Ġfun Ġget Cell ( row : ĠInt , Ġcolumn : ĠInt ): ĠChar ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsafe Column Ġ= Ġif Ġ( end less Width ) Ġcolumn Ġ% Ġget Column Count () Ġelse Ġcolumn ĊĊĠĠĠĠĠĠĠ Ġreturn Ġmap . get OrNull ( row )?. get OrNull ( safe Column ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġis Char ( row : ĠInt , Ġcolumn : ĠInt , Ġchar : ĠChar ) Ġ= Ġget Cell ( row , Ġcolumn ) Ġ== Ġchar ĊĊĠĠĠ Ġfun Ġget RowCount () Ġ= Ġmap . size ĊĠĠĠ Ġfun Ġget Column Count () Ġ= Ġmap [ 0 ]. length ĊĊĠĠĠ Ġfun Ġset Cell ( row : ĠInt , Ġcolumn : ĠInt , Ġchar : ĠChar ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġline Ġ= Ġmap [ row ]. toCharArray (). to Mutable List () ĊĠĠĠĠĠĠĠ Ġline [ column ] Ġ= Ġchar ĊĠĠĠĠĠĠĠ Ġmap [ row ] Ġ= ĠString ( line . toCharArray ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcan See ( row : ĠInt , Ġcolumn : ĠInt , Ġchar : ĠChar , Ġdirection : ĠDirection ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġr Ġ= Ġrow Ġ+ Ġdirection . down ĊĠĠĠĠĠĠĠ Ġvar Ġc Ġ= Ġcolumn Ġ+ Ġdirection . right ĊĠĠĠĠĠĠĠ Ġwhile Ġ( true ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( c Ġ< Ġ 0 Ġ|| Ġc Ġ>= Ġget Column Count () Ġ|| Ġr Ġ< Ġ 0 Ġ|| Ġr Ġ>= Ġget RowCount ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Char ( r , Ġc , Ġchar )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Char ( r , Ġc , Ġ' L ')) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// set Cell ( r , Ġc , Ġ'-') ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġr Ġ+= Ġdirection . down ĊĠĠĠĠĠĠĠĠĠĠĠ Ġc Ġ+= Ġdirection . right ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdebug () Ġ{ ĊĠĠĠĠĠĠĠ Ġmap . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġflip () Ġ: ĠWorld Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnew World Ġ= ĠWorld ( map . toList (). to Mutable List ()) ĊĠĠĠĠĠĠĠ Ġval Ġrow Count Ġ= Ġget RowCount () Ġ- Ġ 1 ĊĠĠĠĠĠĠĠ Ġfor Ġ( r Ġin Ġ 0 .. rowCount ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( c Ġin Ġ 0 Ġuntil Ġget Column Count ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew World . set Cell ( rowCount Ġ- Ġr , Ġc , Ġget Cell ( r , Ġc ) !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġnew World ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġrotate Left () Ġ: ĠWorld Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnew World Ġ= ĠWorld ( map . toList (). to Mutable List ()) ĊĠĠĠĠĠĠĠ Ġval Ġrow Count Ġ= Ġget RowCount () Ġ- Ġ 1 ĊĠĠĠĠĠĠĠ Ġfor Ġ( r Ġin Ġ 0 Ġuntil Ġget RowCount ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( c Ġin Ġ 0 Ġuntil Ġget Column Count ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew World . set Cell ( rowCount Ġ- Ġc , Ġr , Ġget Cell ( r , Ġc ) !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġnew World ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠDirection ( val Ġdown : ĠInt , Ġval Ġright : ĠInt ) Ġ{ ĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ" Direction ( down =$ down , Ġright =$ right )" ĊĠĠĠ Ġ} Ċ }