package Ġio . pg . ad vent . day 3 Ċ Ċ import Ġio . pg . ad vent . utils . File Util Ċ Ċ fun Ġmain () Ġ{ ĊĠ Ġval Ġlines Ġ= ĠFile Util . load File ("/ day 3 . txt ") ĊĠ Ġval Ġin ches Ġ= Ġcalculate Fabric Overlap ( lines ) ĊĠ Ġprintln (" Overlap Ġin ches : Ġ$ inches ") ĊĠ Ġval Ġid Ġ= Ġfind ID of Not Overlap Fabric ( lines ) ĊĠ Ġprintln (" Fabric ĠID Ġwhich Ġis Ġnot Ġoverlapping : Ġ$ id ") Ċ } Ċ Ċ fun Ġfind ID of Not Overlap Fabric ( lines : ĠList < String >): ĠString Ġ{ ĊĠ Ġval Ġoverlapping Coords Ġ= Ġtransform Lines To Coords ( lines ). flatten (). groupBy Ġ{ Ġit Ġ}. filter Values Ġ{ Ġit . size Ġ> Ġ 1 Ġ}. keys ĊĠ Ġreturn Ġlines . map Ġ{ Ġit . to Claim () Ġ}. first Ġ{ Ġit . coordinates (). intersect ( over lapping Coords ). isEmpty () Ġ}. id Ċ } Ċ Ċ fun Ġcalculate Fabric Overlap ( lines : ĠList < String >): ĠInt Ġ{ ĊĠ Ġval Ġcoords Ġ= Ġtransform Lines To Coords ( lines ) ĊĠ Ġreturn Ġcoords . flatten () ĊĠĠĠ Ġ. groupBy Ġ{ Ġit Ġ} ĊĠĠĠ Ġ. filter Values Ġ{ Ġit . size Ġ> Ġ 1 Ġ} ĊĠĠĠ Ġ. size Ċ } Ċ Ċ fun Ġtransform Lines To Coords ( lines : ĠList < String >): ĠList < List < Pair < Int , ĠInt >>> Ġ= Ġlines . map Ġ{ Ġtransform Input To Coord ( it ) Ġ} Ċ Ċ fun Ġtransform Input To Coord ( input : ĠString ): ĠList < Pair < Int , ĠInt >> Ġ{ ĊĠ Ġval Ġclaim Ġ= Ġinput . to Claim () ĊĠ Ġval Ġx Range Ġ= Ġclaim . from Left .. ( claim . from Left Ġ+ Ġclaim . width Ġ- Ġ 1 ) ĊĠ Ġval Ġy Range Ġ= Ġclaim . from Top .. ( claim . from Top Ġ+ Ġclaim . height Ġ- Ġ 1 ) ĊĠ Ġreturn Ġx Range . flatMap Ġ{ Ġx Ġ-> Ġy Range . map Ġ{ Ġy Ġ-> ĠPair ( x , Ġy ) Ġ} Ġ}. sorted By Ġ{ Ġit . first Ġ} Ċ } Ċ Ċ fun ĠString . to Claim (): ĠClaim Ġ{ ĊĠ Ġ// Ġ"# 1 Ġ@ Ġ 0 , 0 : Ġ 1 x 1 " ĊĠ Ġval Ġid Ġ= Ġthis . substring ( 1 ). substring Before ("@ "). trim () ĊĠ Ġval Ġleft And Top Ġ= Ġthis . substring After ("@ "). substring Before (": "). trim (). split (",") ĊĠ Ġval Ġwidth And Height Ġ= Ġthis . substring After (": "). split (" x ") ĊĠ Ġreturn ĠClaim ( ĊĠĠĠ Ġid , ĊĠĠĠ Ġleft And Top . first (). trim (). toInt (), ĊĠĠĠ Ġleft And Top . last (). trim (). toInt (), ĊĠĠĠ Ġwidth And Height . first (). trim (). toInt (), ĊĠĠĠ Ġwidth And Height . last (). trim (). toInt () ĊĠ Ġ) Ċ } Ċ Ċ data Ġclass ĠClaim ( ĊĠ Ġval Ġid : ĠString , ĊĠ Ġval Ġfrom Left : ĠInt , ĊĠ Ġval Ġfrom Top : ĠInt , ĊĠ Ġval Ġwidth : ĠInt , ĊĠ Ġval Ġheight : ĠInt Ċ ) Ġ{ ĊĠ Ġfun Ġcoordinates (): ĠList < Pair < Int , ĠInt >> Ġ{ ĊĠĠĠ Ġval Ġx Range Ġ= Ġthis . from Left .. ( this . from Left Ġ+ Ġthis . width Ġ- Ġ 1 ) ĊĠĠĠ Ġval Ġy Range Ġ= Ġthis . from Top .. ( this . from Top Ġ+ Ġthis . height Ġ- Ġ 1 ) ĊĠĠĠ Ġreturn Ġx Range . flatMap Ġ{ Ġx Ġ-> Ġy Range . map Ġ{ Ġy Ġ-> ĠPair ( x , Ġy ) Ġ} Ġ}. sorted By Ġ{ Ġit . first Ġ} ĊĠ Ġ} Ċ } ĊĊ