package Ġoct _ challenge 2 0 2 1 Ċ Ċ fun Ġmain () Ġ{ Ċ // ĠĠĠ Ġval Ġarr 1 Ġ= Ġint ArrayOf ( 2 , 3 , 1 , 1 , 4 ) Ċ // ĠĠĠ Ġassert ( can Jump ( arr 1 )) Ċ // ĠĠĠ Ġprintln ( can Jump ( arr 1 )) ĊĊĠĠĠ Ġval Ġarr 2 Ġ= Ġint ArrayOf ( 3 , Ġ 2 , Ġ 1 , Ġ 0 , Ġ 4 ) ĊĠĠĠ Ġassert (! can Jump ( arr 2 )) ĊĠĠĠ Ġprintln ( can Jump ( arr 2 )) Ċ } Ċ Ċ fun Ġcan Jump ( nums : ĠInt Array ): ĠBoolean Ġ{ ĊĠĠĠ Ġval Ġmemo Ġ= ĠInt Array ( nums . size ) Ġ{ Ġ- 1 Ġ} ĊĠĠĠ Ġreturn Ġcan Step ( 0 , Ġnums , Ġmemo ) Ċ } Ċ Ċ fun Ġcan Step ( index : ĠInt , Ġnums : ĠInt Array , Ġmemo : ĠInt Array ): ĠBoolean Ġ{ ĊĠĠĠ Ġif Ġ( index Ġ>= Ġnums . size Ġ- Ġ 1 ) Ġreturn Ġtrue ĊĠĠĠ Ġif Ġ( memo [ index ] Ġ!= Ġ- 1 ) Ġreturn Ġmemo [ index ] Ġ== Ġ 1 ĊĠĠĠ Ġval Ġsteps Ġ= Ġnums [ index ] ĊĠĠĠ Ġval Ġmax Index Ġ= Ġmin Of ( index Ġ+ Ġsteps , Ġnums . size Ġ- Ġ 1 ) ĊĠĠĠ Ġfor Ġ( step Ġin Ġindex Ġ+ Ġ 1 .. max Index ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( can Step ( step , Ġnums , Ġmemo )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmemo [ step ] Ġ= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġmemo [ index ] Ġ= Ġ 0 ĊĠĠĠ Ġreturn Ġfalse Ċ } Ċ