import Ġkotlin . math . abs Ċ import Ġkotlin . test . Test Ċ import Ġkotlin . test . assertEquals Ċ Ċ class ĠDay 0 5 Ġ{ ĊĠĠĠ Ġdata Ġclass ĠCoord ( val Ġx : ĠInt , Ġval Ġy : ĠInt ) ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` run Ġpart Ġ 0 1 `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġoverlap s Ġ= Ġget Coords (). calc Overlap s () ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( 8 1 1 1 , Ġoverlap s ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` run Ġpart Ġ 0 2 `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġoverlap s Ġ= Ġget Coords (). calc Overlap s ( true ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( 2 2 0 8 8 , Ġoverlap s ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Coords () Ġ= ĠUtil . getInput As ListOf String (" day 0 5 - input . txt ") ĊĠĠĠĠĠĠĠ Ġ. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . split (" Ġ", Ġ", "). let Ġ{ Ġs Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCoord ( s [ 0 ]. toInt (), Ġs [ 1 ]. toInt ()) Ġto ĠCoord ( s [ 3 ]. toInt (), Ġs [ 4 ]. toInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠList < Pair < Coord , ĠCoord >> . calc Overlap s ( include Di agon als : ĠBoolean Ġ= Ġfalse ) Ġ= Ġthis ĊĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . first . x Ġ== Ġit . second . x ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( it . first . y Ġtowards Ġit . second . y ). map Ġ{ Ġy Ġ-> ĠCoord ( it . first . x , Ġy ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif Ġ( it . first . y Ġ== Ġit . second . y ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( it . first . x Ġtowards Ġit . second . x ). map Ġ{ Ġx Ġ-> ĠCoord ( x , Ġit . first . y ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif Ġ( include Di agon als Ġ&& Ġabs ( it . first . x Ġ- Ġit . second . x ) Ġ== Ġabs ( it . first . y Ġ- Ġit . second . y )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( it . first . x Ġtowards Ġit . second . x ). map Indexed Ġ{ Ġindex , Ġx Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCoord ( x , Ġ( it . first . y Ġtowards Ġit . second . y ). elementAt ( index )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ. grouping By Ġ{ Ġit Ġ} ĊĠĠĠĠĠĠĠ Ġ. each Count () ĊĠĠĠĠĠĠĠ Ġ. count Ġ{ Ġit . value Ġ>= Ġ 2 Ġ} ĊĊĠĠĠ Ġprivate Ġin fix Ġfun ĠInt . tow ards ( to : ĠInt ) Ġ= ĠInt Progress ion . from Closed Range ( this , Ġto , Ġif Ġ( this Ġ> Ġto ) Ġ- 1 Ġelse Ġ 1 ) Ċ }