package Ġus . j wf . a oc 2 0 1 8 Ċ Ċ import Ġjava . io . Reader Ċ import Ġus . j wf . a oc . Day Ċ Ċ /** Ċ Ġ* ĠA o C Ġ 2 0 1 8 Ġ- ĠDay Ġ 3 Ċ Ġ*/ Ċ class ĠDay 0 3 No Mat ter Ġ: ĠDay < Int , ĠInt > Ġ{ ĊĠ Ġoverride Ġsuspend Ġfun Ġexecute Part 1 ( input : ĠReader ): ĠInt Ġ{ ĊĠĠĠ Ġval Ġclaims Ġ= Ġinput . read Lines (). map Ġ{ ĠClaim . parse ( it ) Ġ} ĊĠĠĠ Ġval Ġcounts Ġ= Ġmutable Map Of < Point , ĠInt >() ĊĊĠĠĠ Ġclaims . forEach Ġ{ ĊĠĠĠĠĠ Ġit . points . forEach Ġ{ Ġpoint Ġ-> ĊĠĠĠĠĠĠĠ Ġcounts [ point ] Ġ= Ġ( counts [ point ] Ġ?: Ġ 0 ) Ġ+ Ġ 1 ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġcounts . values . count Ġ{ Ġcount Ġ-> Ġcount Ġ> Ġ 1 Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġsuspend Ġfun Ġexecute Part 2 ( input : ĠReader ): ĠInt Ġ{ ĊĠĠĠ Ġval Ġclaims Ġ= Ġinput . read Lines (). map Ġ{ ĠClaim . parse ( it ) Ġ} ĊĊĠĠĠ Ġclaims . indices . forEach Ġ{ Ġi Ġ-> ĊĠĠĠĠĠ Ġval Ġa Ġ= Ġclaims [ i ] ĊĠĠĠĠĠ Ġval Ġsafe Ġ= Ġclaims . indices . all Ġ{ Ġj Ġ-> ĊĠĠĠĠĠĠĠ Ġif Ġ( i Ġ== Ġj ) Ġreturn @ all Ġtrue ĊĠĠĠĠĠĠĠ Ġval Ġb Ġ= Ġclaims [ j ] ĊĠĠĠĠĠĠĠ Ġ!( a Ġoverlap s Ġb ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġif Ġ( safe ) Ġreturn Ġa . id ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġ 0 ĊĠ Ġ} ĊĊĠ Ġdata Ġclass ĠPoint ( val Ġx : ĠInt , Ġval Ġy : ĠInt ) ĊĊĠ Ġdata Ġclass ĠClaim ( val Ġid : ĠInt , Ġval Ġx : ĠInt , Ġval Ġy : ĠInt , Ġval Ġwidth : ĠInt , Ġval Ġheight : ĠInt ) Ġ{ ĊĠĠĠ Ġval Ġx Range Ġ= Ġx Ġuntil Ġx Ġ+ Ġwidth ĊĠĠĠ Ġval Ġy Range Ġ= Ġy Ġuntil Ġy Ġ+ Ġheight ĊĊĠĠĠ Ġval Ġpoints : ĠSequence < Point > Ġ= Ġsequence Ġ{ ĊĠĠĠĠĠ Ġ( x Ġuntil Ġ( x Ġ+ Ġwidth )). forEach Ġ{ Ġi Ġ-> ĊĠĠĠĠĠĠĠ Ġ( y Ġuntil Ġ( y Ġ+ Ġheight )). forEach Ġ{ Ġj Ġ-> ĊĠĠĠĠĠĠĠĠĠ Ġyield ( Point ( i , Ġj )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġin fix Ġfun Ġoverlap s ( other : ĠClaim ): ĠBoolean Ġ{ ĊĠĠĠĠĠ Ġreturn Ġ( x Ġin Ġother . x Range Ġ|| Ġother . x Ġin Ġx Range ) Ġ&& Ġ( y Ġin Ġother . y Range Ġ|| Ġother . y Ġin Ġy Range ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠ Ġval Ġpattern Ġ= Ġ"# (\\ d +) Ġ@ Ġ( \\ d + ),( \\ d + ): Ġ( \\ d +) x (\\ d +) ". to Regex () ĊĠĠĠĠĠ Ġfun Ġparse ( raw : ĠString ): ĠClaim Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmatch Ġ= Ġpattern . match Ent ire ( raw ) !!. group Values ĊĠĠĠĠĠĠĠ Ġreturn ĠClaim ( ĊĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġmatch [ 1 ]. toInt (), ĊĠĠĠĠĠĠĠĠĠ Ġx Ġ= Ġmatch [ 2 ]. toInt (), ĊĠĠĠĠĠĠĠĠĠ Ġy Ġ= Ġmatch [ 3 ]. toInt (), ĊĠĠĠĠĠĠĠĠĠ Ġwidth Ġ= Ġmatch [ 4 ]. toInt (), ĊĠĠĠĠĠĠĠĠĠ Ġheight Ġ= Ġmatch [ 5 ]. toInt () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ }