package Ġcom . nib ado . projects . ad vent . y 2 0 1 7 Ċ Ċ import Ġcom . nib ado . projects . ad vent . Day Ċ Ċ object ĠDay 0 6 Ġ: ĠDay Ġ{ ĊĠĠĠ Ġval Ġsolution : ĠSolution Ġby Ġlazy Ġ{ Ġsolve ( mutable ListOf ( 2 , Ġ 8 , Ġ 8 , Ġ 5 , Ġ 4 , Ġ 2 , Ġ 3 , Ġ 1 , Ġ 5 , Ġ 5 , Ġ 1 , Ġ 2 , Ġ 1 5 , Ġ 1 3 , Ġ 5 , Ġ 1 4 )) Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġpart 1 () Ġ= Ġsolution . first Cycle . toString () ĊĠĠĠ Ġoverride Ġfun Ġpart 2 () Ġ= Ġsolution . loop . toString () ĊĊĠĠĠ Ġfun Ġsolve ( b anks : ĠMutable List < Int >): ĠSolution Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġseen : ĠMutable Set < List < Int >> Ġ= Ġmutable Set Of () ĊĠĠĠĠĠĠĠ Ġvar Ġcycle Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġseen Before : ĠList < Int >? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġvar Ġfirst Cycle Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġwhile Ġ( true ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġseen . add ( b anks . toList ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcycle ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġ( index , Ġvalue ) Ġ= Ġb anks . with Index (). max By OrNull Ġ{ Ġit . value Ġ} !! ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġb anks [ index ] Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġvalue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġb anks [++ index Ġ% Ġb anks . size ] ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( seen . contains ( b anks )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( seen Before Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Cycle Ġ= Ġcycle ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġseen Before Ġ= Ġb anks . toList () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( seen Before Ġ== Ġb anks ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠSolution ( first Cycle , Ġcycle Ġ- Ġfirst Cycle ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdata Ġclass ĠSolution ( val Ġfirst Cycle : ĠInt , Ġval Ġloop : ĠInt ) Ċ }