package Ġsh . well er . ad vent of code . tw enty tw enty Ċ Ċ fun ĠList < List < Char >> . game Of Se ats Part Two (): ĠInt Ġ{ ĊĠĠĠ Ġvar Ġround Count Ġ= Ġ 0 ĊĠĠĠ Ġvar Ġdid Change : ĠBoolean ĊĠĠĠ Ġvar Ġseat Rows : ĠList < List < Char >> Ġ= Ġthis . map Ġ{ Ġit . to Mutable List () Ġ} ĊĊĠĠĠ Ġdo Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtmp Rows : ĠList < Mutable List < Char >> Ġ= Ġseat Rows . map Ġ{ Ġit . to Mutable List () Ġ} ĊĠĠĠĠĠĠĠ Ġdid Change Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġseat Rows . forEach Indexed Ġ{ ĠrowIndex , Ġrow Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrow . forEach Indexed Ġ{ Ġcolumn n Index , Ġseat Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvisible Se ats Ġ= Ġseat Rows . visible Se ats ( rowIndex , Ġcolumn n Index ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( seat Ġ== Ġ' L ' Ġ&& Ġvisible Se ats . contains ('# '). not ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠEverything Ġis Ġempty ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtmp Rows [ rowIndex ][ column n Index ] Ġ= Ġ'#' ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdid Change Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( seat Ġ== Ġ'#' Ġ&& Ġ( visible Se ats . count Ġ{ Ġit Ġ== Ġ'#' Ġ} Ġ>= Ġ 5 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠToo Ġc row ded ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtmp Rows [ rowIndex ][ column n Index ] Ġ= Ġ' L ' ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdid Change Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġround Count ++ ĊĠĠĠĠĠĠĠ Ġseat Rows Ġ= Ġtmp Rows ĊĠĠĠ Ġ} Ġwhile Ġ( did Change ) ĊĠĠĠ Ġreturn Ġseat Rows . map Ġ{ Ġit . count Ġ{ Ġseat Ġ-> Ġseat Ġ== Ġ'#' Ġ} Ġ}. sum () Ċ } Ċ Ċ fun ĠList < List < Char >> . visible Se ats ( rowIndex : ĠInt , ĠcolumnIndex : ĠInt ): ĠList < Char > Ġ{ ĊĠĠĠ Ġval Ġseen Se ats Ġ= Ġmutable ListOf < List < Char ? >>() ĊĠĠĠ Ġvar Ġround Counter Ġ= Ġ 1 ĊĊĠĠĠ Ġdo Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġse ats Per Round Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTop ĠRow ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . get OrNull ( rowIndex Ġ- Ġround Counter )?. get OrNull ( column Index Ġ- Ġround Counter ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . get OrNull ( rowIndex Ġ- Ġround Counter )?. get OrNull ( column Index ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . get OrNull ( rowIndex Ġ- Ġround Counter )?. get OrNull ( column Index Ġ+ Ġround Counter ), ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠRight Ġ& ĠLeft ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . get OrNull ( rowIndex )?. get OrNull ( column Index Ġ+ Ġround Counter ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . get OrNull ( rowIndex )?. get OrNull ( column Index Ġ- Ġround Counter ), ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠBottom ĠRow ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . get OrNull ( rowIndex Ġ+ Ġround Counter )?. get OrNull ( column Index Ġ+ Ġround Counter ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . get OrNull ( rowIndex Ġ+ Ġround Counter )?. get OrNull ( column Index ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . get OrNull ( rowIndex Ġ+ Ġround Counter )?. get OrNull ( column Index Ġ- Ġround Counter ), ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġseen Se ats . add ( seats Per Round ) ĊĠĠĠĠĠĠĠ Ġround Counter ++ ĊĠĠĠ Ġ} Ġwhile Ġ( seats Per Round . filter NotNull (). isNotEmpty ()) ĊĊĠĠĠ Ġreturn ĠlistOf NotNull ( ĊĠĠĠĠĠĠĠ Ġseen Se ats . map Ġ{ Ġit [ 0 ] Ġ}. first Seen Seat (), ĊĠĠĠĠĠĠĠ Ġseen Se ats . map Ġ{ Ġit [ 1 ] Ġ}. first Seen Seat (), ĊĠĠĠĠĠĠĠ Ġseen Se ats . map Ġ{ Ġit [ 2 ] Ġ}. first Seen Seat (), ĊĠĠĠĠĠĠĠ Ġseen Se ats . map Ġ{ Ġit [ 3 ] Ġ}. first Seen Seat (), ĊĠĠĠĠĠĠĠ Ġseen Se ats . map Ġ{ Ġit [ 4 ] Ġ}. first Seen Seat (), ĊĠĠĠĠĠĠĠ Ġseen Se ats . map Ġ{ Ġit [ 5 ] Ġ}. first Seen Seat (), ĊĠĠĠĠĠĠĠ Ġseen Se ats . map Ġ{ Ġit [ 6 ] Ġ}. first Seen Seat (), ĊĠĠĠĠĠĠĠ Ġseen Se ats . map Ġ{ Ġit [ 7 ] Ġ}. first Seen Seat (), ĊĠĠĠ Ġ) Ċ } Ċ Ċ private Ġfun ĠList < Char ?> . first Seen Seat (): ĠChar ? Ġ{ ĊĠĠĠ Ġvar Ġseen Seat : ĠChar ? Ġ= Ġ'.' ĊĠĠĠ Ġval Ġtmp Ġ= Ġthis . filter NotNull () ĊĠĠĠ Ġif Ġ( tmp . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġtmp . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( seen Seat Ġ== Ġ'.') Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġseen Seat Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġseen Seat Ġ= Ġnull ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġseen Seat Ċ } ĊĊ Ċ fun ĠList < List < Char >> . game Of Se ats (): ĠInt Ġ{ ĊĠĠĠ Ġvar Ġround Count Ġ= Ġ 0 ĊĠĠĠ Ġvar Ġdid Change : ĠBoolean ĊĊĠĠĠ Ġvar Ġseat Rows : ĠList < List < Char >> Ġ= Ġthis . map Ġ{ Ġit . to Mutable List () Ġ} ĊĊĠĠĠ Ġdo Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtmp Rows : ĠList < Mutable List < Char >> Ġ= Ġseat Rows . map Ġ{ Ġit . to Mutable List () Ġ} ĊĠĠĠĠĠĠĠ Ġdid Change Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġseat Rows . forEach Indexed Ġ{ ĠrowIndex , Ġrow Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrow . forEach Indexed Ġ{ Ġcolumn n Index , Ġseat Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġadjacent Se ats Ġ= Ġseat Rows . get Adjacent Se ats ( rowIndex , Ġcolumn n Index ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( seat Ġ== Ġ' L ' Ġ&& Ġadjacent Se ats . contains ('# '). not ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠEverything Ġis Ġempty ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtmp Rows [ rowIndex ][ column n Index ] Ġ= Ġ'#' ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdid Change Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( seat Ġ== Ġ'#' Ġ&& Ġ( adjacent Se ats . count Ġ{ Ġit Ġ== Ġ'#' Ġ} Ġ>= Ġ 4 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠToo Ġc row ded ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtmp Rows [ rowIndex ][ column n Index ] Ġ= Ġ' L ' ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdid Change Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġround Count ++ ĊĠĠĠĠĠĠĠ Ġseat Rows Ġ= Ġtmp Rows ĊĠĠĠ Ġ} Ġwhile Ġ( did Change ) ĊĠĠĠ Ġreturn Ġseat Rows . map Ġ{ Ġit . count Ġ{ Ġseat Ġ-> Ġseat Ġ== Ġ'#' Ġ} Ġ}. sum () Ċ } Ċ Ċ fun ĠList < List < Char >> . get Adjacent Se ats ( rowIndex : ĠInt , ĠcolumnIndex : ĠInt ): ĠList < Char > Ġ= ĊĠĠĠ ĠlistOf NotNull ( ĊĠĠĠĠĠĠĠ Ġ// ĠTop ĠRow ĊĠĠĠĠĠĠĠ Ġthis . get OrNull ( rowIndex Ġ- Ġ 1 )?. get OrNull ( column Index Ġ- Ġ 1 ), ĊĠĠĠĠĠĠĠ Ġthis . get OrNull ( rowIndex Ġ- Ġ 1 )?. get OrNull ( column Index ), ĊĠĠĠĠĠĠĠ Ġthis . get OrNull ( rowIndex Ġ- Ġ 1 )?. get OrNull ( column Index Ġ+ Ġ 1 ), ĊĊĠĠĠĠĠĠĠ Ġ// ĠLeft Ġ& ĠRight ĊĠĠĠĠĠĠĠ Ġthis . get OrNull ( rowIndex )?. get OrNull ( column Index Ġ- Ġ 1 ), ĊĠĠĠĠĠĠĠ Ġthis . get OrNull ( rowIndex )?. get OrNull ( column Index Ġ+ Ġ 1 ), ĊĊĠĠĠĠĠĠĠ Ġ// ĠBottom ĠRow ĊĠĠĠĠĠĠĠ Ġthis . get OrNull ( rowIndex Ġ+ Ġ 1 )?. get OrNull ( column Index Ġ- Ġ 1 ), ĊĠĠĠĠĠĠĠ Ġthis . get OrNull ( rowIndex Ġ+ Ġ 1 )?. get OrNull ( column Index ), ĊĠĠĠĠĠĠĠ Ġthis . get OrNull ( rowIndex Ġ+ Ġ 1 )?. get OrNull ( column Index Ġ+ Ġ 1 ), ĊĠĠĠ Ġ) Ċ