/** Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 9 - present Ġa lex n 0 Ċ Ġ* ĠAll Ġrights Ġreserved . Ċ Ġ*/ Ċ package Ġcom . opt 2 code . core . function . arg ĊĊ Ċ class ĠArg Info ( val Ġsizes : ĠList < Int >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġargs : ĠList < Wrapper Arg Value >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsize : ĠInt ) Ġ{ ĊĊĊĠĠĠ Ġfun Ġ< T > Ġcalculate ( func : Ġ( List < Wrapper Arg Value >) Ġ-> ĠT ): ĠAny ? Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġres : ĠAny ? Ġ= Ġfunc ĊĠĠĠĠĠĠĠ Ġvar Ġcurrent Size Ġ= Ġsize ĊĠĠĠĠĠĠĠ Ġif Ġ( current Size Ġ<= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfunc . invoke ( emptyList ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfor Ġ( k Ġin Ġargs . size Ġdown To Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġres Ġ= Ġcompose ( res , Ġargs [ k Ġ- Ġ 1 ]. v , Ġk , Ġsizes [ k Ġ- Ġ 1 ], Ġcurrent Size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Size Ġ= Ġget Compose Size ( current Size , Ġsizes [ k Ġ- Ġ 1 ]) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġres ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcompose ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġf : ĠAny ?, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġg : ĠAny ?, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġk : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġg Size : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġf Size : ĠInt ĊĠĠĠ Ġ): ĠAny ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnew Size Ġ= Ġget Compose Size ( f Size , Ġg Size ) ĊĠĠĠĠĠĠĠ Ġval Ġfn c Ġ= Ġf Ġas Ġ( List < Wrapper Arg Value >) Ġ-> ĠAny ? ĊĠĠĠĠĠĠĠ Ġreturn Ġ{ Ġarg : ĠList < Wrapper Arg Value > Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġres Ġ= ĠArrayList < Wrapper Arg Value >() ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmin : ĠInt Ġ= ĠMath . min ( k Ġ- Ġ 1 , Ġnew Size ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( min Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġres . addAll ( arg . sub List ( 0 , Ġmin )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( g Size Ġ>= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġg nc Ġ= Ġg Ġas Ġ( List < Wrapper Arg Value >) Ġ-> ĠAny ? ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġres . add ( Wrapper Arg Value ( gn c ( arg . sub List ( k Ġ- Ġ 1 , Ġk Ġ- Ġ 1 Ġ+ Ġg Size )))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġres . add ( Wrapper Arg Value ( g )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( k Ġ< Ġf Size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstarting Index Ġ= Ġif Ġ( g Size Ġ>= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġk Ġ- Ġ 1 Ġ+ Ġg Size ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġk Ġ+ Ġg Size ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġres . addAll ( arg . sub List ( starting Index , Ġnew Size )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( g Size Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġfn c ( res ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfn c ( res ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( new Size Ġ>= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . invoke ( emptyList ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Compose Size ( f Size : ĠInt , Ġg Size : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( f Size Ġ+ Ġg Size Ġ>= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( g Size Ġ>= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġf Size Ġ+ Ġg Size Ġ- Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( f Size Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġf Size Ġ+ Ġg Size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ- 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ- 1 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }