package Ġsh . well er . a oc Ċ Ċ import Ġkotlin . math . abs Ċ Ċ object ĠDay 0 5 Ġ: ĠSome Day < Coordinate Pair , ĠInt > Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġpart One ( input : ĠList < Coordinate Pair >): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsize Ġ= Ġinput . max Of Ġ{ Ġit . max Of () Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġmap : ĠHeight Map Ġ= Ġ( 0 .. size ). map Ġ{ Ġ( 0 .. size ). map Ġ{ Ġ 0 Ġ}. to Mutable List () Ġ}. to Mutable List () ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( coordinate Pair Ġin Ġinput ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( coordinate Pair . is Horizontal Line () Ġ|| Ġcoordinate Pair . is Vertical Line ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap . mark Line Part One ( coordinate Pair ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġmap . flatten (). count Ġ{ Ġit Ġ>= Ġ 2 Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Jvm Name (" max Of Int Int ") ĊĠĠĠ Ġprivate Ġfun ĠCoordinates . max Of (): ĠInt Ġ= Ġmax Of ( first , Ġsecond ) ĊĊĠĠĠ Ġ@ Jvm Name (" max Of Int Int Int Int ") ĊĠĠĠ Ġprivate Ġfun ĠCoordinate Pair . max Of (): ĠInt Ġ= Ġmax Of ( first . max Of (), Ġsecond . max Of ()) ĊĊĠĠĠ Ġprivate Ġfun ĠHeight Map . mark Line Part One ( coordinate Pair : ĠCoordinate Pair ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( coordinate Pair . is Horizontal Line ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstart X Ġ= Ġmin Of ( coordinate Pair . first . first , Ġcoordinate Pair . second . first ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġend X Ġ= Ġmax Of ( coordinate Pair . first . first , Ġcoordinate Pair . second . first ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepeat ( end X Ġ- Ġstart X Ġ+ Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis [ coordinate Pair . first . second ][ start X Ġ+ Ġit ] Ġ= Ġthis [ coordinate Pair . first . second ][ start X Ġ+ Ġit ] Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstart Y Ġ= Ġmin Of ( coordinate Pair . first . second , Ġcoordinate Pair . second . second ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġend Y Ġ= Ġmax Of ( coordinate Pair . first . second , Ġcoordinate Pair . second . second ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepeat ( end Y Ġ- Ġstart Y Ġ+ Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis [ start Y Ġ+ Ġit ][ coordinate Pair . first . first ] Ġ= Ġthis [ start Y Ġ+ Ġit ][ coordinate Pair . first . first ] Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠCoordinate Pair . is Horizontal Line () Ġ= ĊĠĠĠĠĠĠĠ Ġfirst . second Ġ== Ġsecond . second ĊĊĠĠĠ Ġprivate Ġfun ĠCoordinate Pair . is Vertical Line () Ġ= ĊĠĠĠĠĠĠĠ Ġfirst . first Ġ== Ġsecond . first ĊĊĠĠĠ Ġoverride Ġfun Ġpart Two ( input : ĠList < Pair < Pair < Int , ĠInt >, ĠPair < Int , ĠInt >>> ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsize Ġ= Ġinput . max Of Ġ{ Ġit . max Of () Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġmap : ĠHeight Map Ġ= Ġ( 0 .. size ). map Ġ{ Ġ( 0 .. size ). map Ġ{ Ġ 0 Ġ}. to Mutable List () Ġ}. to Mutable List () ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( coordinate Pair Ġin Ġinput ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( coordinate Pair . is Horizontal Line () Ġ|| Ġcoordinate Pair . is Vertical Line () Ġ|| Ġcoordinate Pair . is Diag onal Line ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap . mark Line Part Two ( coordinate Pair ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġmap . flatten (). count Ġ{ Ġit Ġ>= Ġ 2 Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠHeight Map . mark Line Part Two ( coordinate Pair : ĠCoordinate Pair ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( coordinate Pair . is Diag onal Line ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsteps Ġ= Ġabs ( coordinate Pair . second . first Ġ- Ġcoordinate Pair . first . first ) Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( coordinate Pair . first . first Ġ> Ġcoordinate Pair . second . first Ġ&& Ġcoordinate Pair . first . second Ġ> Ġcoordinate Pair . second . second ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ(( 3 , 3 ),( 1 , 1 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepeat ( steps ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis [ coordinate Pair . first . second Ġ- Ġit ][ coordinate Pair . first . first Ġ- Ġit ] Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis [ coordinate Pair . first . second Ġ- Ġit ][ coordinate Pair . first . first Ġ- Ġit ] Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( coordinate Pair . first . first Ġ< Ġcoordinate Pair . second . first Ġ&& Ġcoordinate Pair . first . second Ġ< Ġcoordinate Pair . second . second ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ(( 1 , 1 ),( 3 , 3 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepeat ( steps ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis [ coordinate Pair . first . second Ġ+ Ġit ][ coordinate Pair . first . first Ġ+ Ġit ] Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis [ coordinate Pair . first . second Ġ+ Ġit ][ coordinate Pair . first . first Ġ+ Ġit ] Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( coordinate Pair . first . first Ġ> Ġcoordinate Pair . second . first Ġ&& Ġcoordinate Pair . first . second Ġ< Ġcoordinate Pair . second . second ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ(( 9 , 7 ),( 7 , 9 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepeat ( steps ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis [ coordinate Pair . first . second Ġ+ Ġit ][ coordinate Pair . first . first Ġ- Ġit ] Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis [ coordinate Pair . first . second Ġ+ Ġit ][ coordinate Pair . first . first Ġ- Ġit ] Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ(( 7 , 9 ),( 9 , 7 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepeat ( steps ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis [ coordinate Pair . first . second Ġ- Ġit ][ coordinate Pair . first . first Ġ+ Ġit ] Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis [ coordinate Pair . first . second Ġ- Ġit ][ coordinate Pair . first . first Ġ+ Ġit ] Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . mark Line Part One ( coordinate Pair ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠCoordinate Pair . is Diag onal Line (): ĠBoolean Ġ= ĊĠĠĠĠĠĠĠ Ġis Horizontal Line (). not () Ġ&& Ġis Vertical Line (). not () Ġ&& Ġ( abs ( first . first Ġ- Ġsecond . first ) Ġ== Ġabs ( first . second Ġ- Ġsecond . second )) Ċ Ċ } Ċ Ċ private Ġtype alias ĠCoordinate Pair Ġ= ĠPair < Coordinates , ĠCoordinates > Ċ private Ġtype alias ĠCoordinates Ġ= ĠPair < Int , ĠInt > Ċ private Ġtype alias ĠHeight Map Ġ= ĠMutable List < Mutable List < Int >>