package Ġcom . col inode ll . ad vent 2 0 2 1 Ċ Ċ import Ġkotlin . math . abs Ċ Ċ class ĠDay 1 7 ( input : ĠString ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġtarget Area : ĠRegion ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġ" target Ġarea : Ġx = (- ? \\ d +) .. (- ? \\ d + ), Ġy = (- ? \\ d +) .. (- ? \\ d +) ". to Regex (). match Ent ire ( input ) !!. group Values . drop ( 1 ). map Ġ{ Ġit . toInt () Ġ}. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtarget Area Ġ= ĠRegion ( Vector 2 ( it [ 0 ], Ġit [ 2 ]), ĠVector 2 ( it [ 1 ], Ġit [ 3 ])) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsolve Part 1 () Ġ= Ġtri angular Number ( target Area . top Left . y Ġ* Ġ- 1 Ġ- Ġ 1 ) ĊĠĠĠ Ġfun Ġsolve Part 2 () Ġ= ĊĠĠĠĠĠĠĠ Ġ( 1 .. target Area . bottom Right . x ). cart esian Product ( target Area . top Left . y .. abs ( target Area . top Left . y )) ĊĠĠĠĠĠĠĠ Ġ. map Ġ{ ĠVector 2 ( it . first , Ġit . second ) Ġ} ĊĠĠĠĠĠĠĠ Ġ. count Ġ{ Ġv Ġ-> Ġfire ( v ). first Ġ{ Ġit Ġin Ġtarget Area Ġ|| Ġmissed ( target Area , Ġit ) Ġ} Ġin Ġtarget Area Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfire ( initial Velocity : ĠVector 2 ) Ġ= Ġsequence Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġcurrent Position Ġ= ĠVector 2 ( 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġvar Ġcurrent Velocity Ġ= Ġinitial Velocity ĊĊĠĠĠĠĠĠĠ Ġwhile Ġ( true ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Position Ġ+= Ġcurrent Velocity ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Velocity Ġ+= ĠVector 2 ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current Velocity . x Ġ> Ġ 0 ) Ġ- 1 Ġelse Ġif Ġ( current Velocity . x Ġ< Ġ 0 ) Ġ 1 Ġelse Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ- 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġyield Ġ( current Position ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġmissed ( target Area : ĠRegion , Ġposition : ĠVector 2 ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġposition . x Ġ> Ġtarget Area . bottom Right . x Ġ|| Ġposition . y Ġ< Ġtarget Area . top Left . y ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠCalculate Ġthe Ġtri angular Ġnumber Ġfor Ġn Ġ( see Ġhttps :// oe is . org / A 0 0 0 2 1 7 ) ĊĠĠĠ Ġprivate Ġfun Ġtri angular Number ( n : ĠInt ) Ġ= Ġ( n Ġ* Ġ( n Ġ+ Ġ 1 )) Ġ/ Ġ 2 ĊĊĠĠĠ Ġprivate Ġfun Ġ< T , ĠU > ĠIterable < T >. cart esian Product ( other : ĠIterable < U >): ĠIterable < Pair < T , ĠU >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġflat Map Ġ{ Ġleft Ġ-> Ġother . map Ġ{ Ġright Ġ-> Ġleft Ġto Ġright Ġ} Ġ} ĊĠĠĠ Ġ} Ċ }