package Ġa oc 2 0 1 8 Ċ Ċ object ĠExercise 1 4 Ġ{ ĊĠĠĠ Ġval Ġfirst Ġ= Ġ 3 ĊĠĠĠ Ġval Ġsecond Ġ= Ġ 7 ĊĊĠĠĠ Ġfun Ġsplit ( num : ĠInt ): ĠPair < Int , ĠInt > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġde cs Ġ= Ġnum Ġ/ Ġ 1 0 ĊĠĠĠĠĠĠĠ Ġval Ġunits Ġ= Ġnum Ġ- Ġde cs Ġ* Ġ 1 0 ĊĠĠĠĠĠĠĠ Ġreturn Ġde cs Ġto Ġunits ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġgenerate ( cond : Ġ( current : ĠList < Int >) Ġ-> ĠBoolean ): ĠList < Int > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġmutable ListOf < Int >() ĊĠĠĠĠĠĠĠ Ġresult . add ( first ) ĊĠĠĠĠĠĠĠ Ġresult . add ( second ) ĊĊĠĠĠĠĠĠĠ Ġvar Ġfirst Idx Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġsecond Idx Ġ= Ġ 1 ĊĊĠĠĠĠĠĠĠ Ġwhile Ġ(! cond ( result )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnext Ġ= Ġresult [ first Idx ] Ġ+ Ġresult [ second Idx ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( de cs , Ġunits ) Ġ= Ġsplit ( next ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( de cs Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . add ( de cs ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! cond ( result )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . add ( units ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Idx Ġ= Ġ( first Idx Ġ+ Ġresult [ first Idx ] Ġ+ Ġ 1 ) Ġ% Ġresult . size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsecond Idx Ġ= Ġ( second Idx Ġ+ Ġresult [ second Idx ] Ġ+ Ġ 1 ) Ġ% Ġresult . size ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġresult . toList () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġlast 1 0 ( num : ĠInt ): ĠList < Int > Ġ= ĊĠĠĠĠĠĠĠ Ġgenerate Ġ{ Ġit . size Ġ== Ġnum Ġ+ Ġ 1 0 Ġ}. drop ( num ) ĊĊĠĠĠ Ġfun Ġtail Gen ( target : ĠString ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġgenerate Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . size Ġ>= Ġtarget . length Ġ&& Ġit . sub List ( it . size Ġ- Ġtarget . length , Ġit . size ). join ToString ("") Ġ== Ġtarget ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġresult . size Ġ- Ġtarget . length ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcalculate L as 1 0 ( input : ĠList < String >): ĠString Ġ= ĊĠĠĠĠĠĠĠ Ġlast 1 0 ( input [ 0 ]. toInt ()). join ToString ("") ĊĊĠĠĠ Ġfun Ġcalculate Tail Gen ( input : ĠList < String >): ĠInt Ġ= ĊĠĠĠĠĠĠĠ Ġtail Gen ( input [ 0 ]) Ċ } Ċ