// She ld on , ĠLe on ard , ĠPen ny , Ċ // ĠR aj esh Ġand ĠHow ard Ġare Ġin Ġthe Ġqueue Ġfor Ġa Ċ // Ġ" Double ĠCol a " Ġdrink Ġv ending Ġmachine ; Ġthere Ġare Ġno Ċ // Ġother Ġpeople Ġin Ġthe Ġqueue . ĠThe Ġfirst Ġone Ġin Ġthe Ġqueue Ċ // Ġ( She ld on ) Ġbu ys Ġa Ġcan , Ġdr inks Ġit Ġand Ġdouble s ! ĠThe Ġresulting Ċ // Ġtwo ĠShe ld ons Ġgo Ġto Ġthe Ġend Ġof Ġthe Ġqueue . ĠThen Ġthe Ġnext Ġin Ġthe Ġqueue Ċ // Ġ( Le on ard ) Ġbu ys Ġa Ġcan , Ġdr inks Ġit Ġand Ġgets Ġto Ġthe Ġend Ġof Ġthe Ġqueue Ġas Ġtwo ĠLe on ards , Ġand Ġso Ġon . Ċ // Ċ // For Ġexample , ĠPen ny Ġdr inks Ġthe Ġthird Ġcan Ġof Ġcol a Ġand Ġthe Ġqueue Ġwill Ġlook Ġlike Ġthis : Ċ // Ċ // R aj esh , ĠHow ard , ĠShe ld on , ĠShe ld on , ĠLe on ard , ĠLe on ard , ĠPen ny , ĠPen ny Ċ // Write Ġa Ġprogram Ġthat Ġwill Ġreturn Ġthe Ġname Ġof Ġthe Ġperson Ġwho Ġwill Ġdrink Ġthe Ġn - th Ġcol a . ĊĊ Ċ object ĠWho Is Ġ{ ĊĠĠĠ Ġfun Ġwho Is Next ( names : ĠList < String >, Ġn : ĠInt ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpair Names Ġ= Ġmutable Map Of < String , ĠInt Range >() ĊĠĠĠĠĠĠĠ Ġvar Ġfinal Name Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġvar Ġindex Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġvar Ġposition Ġ= Ġnames . size Ġ* Ġ( index ) Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠ Ġif Ġ( n Ġ<= Ġnames . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnames [ n Ġ- Ġ 1 ] ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( position Ġ<= Ġn ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindex Ġ*= Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ(( value , Ġcounter ) Ġin Ġ( 1 .. names . size ). with Index ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpair Names [ names [ value ]] Ġ= Ġposition Ġ+ Ġindex Ġ* Ġvalue Ġuntil Ġposition Ġ+ Ġ( index Ġ* Ġcounter ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposition Ġ+= Ġnames . size Ġ* Ġ( index ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġpair Names . forEach Ġ{ Ġ( t , Ġu ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis True Ġ= Ġu . contains ( n ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( isTrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinal Name Ġ= Ġt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfinal Name ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġmain ( args : ĠArray < String >) Ġ{ ĊĠĠĠ Ġval Ġnames Ġ= ĠlistOf (" She ld on ", Ġ" Le on ard ", Ġ" Pen ny ", Ġ" R aj esh ", Ġ" How ard ") ĊĠĠĠ Ġval Ġnames 2 Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠ Ġ" D ais uke ĠA ram aki ", ĊĠĠĠĠĠĠĠ Ġ" Mot oko ĠK us an agi ", ĊĠĠĠĠĠĠĠ Ġ" B at ou ", ĊĠĠĠĠĠĠĠ Ġ" To g usa ", ĊĠĠĠĠĠĠĠ Ġ" I sh ik awa ", ĊĠĠĠĠĠĠĠ Ġ" S ait o ", ĊĠĠĠĠĠĠĠ Ġ" P azu ", ĊĠĠĠĠĠĠĠ Ġ" B orm a ", ĊĠĠĠĠĠĠĠ Ġ" Az uma ", ĊĠĠĠĠĠĠĠ Ġ" Y ano ", ĊĠĠĠĠĠĠĠ Ġ" Proto " ĊĠĠĠ Ġ) ĊĠĠĠ Ġprintln ( Who Is . who Is Next ( names 2 , Ġ 4 6 7 )) Ċ } Ċ Ċ // best Ġsolution Ċ // fun Ġwho Is Next ( names : ĠList < String >, Ġn : ĠInt ): ĠString Ġ= Ċ // ĠĠĠ Ġnames [ generate Sequence ( n ) Ġ{ Ġ( it Ġ- Ġnames . last Index ) Ġ/ Ġ 2 Ġ}. take While Ġ{ Ġit Ġ> Ġ 0 Ġ}. last () Ġ- Ġ 1 ] Ċ