package Ġse . ny qu ist Ċ Ċ class ĠLow Point Detector Ġ{ ĊĠĠĠ Ġfun Ġdetect ( values : ĠArray < Array < Int >>) Ġ: ĠList < Low Point > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlow Points Ġ= Ġmutable ListOf < Low Point >() ĊĠĠĠĠĠĠĠ Ġvar Ġprev Ġ= ĠlistOf < Int >() ĊĠĠĠĠĠĠĠ Ġvar Ġnext Ġ= Ġvalues [ 0 ]. toList () ĊĠĠĠĠĠĠĠ Ġvar Ġcurrent Ġ: ĠList < Int > ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġvalues . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Ġ= Ġnext ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnext Ġ= Ġif Ġ( i Ġ< Ġvalues . size - 1 ) Ġvalues [ i + 1 ]. toList () Ġelse ĠlistOf () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdetect ( i , Ġprev , Ġcurrent , Ġnext ). forEach Ġ{ Ġlow Points . add ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprev Ġ= Ġcurrent ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġlow Points ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdetect ( row : ĠInt , Ġprev Values Arr : ĠList < Int >, Ġvalues Arr : ĠList < Int >, Ġnext Values Arr : ĠList < Int >) Ġ: ĠArray < Low Point > Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġlength Input Ġ= Ġvalues Arr . size ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġmutable ListOf < Low Point >() ĊĊĠĠĠĠĠĠĠ Ġfor ( i Ġin Ġ 0 Ġuntil Ġlength Input ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġcounter Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcounter Ġ= Ġcheck Back wards ( i , Ġvalues Arr , Ġcounter ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcounter Ġ= Ġcheck Forward ( i , Ġlength Input , Ġvalues Arr , Ġcounter ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcounter Ġ= Ġcheck Column ( prev Values Arr , Ġvalues Arr , Ġi , Ġcounter ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcounter Ġ= Ġcheck Column ( next Values Arr , Ġvalues Arr , Ġi , Ġcounter ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( counter Ġ== Ġ 4 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . add ( Low Point ( i , Ġrow , Ġvalues Arr [ i ])) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġresult . to Typed Array () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcheck Column ( ĊĠĠĠĠĠĠĠ Ġprev Values Arr : ĠList < Int >, ĊĠĠĠĠĠĠĠ Ġvalues Arr : ĠList < Int >, ĊĠĠĠĠĠĠĠ Ġi : ĠInt , ĊĠĠĠĠĠĠĠ Ġcounter : ĠInt ĊĠĠĠ Ġ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġcounter 1 Ġ= Ġcounter ĊĠĠĠĠĠĠĠ Ġif Ġ( prev Values Arr . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( values Arr [ i ] Ġ< Ġprev Values Arr [ i ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcounter 1 ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcounter 1 ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġcounter 1 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcheck Forward ( ĊĠĠĠĠĠĠĠ Ġi : ĠInt , ĊĠĠĠĠĠĠĠ Ġlength Input : ĠInt , ĊĠĠĠĠĠĠĠ Ġvalues Arr : ĠList < Int >, ĊĠĠĠĠĠĠĠ Ġcounter : ĠInt ĊĠĠĠ Ġ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġcounter 1 Ġ= Ġcounter ĊĠĠĠĠĠĠĠ Ġif Ġ( i Ġ< Ġlength Input Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( values Arr [ i ] Ġ< Ġvalues Arr [ i Ġ+ Ġ 1 ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcounter 1 ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcounter 1 ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġcounter 1 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcheck Back wards ( ĊĠĠĠĠĠĠĠ Ġi : ĠInt , ĊĠĠĠĠĠĠĠ Ġvalues Arr : ĠList < Int >, ĊĠĠĠĠĠĠĠ Ġcounter : ĠInt ĊĠĠĠ Ġ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġcounter 1 Ġ= Ġcounter ĊĠĠĠĠĠĠĠ Ġif Ġ( i Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( values Arr [ i Ġ- Ġ 1 ] Ġ> Ġvalues Arr [ i ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcounter 1 ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcounter 1 ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġcounter 1 ĊĠĠĠ Ġ} Ċ }