import Ġjava . util .* Ċ Ċ fun Ġmain ( args : ĠArray < String >) Ġ{ ĊĠĠĠ Ġval Ġstart Ġ= ĠDate () ĊĠĠĠ Ġprintln ( next 1 0 Scores After ( 9 2 0 8 3 1 )) ĊĠĠĠ Ġprintln (" in Ġ${ Date (). time Ġ- Ġstart . time } ms ") Ċ } Ċ Ċ fun Ġnext 1 0 Scores After ( num Recipes : ĠInt ): ĠString Ġ{ ĊĠĠĠ Ġval ĠinitialState Ġ= ĠState ( scores Ġ= ĠlistOf ( 3 , Ġ 7 ), Ġelf 1 Ġ= Ġ 0 , Ġelf 2 Ġ= Ġ 1 ) ĊĠĠĠ Ġreturn ĠinitialState . take ( 1 0 Ġ+ Ġnum Recipes ). drop ( num Recipes ). join ToString ("") Ċ } Ċ Ċ class ĠState ( val Ġscores : ĠList < Int >, Ġval Ġelf 1 : ĠInt , Ġval Ġelf 2 : ĠInt ) Ġ: ĠIterable < Int > Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġiterator (): ĠIterator < Int > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠS cores Iterator ( scores . to Mutable List (), Ġthis . elf 1 , Ġthis . elf 2 ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠS cores Iterator ( ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġscores : ĠMutable List < Int >, ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġelf 1 : ĠInt , ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġelf 2 : ĠInt Ċ ) Ġ: ĠIterator < Int > Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġlast Index Ġ= Ġ- 1 ĊĠĠĠ Ġoverride Ġfun Ġhas Next () Ġ= Ġtrue ĊĊĠĠĠ Ġoverride Ġfun Ġnext (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġi Ġ= Ġ++ last Index ĊĊĠĠĠĠĠĠĠ Ġwhile Ġ( i Ġ>= Ġscores . count ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgenerate Next Score () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġscores [ i ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġgenerate Next Score () Ġ{ ĊĠĠĠĠĠĠĠ Ġscores . addAll ( digits ( scores [ elf 1 ] Ġ+ Ġscores [ elf 2 ])) ĊĠĠĠĠĠĠĠ Ġelf 1 Ġ= Ġ( elf 1 Ġ+ Ġ 1 Ġ+ Ġscores [ elf 1 ]) Ġ% Ġscores . count () ĊĠĠĠĠĠĠĠ Ġelf 2 Ġ= Ġ( elf 2 Ġ+ Ġ 1 Ġ+ Ġscores [ elf 2 ]) Ġ% Ġscores . count () ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġdigits ( n : ĠInt ): ĠList < Int > Ġ{ ĊĠĠĠ Ġif Ġ( n Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠlistOf ( 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġresult Ġ= Ġmutable ListOf < Int >() ĊĠĠĠ Ġvar Ġnum Ġ= Ġn ĊĊĠĠĠ Ġwhile Ġ( num Ġ>= Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġresult . add ( num Ġ% Ġ 1 0 ) ĊĠĠĠĠĠĠĠ Ġnum Ġ/= Ġ 1 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġresult . reverse () ĊĠĠĠ Ġreturn Ġresult Ċ }