package Ġcom . chr is wk . a oc . ad vent 2 0 1 8 Ċ Ċ import Ġcom . chr is wk . a oc . util . day Input As Lines Ċ Ċ object ĠDay 3 Ġ{ ĊĠĠĠ Ġval Ġlines Ġ= Ġday Input As Lines ( 2 0 1 8 , Ġ 3 ) ĊĠĠĠ Ġval Ġid Pattern Ġ= Ġ""" (\ d +) """. to Regex () ĊĊĠĠĠ Ġfun Ġparse Claim ( line : ĠString ): ĠClaim Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġ( id , Ġact u ) Ġ= Ġline . split ("@ ") ĊĠĠĠĠĠĠĠ Ġval Ġ( start Coord , Ġsize ) Ġ= Ġact u . trim (). split (": ") ĊĠĠĠĠĠĠĠ Ġval Ġ( start X , Ġstart Y ) Ġ= Ġstart Coord . trim (). split (",") ĊĠĠĠĠĠĠĠ Ġval Ġ( delta X , Ġdelta Y ) Ġ= Ġsize . split (" x ") ĊĠĠĠĠĠĠĠ Ġval Ġstart Y Int Ġ= Ġstart Y . trim (). toInt () ĊĠĠĠĠĠĠĠ Ġval Ġstart X Int Ġ= Ġstart X . trim (). toInt () ĊĠĠĠĠĠĠĠ Ġval Ġdelta X Int Ġ= Ġdelta X . trim (). toInt () ĊĠĠĠĠĠĠĠ Ġval Ġdelta Y Int Ġ= Ġdelta Y . trim (). toInt () ĊĠĠĠĠĠĠĠ Ġreturn ĠClaim ( id Ġ= Ġid Pattern . find ( id ) !!. group Values [ 0 ]. toInt (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart X Ġ= Ġstart X Int , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Y Ġ= Ġstart Y Int , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend X Ġ= Ġstart X Int Ġ+ Ġdelta X Int Ġ- Ġ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Y Ġ= Ġstart Y Int Ġ+ Ġdelta Y Int Ġ- Ġ 1 ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġsolution 1 (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġlines ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġparse Claim ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ Ġit . toList () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. groupBy Ġ{ Ġit Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . value . size Ġ> Ġ 1 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. size ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsolution 2 (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġclo th Ġ= Ġmutable Map Of < Int , ĠInt >() ĊĠĠĠĠĠĠĠ Ġval Ġclaims Ġ= Ġlines . map Ġ{ Ġparse Claim ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġun covered Ġ= Ġclaims . map Ġ{ Ġit . id Ġ}. to Mutable Set () ĊĠĠĠĠĠĠĠ Ġclaims . forEach Ġ{ Ġclaim Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclaim . toList (). forEach Ġ{ spot Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfound Ġ= Ġclo th . get Or Put ( spot ) Ġ{ Ġclaim . id Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( found Ġ!= Ġclaim . id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġun covered . remove ( found ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġun covered . remove ( claim . id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġun covered . first () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdata Ġclass ĠClaim ( val Ġid : ĠInt , Ġval Ġstart X : ĠInt , Ġval Ġstart Y : ĠInt , Ġval Ġend X : ĠInt , Ġval Ġend Y : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġto List (): ĠList < Int > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ( start X .. end X ). flatMap Ġ{ Ġx Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( start Y .. end Y ). map Ġ{ Ġy Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Ġ* Ġ 1 0 0 0 Ġ+ Ġx ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }