// Ġhttp :// od z . sak ura . ne . jp / project euler /? Problem + 1 4 Ċ Ċ import Ġjava . util . concurrent . Concurrent HashMap Ċ Ċ // Ġval Ġmemo : ĠArray < Int ?> Ġ= ĠarrayOf Null s ( 1 _ 0 0 0 _ 0 0 0 ) Ċ // Ċ // Ġtail rec Ġfun Ġcol lat z Length Memo ised ( m : ĠLong , Ġn : ĠLong Ġ= Ġm , Ġcurr : ĠInt Ġ= Ġ 0 ): ĠInt Ġ{ Ċ // ĠĠĠĠ Ġreturn Ġwhen Ġ{ Ċ // ĠĠĠĠĠĠĠĠ Ġn Ġ< Ġmemo . size Ġ&& Ġmemo [ n . toInt ()] Ġ!= Ġnull Ġ-> Ġcurr Ġ+ Ġmemo [ n . toInt ()] !! Ċ // ĠĠĠĠĠĠĠĠ Ġn Ġ== Ġ 1 L Ġ-> Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Ġ< Ġmemo . size . to Long ()) Ġmemo [ m . toInt ()] Ġ= Ġcurr Ġ+ Ġ 1 Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurr Ġ+ Ġ 1 Ċ // ĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠ Ġn Ġ% Ġ 2 Ġ== Ġ 0 L Ġ-> Ġcol lat z Length Memo ised ( m , Ġn Ġ/ Ġ 2 , Ġcurr Ġ+ Ġ 1 ) Ċ // ĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġcol lat z Length Memo ised ( m , Ġ 3 Ġ* Ġn Ġ+ Ġ 1 , Ġcurr Ġ+ Ġ 1 ) Ċ // ĠĠĠĠ Ġ} Ċ // Ġ} Ċ Ċ tail rec Ġfun Ġcol lat z Length ( n : ĠLong , Ġcurr : ĠInt Ġ= Ġ 0 ): ĠInt Ġ{ ĊĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠ Ġn Ġ== Ġ 1 L Ġ-> Ġcurr Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠ Ġn Ġ% Ġ 2 Ġ== Ġ 0 L Ġ-> Ġcol lat z Length ( n Ġ/ Ġ 2 , Ġcurr Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġcol lat z Length ( 3 Ġ* Ġn Ġ+ Ġ 1 , Ġcurr Ġ+ Ġ 1 ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ assert ( coll atz Length ( 1 3 L ) Ġ== Ġ 1 0 ) Ċ assert ( coll atz Length ( 7 L ) Ġ== Ġ 1 7 ) Ċ Ċ ( 1 L Ġuntil Ġ 1 _ 0 0 0 _ 0 0 0 L ) ĊĠĠĠ Ġ. map Ġ{ Ġit Ġto Ġcol lat z Length ( it ) Ġ} ĊĠĠĠ Ġ. max By OrNull Ġ{ Ġit . second Ġ} !! ĊĠĠĠ Ġ. first