package Ġa oc 2 0 1 9 Ċ Ċ import Ġkom u . ad vent of code . utils . per mutations Ċ import Ġjava . util . concurrent . Linked Blocking Deque Ċ import Ġkotlin . concurrent . thread Ċ Ċ fun Ġamp l ification Circuit 1 ( input : ĠString ): ĠLong Ġ{ ĊĠĠĠ Ġval Ġmachine Ġ= ĠInt Code Machine ( input ) ĊĠĠĠ Ġreturn ĠlistOf ( 0 L , Ġ 1 L , Ġ 2 L , Ġ 3 L , Ġ 4 L ) ĊĠĠĠĠĠĠĠ Ġ. per mutations () ĊĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġphases Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġphases . fold ( 0 L ) Ġ{ Ġv , Ġphase Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġamp Ġ= Ġmachine . clone () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġamp . send Input ( phase , Ġv ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġamp . run () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġamp . output ToList (). first () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ. max OrNull () !! Ċ } Ċ Ċ fun Ġamp l ification Circuit 2 ( input : ĠString ): ĠInt Ġ{ ĊĠĠĠ Ġval Ġmachine Ġ= ĠInt Code Machine ( input ) ĊĊĠĠĠ Ġreturn ĠlistOf ( 5 L , Ġ 6 L , Ġ 7 L , Ġ 8 L , Ġ 9 L ). per mutations (). map Ġ{ Ġphases Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġinputs Ġ= Ġphases . map Ġ{ Ġphase Ġ-> ĠLinked Blocking Deque ( listOf ( phase )) Ġ} ĊĠĠĠĠĠĠĠ Ġvar Ġlast Output Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġval Ġamp s Ġ= Ġinputs . map Indexed Ġ{ Ġi , Ġinput Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclone Ġ= Ġmachine . clone () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclone . read Input Ġ= Ġ{ Ġinput . take First () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclone . write Output Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinputs [( i Ġ+ Ġ 1 ) Ġ% Ġinputs . size ]. add Last ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i Ġ== Ġinputs . size Ġ- 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Output Ġ= Ġit . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclone ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġinputs [ 0 ]. add Last ( 0 ) ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( t Ġin Ġamp s . map Ġ{ Ġthread Ġ{ Ġit . run () Ġ} Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġt . join () ĊĊĠĠĠĠĠĠĠ Ġlast Output ĊĠĠĠ Ġ}. max OrNull () !! Ċ } ĊĊĊ