package Ġfp . algorithm Ċ Ċ import Ġfp . kotlin . example . head Ċ import Ġfp . kotlin . example . tail Ċ Ċ fun Ġmain () Ġ{ ĊĠĠĠ Ġval Ġanswer Ġ= Ġmake ( array Of ( 1 , 5 , 2 , 6 , 3 , 7 , 4 ), ĠarrayOf ( array Of ( 2 , 5 , 3 ), ĠarrayOf ( 4 , 4 , 1 ), ĠarrayOf ( 1 , 7 , 3 )), ĠlistOf ()) ĊĠĠĠ Ġanswer . forEach Ġ{ Ġe Ġ-> Ġprintln ( e ) Ġ} Ċ } Ċ Ċ // ĠìŀĲ ë¥´ ê³ł Ċ private Ġfun Ġcut ( start : ĠInt , Ġend : ĠInt , Ġarr : ĠArray < Int >): ĠList < Int > Ġ{ ĊĠĠĠ Ġreturn Ġarr . copyOf Range ( start - 1 , Ġend ). asList () Ċ } Ċ Ċ // Ġìłķ ëł ¬ íķĺê³ł Ċ private Ġfun Ġquick sort ( list : ĠList < Int >): ĠList < Int > Ġ= Ġwhen Ġ{ ĊĠĠĠ Ġlist . isEmpty () Ġ-> Ġlist ĊĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpivot Ġ= Ġlist . head () ĊĠĠĠĠĠĠĠ Ġval Ġ( small , Ġbigger ) Ġ= Ġlist . tail (). partition Ġ{ Ġit Ġ< Ġpivot Ġ} ĊĠĠĠĠĠĠĠ Ġquick sort ( small ) Ġ+ ĠlistOf ( pivot ) Ġ+ Ġquick sort ( big ger ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ // Ġë ½ ĳ ìķĦ ìĦľ Ġê²°ê³¼ ìĹĲ Ġë¶ Ļ ìŀĦ Ġ( acc ĠìĹĲ Ġë Ī Ħ ìłģ ) Ċ private Ġfun Ġmake ( arr : ĠArray < Int >, Ġcommands : ĠArray < Array < Int >>, Ġacc : ĠList < Int > Ġ= ĠlistOf ()): ĠArray < Int > Ġ= Ġwhen Ġ{ ĊĠĠĠ Ġcommands . isEmpty () Ġ-> Ġacc . to Typed Array () ĊĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtemp Ġ= Ġcommands [ 0 ] ĊĠĠĠĠĠĠĠ Ġval Ġsorted Ġ= Ġquick sort ( cut ( temp [ 0 ], Ġtemp [ 1 ], Ġarr )) ĊĠĠĠĠĠĠĠ Ġval Ġnext Ġ= Ġcommands . drop ( 1 ) ĊĠĠĠĠĠĠĠ Ġif Ġ( next . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmake ( arr , ĠarrayOf (), Ġacc . plus ( sorted [ temp [ 2 ]- 1 ])) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmake ( arr , Ġnext . to Typed Array (), Ġacc . plus ( sorted [ temp [ 2 ]- 1 ])) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ