import Ġkotlin . math . sign Ċ Ċ class ĠDay 0 5 ( private Ġval Ġinput : ĠList < String >) Ġ{ ĊĊĠĠĠ Ġprivate Ġfun ĠList < String >. prepare Input (): ĠList < List < Int >> Ġ= Ġthis . map Ġ{ ĊĠĠĠĠĠĠĠ Ġ"( \\ d + ),( \\ d +) Ġ-> Ġ( \\ d + ),( \\ d +) ". to Regex (). match Ent ire ( it ) !!. de structured . toList (). map Ġ{ Ġit . toInt () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcount Matrix ( input : ĠList < List < Int >>, Ġmatrix : ĠArray < IntArray >, Ġinclude Diag onal : ĠBoolean ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġinput . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġ( x 1 , Ġy 1 ) Ġ= ĠarrayOf ( it [ 0 ], Ġit [ 1 ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġ( x 2 , Ġy 2 ) Ġ= ĠarrayOf ( it [ 2 ], Ġit [ 3 ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( include Diag onal Ġ|| Ġx 1 Ġ== Ġx 2 Ġ|| Ġy 1 Ġ== Ġy 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdx Ġ= Ġ( x 2 Ġ- Ġx 1 ). sign ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdy Ġ= Ġ( y 2 Ġ- Ġy 1 ). sign ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmatrix [ y 2 ][ x 2 ] ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( x 1 Ġ!= Ġx 2 Ġ|| Ġy 1 Ġ!= Ġy 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmatrix [ y 1 ][ x 1 ] ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx 1 Ġ+= Ġdx ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy 1 Ġ+= Ġdy ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġmatrix . sum Of Ġ{ Ġit . count Ġ{ Ġit Ġ> Ġ 1 Ġ} Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Matrix ( input : ĠList < List < Int >> ): ĠArray < IntArray > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmatrix Ġ= ĠArray ( input . max Of Ġ{ Ġmax Of ( it [ 1 ], Ġit [ 3 ]) Ġ} Ġ+ Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠInt Array ( input . max Of Ġ{ Ġmax Of ( it [ 0 ], Ġit [ 2 ]) Ġ} Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġmatrix ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsolve 1 (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcount Matrix ( input . prepare Input (), Ġcreate Matrix ( input . prepare Input ()), Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsolve 2 (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcount Matrix ( input . prepare Input (), Ġcreate Matrix ( input . prepare Input ()), Ġtrue ) ĊĠĠĠ Ġ} Ċ } Ċ