import Ġkotlinx . coroutines . launch Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġjava . io . File Ċ Ċ fun Ġmain (){ ĊĠĠĠ Ġval Ġstate Ġ= ĠFile ( Thread . currentThread (). context ClassLoader . getResource (" input . txt ") !!. to URI ()). read Text () ĊĊĠĠĠ Ġval Ġcomputers Ġ= Ġ( 0 Ġuntil Ġ 5 0 ). map Ġ{ ĠComputer ( state , Ġit . to Long ()) Ġ} ĊĠĠĠ Ġvar Ġpack At Nat : ĠPack ? Ġ= Ġnull ĊĊĠĠĠ Ġvar Ġlast Y From Nat : ĠLong ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġshould Stop Ġ= Ġfalse ĊĊĠĠĠ Ġwhile (! should Stop ){ ĊĠĠĠĠĠĠĠ Ġvar Ġidle Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġfor ( comp Ġin Ġcomputers ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Idle Ġ= Ġcomp . run () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif (! is Idle ) Ġidle Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpack Ġ= Ġcomp . pack () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpack ?. let Ġ{ Ġpack Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( pack ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( pack . ad ress Ġ== Ġ 2 5 5 L ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( pack ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpack At Nat Ġ= Ġpack ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} else Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomputers . first Ġ{ Ġc Ġ-> Ġc . ad ress Ġ== Ġpack . ad ress Ġ}. receive ( pack ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif ( idle Ġ&& Ġpack At Nat Ġ!= Ġnull ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( last Y From Nat Ġ== Ġpack At Nat !!. y ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshould Stop Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( last Y From Nat ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Y From Nat Ġ= Ġpack At Nat !!. y ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomputers . first Ġ{ Ġc Ġ-> Ġc . ad ress Ġ== Ġ 0 L Ġ}. receive ( pack At Nat !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠComputer ( code : ĠString , Ġval Ġad ress : ĠLong ){ ĊĠĠĠ Ġval Ġint Code Ġ= ĠInt Code ( code , ĠlistOf ( ad ress )) ĊĠĠĠ Ġval Ġoutput Ġ= Ġmutable ListOf < Long >() ĊĊĠĠĠ Ġfun Ġrun (): ĠBoolean { ĊĠĠĠĠĠĠĠ Ġwhile Ġ( true ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( val Ġout Ġ= Ġint Code . step ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInt Code . NEED _ INPUT Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġint Code . add Input (- 1 ); Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġif Ġ( out Ġ!= Ġnull ) Ġ{ Ġoutput . add ( out ); Ġreturn Ġfalse Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġpack (): ĠPack ? { ĊĠĠĠĠĠĠĠ Ġif ( output . size Ġ>= Ġ 3 ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠPack ( output . remove At ( 0 ), Ġoutput . remove At ( 0 ), Ġoutput . remove At ( 0 )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġreceive ( pack : ĠPack ){ ĊĠĠĠĠĠĠĠ Ġint Code . add Input ( pack . x ) ĊĠĠĠĠĠĠĠ Ġint Code . add Input ( pack . y ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ data Ġclass ĠPack ( val Ġad ress : ĠLong , Ġval Ġx : ĠLong , Ġval Ġy : ĠLong )