package Ġme . digital by . lr 5 Ċ Ċ class ĠField ( val Ġsize : ĠVector 2 , Ġprivate Ġval Ġall Dead Condition : ĠInt ) Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġfrom Field String ( field String : ĠString ): Field Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġempty Field Ġ= ĠField ( Vector 2 ( 0 , 0 ), Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlines Ġ= Ġfield String . split ('\ n ') ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( lines . isEmpty ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġempty Field ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcolumns Ġ= Ġlines [ 0 ]. length ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrows Ġ= Ġlines . count () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtotal Non Empty Ġ= Ġcolumns Ġ* Ġrows Ġ- Ġfield String . count Ġ{ Ġc Ġ-> Ġc Ġ== Ġ' E ' Ġ|| Ġc Ġ== Ġ' M ' Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġret Ġ= ĠField ( Vector 2 ( rows , Ġcolumns ), Ġtotal Non Empty ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor ( i Ġin Ġ 0 Ġuntil Ġrows ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor ( j Ġin Ġ 0 Ġuntil Ġcolumns ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġret . cells [ i ][ j ] Ġ= Ġwhen ( lines [ i ][ j ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ' D ' Ġ-> ĠCell . Dead ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ' H ' Ġ-> ĠCell . H urt ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ' M ' Ġ-> ĠCell . Miss ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ' S ' Ġ-> ĠCell . Ship ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠCell . Empty ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġret ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġto Field String ( field : ĠField ): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġret Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor ( i Ġin Ġ 0 Ġuntil Ġfield . size . x ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor ( j Ġin Ġ 0 Ġuntil Ġfield . size . y ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġret Ġ+= Ġwhen ( field . cells [ i ][ j ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCell . Empty Ġ-> Ġ' E ' ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCell . Ship Ġ-> Ġ' S ' ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCell . Miss Ġ-> Ġ' M ' ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCell . H urt Ġ-> Ġ' H ' ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCell . Dead Ġ-> Ġ' D ' ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( i Ġ!= Ġfield . size . x Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġret Ġ+= Ġ'\ n ' ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġret ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġall Dead : ĠBoolean ĊĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġflat Cells . count Ġ{ Ġcell Ġ-> Ġcell Ġ== ĠCell . Dead Ġ} Ġ== Ġall Dead Condition ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġflat Cells : ĠList < Cell > ĊĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcells . flatten () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġcells Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġmake Field ( size ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġmake Field ( size : ĠVector 2 ): ĠArrayList < ArrayList < Cell >> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġret Ġ= ĠArrayList < ArrayList < Cell >>() ĊĠĠĠĠĠĠĠ Ġfor ( i Ġin Ġ 0 Ġuntil Ġsize . x ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinner Ġ= ĠArrayList < Cell >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor ( j Ġin Ġ 0 Ġuntil Ġsize . y ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcell Ġ= ĠCell . Empty ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinner . add ( cell ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġret . add ( inner ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġret ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Cell ( position : ĠVector 2 ): ĠCell Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcells [ position . x ][ position . y ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Cell ( x : ĠInt , Ġy : ĠInt ): ĠCell Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġposition Ġ= ĠVector 2 ( x , Ġy ) ĊĠĠĠĠĠĠĠ Ġreturn Ġget Cell ( position ) ĊĠĠĠ Ġ} Ċ Ċ }