import Ġkotlin . comp arisons . compare By Ċ import Ġjava . util . Priority Queue Ċ Ċ class ĠDay 1 5 Ġ: ĠSol vable (" 1 5 ") Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġsolve A ( input : ĠList < String >): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġgrid Ġ= Ġmutable ListOf < List < Int >>() ĊĠĠĠĠĠĠĠ Ġinput . forEach Ġ{ Ġgrid . add ( it . map ( Char :: toInt ). map Ġ{ Ġit Ġ- Ġ 4 8 Ġ}) Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġdi jk stra ( grid ). toString () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsolve B ( input : ĠList < String >): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġgrid Ġ= Ġmutable ListOf < List < Int >>() ĊĠĠĠĠĠĠĠ Ġinput . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbase Ġ= Ġit . map ( Char :: toInt ). map Ġ{ Ġit Ġ- Ġ 4 8 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconcat Ġ= Ġmutable ListOf < Int >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ(- 1 .. 3 ). forEach Ġ{ Ġi Ġ-> Ġconcat . addAll ( base . map Ġ{ Ġ( it Ġ+ Ġi ) Ġ% Ġ 9 Ġ+ Ġ 1 Ġ}) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgrid . add ( concat ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġn Ġ= Ġgrid . size ĊĠĠĠĠĠĠĠ Ġ( 0 Ġuntil Ġ 4 Ġ* Ġn ). forEach Ġ{ Ġgrid . add ( grid [ grid . size Ġ- Ġn ]. map Ġ{ Ġit Ġ% Ġ 9 Ġ+ Ġ 1 Ġ}) Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġdi jk stra ( grid ). toString () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdi jk stra ( grid : ĠList < List < Int >> ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġqueue Ġ= ĠPriority Queue < Vertex >( compare By Ġ{ Ġit . distance Ġ}) ĊĊĠĠĠĠĠĠĠ Ġval Ġs pt Ġ= Ġmutable Set Of < Vertex >() ĊĊĠĠĠĠĠĠĠ Ġval Ġdistances Ġ= Ġgrid . map Ġ{ Ġit . map Ġ{ ĠInt . MAX _ VALUE Ġ}. to Mutable List () Ġ} ĊĠĠĠĠĠĠĠ Ġdistances [ 0 ][ 0 ] Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġqueue . add ( Vertex ( Pair ( 0 , Ġ 0 ), Ġ 0 )) ĊĊĠĠĠĠĠĠĠ Ġfun Ġupdate Pos ( i : ĠInt , Ġj : ĠInt , Ġv : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i Ġ< Ġ 0 Ġ|| Ġi Ġ>= Ġgrid . size Ġ|| Ġj Ġ< Ġ 0 Ġ|| Ġj Ġ>= Ġgrid . first (). size ) Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠnewVal Ġ= Ġv Ġ+ Ġgrid [ i ][ j ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( new Val Ġ< Ġdistances [ i ][ j ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdistances [ i ][ j ] Ġ= ĠnewVal ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġqueue . add ( Vertex ( Pair ( i , Ġj ), ĠnewVal )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġwhile Ġ( queue . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġel Ġ= Ġqueue . remove () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġs pt . add ( el ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Pos ( el . pos . first Ġ- Ġ 1 , Ġel . pos . second , Ġel . distance ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Pos ( el . pos . first Ġ+ Ġ 1 , Ġel . pos . second , Ġel . distance ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Pos ( el . pos . first , Ġel . pos . second Ġ- Ġ 1 , Ġel . distance ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Pos ( el . pos . first , Ġel . pos . second Ġ+ Ġ 1 , Ġel . distance ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġs pt . max By Ġ{ Ġit . pos . first Ġ+ Ġit . pos . second Ġ} !!. distance ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠVertex ( val Ġpos : ĠPair < Int , ĠInt >, Ġvar Ġdistance : ĠInt ) Ċ