package Ġdays Ċ Ċ import Ġutil . Utils Ċ import Ġjava . util . Priority Queue Ċ Ċ class ĠDay 1 5 Ġ: ĠDay ( 1 5 ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġfloor Ġ= Ġinput List . flatMap Indexed Ġ{ Ġy , Ġrow Ġ-> Ġrow . map Indexed Ġ{ Ġx , Ġc Ġ-> ĠPosition ( Utils . Coord ( x , Ġy ), Ġc . digit ToInt ()) Ġ} Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġpart One (): ĠAny Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġleast R is ky Path ( floor ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġpart Two (): ĠAny Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġorig X Ġ= Ġinput List . first (). length ĊĠĠĠĠĠĠĠ Ġval Ġorig Y Ġ= Ġinput List . size ĊĠĠĠĠĠĠĠ Ġval Ġfull Floor Ġ= Ġ( 0 Ġuntil Ġorig Y Ġ* Ġ 5 ). flatMap Ġ{ Ġy Ġ-> Ġ( 0 Ġuntil Ġorig X Ġ* Ġ 5 ). map Ġ{ Ġx Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġorig Risk Ġ= Ġinput List [ y Ġ% Ġorig Y ][ x Ġ% Ġorig X ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcomputed Risk Ġ= Ġ( orig Risk . digit ToInt () Ġ+ Ġx Ġ/ Ġorig X Ġ+ Ġy Ġ/ Ġorig Y ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPosition ( Utils . Coord ( x , Ġy ), Ġif Ġ( computed Risk Ġ< Ġ 1 0 ) Ġcomputed Risk Ġelse Ġcomputed Risk Ġ% Ġ 1 0 Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġ} Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġleast R is ky Path ( full Floor ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdata Ġclass ĠPosition ( val Ġcoord : ĠUtils . Coord , Ġval Ġrisk : ĠInt ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġvar Ġdistance : ĠInt Ġ= ĠInt . MAX _ VALUE ĊĊĠĠĠĠĠĠĠ Ġvar Ġprev : ĠPosition ? Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġleast R is ky Path ( floor : ĠList < Position >): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfloor Arr Ġ= Ġfloor . chunk ed ( floor . max Of Ġ{ Ġit . coord . x Ġ} Ġ+ Ġ 1 ). map Ġ{ Ġit . to Typed Array () Ġ}. to Typed Array () ĊĠĠĠĠĠĠĠ Ġval Ġmax X Ġ= Ġfloor Arr . first (). size ĊĠĠĠĠĠĠĠ Ġval Ġmax Y Ġ= Ġfloor Arr . size ĊĠĠĠĠĠĠĠ Ġdi jk stra ( floor Arr , Ġmax X , Ġmax Y ) ĊĠĠĠĠĠĠĠ Ġreturn Ġgenerate Sequence ( floor . last ()) Ġ{ Ġit . prev Ġ}. sum Of Ġ{ Ġit . risk Ġ} Ġ- Ġfloor . first (). risk ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġsee Ġhttps :// en . wikipedia . org / wiki / Di jk stra % 2 7 s _ algorithm # Pseudo code ĊĠĠĠ Ġ// Ġand Ġhttps :// en . wikipedia . org / wiki / Di jk stra 's _ algorithm # Using _ a _ priority _ queue ĊĠĠĠ Ġprivate Ġfun Ġdi jk stra ( floor : ĠArray < Array < Position >>, Ġmax X : ĠInt , Ġmax Y : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpositions Ġ= ĠPriority Queue < Position >( Comparator . comp aring Int Ġ{ Ġit . distance Ġ}) ĊĠĠĠĠĠĠĠ Ġfloor [ 0 ][ 0 ]. distance Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġpositions . add ( floor [ 0 ][ 0 ]) ĊĊĠĠĠĠĠĠĠ Ġwhile Ġ( positions . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġu Ġ= Ġpositions . poll () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġne ighbours Ġ= Ġu . coord . get Adjacent ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġ( x , Ġy ) Ġ-> Ġx Ġin Ġ 0 Ġuntil Ġmax X Ġ&& Ġy Ġin Ġ 0 Ġuntil Ġmax Y Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġ( x , Ġy ) Ġ-> Ġfloor [ y ][ x ] Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġne ighbours . forEach Ġ{ Ġv Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġalt Ġ= Ġu . distance Ġ+ Ġv . risk ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( alt Ġ< Ġv . distance ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv . distance Ġ= Ġalt ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv . prev Ġ= Ġu ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpositions . offer ( v ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ