package Ġdays . a oc 2 0 1 5 Ċ Ċ import Ġdays . Day Ċ Ċ class ĠDay 1 8 : ĠDay ( 2 0 1 5 , Ġ 1 8 ) Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġpart One (): ĠAny Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġperform Life ( input List , Ġ 1 0 0 ). map Ġ{ Ġstring Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstring . count Ġ{ Ġit Ġ== Ġ'#' Ġ} ĊĠĠĠĠĠĠĠ Ġ}. sum () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġperform Life ( input List : ĠList < String >, Ġsteps : ĠInt ): ĠList < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= Ġmutable ListOf < String >() ĊĠĠĠĠĠĠĠ Ġresult . addAll ( input List ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġsteps ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġcalculate Next Life State ( result ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcalculate Next Life State ( currentState : ĠList < String >): ĠMutable List < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġmutable ListOf < String >() ĊĠĠĠĠĠĠĠ Ġfor Ġ( y Ġin Ġcurrent State . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġline Ġ= Ġcurrent State [ y ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Line Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( x Ġin Ġline . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġne ighb oring Lights On Ġ= Ġcurrent State . life Neighbors ( x , Ġy ). count Ġ{ Ġit Ġ== Ġ'#' Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Line . append ( when ( line [ x ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ'#' Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ne ighb oring Lights On Ġ== Ġ 2 Ġ|| Ġne ighb oring Lights On Ġ== Ġ 3 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ'#' ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ'.' ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ'.' Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ne ighb oring Lights On Ġ== Ġ 3 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ'#' ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ'.' ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġerror (" o ops ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult . add ( new Line . toString ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġpart Two (): ĠAny Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= Ġmutable ListOf < String >() ĊĠĠĠĠĠĠĠ Ġresult . addAll ( input List ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġ 1 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult [ 0 ] Ġ= Ġ'#' Ġ+ Ġresult [ 0 ]. substring ( 1 , Ġresult [ 0 ]. last Index ) Ġ+ Ġ'#' ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult [ result . last Index ] Ġ= Ġ'#' Ġ+ Ġresult [ result . last Index ]. substring ( 1 , Ġresult [ result . last Index ]. last Index ) Ġ+ Ġ'#' ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġcalculate Next Life State ( result ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġresult [ 0 ] Ġ= Ġ'#' Ġ+ Ġresult [ 0 ]. substring ( 1 , Ġresult [ 0 ]. last Index ) Ġ+ Ġ'#' ĊĠĠĠĠĠĠĠ Ġresult [ result . last Index ] Ġ= Ġ'#' Ġ+ Ġresult [ result . last Index ]. substring ( 1 , Ġresult [ result . last Index ]. last Index ) Ġ+ Ġ'#' ĊĠĠĠĠĠĠĠ Ġreturn Ġresult . map Ġ{ Ġit . count Ġ{ Ġit Ġ== Ġ'#' Ġ} Ġ}. sum () ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ fun ĠList < String >. life Neighbors ( char Index : ĠInt , Ġline Index : ĠInt ) Ġ= Ġsequence < Char > Ġ{ ĊĠĠĠ Ġfor Ġ( y Ġin Ġ( line Index Ġ- Ġ 1 ) .. ( line Index Ġ+ Ġ 1 )) ĊĠĠĠĠĠĠĠ Ġfor Ġ( x Ġin Ġ( char Index Ġ- Ġ 1 ) .. ( char Index Ġ+ Ġ 1 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(!( y Ġ== Ġline Index Ġ&& Ġx Ġ== Ġchar Index ) Ġ&& Ġy Ġin Ġindices Ġ&& Ġx Ġin Ġget ( y ). indices ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġyield ( get ( y )[ x ]) Ċ Ċ }