package Ġcom . nib ado . projects . ad vent . y 2 0 1 9 Ċ Ċ import Ġcom . nib ado . projects . ad vent .* Ċ import Ġjava . util . concurrent . Linked BlockingQueue Ċ Ċ object ĠDay 1 1 Ġ: ĠDay Ġ{ ĊĠĠĠ Ġprivate Ġval Ġprogram Ġ= Ġresource String ( 2 0 1 9 , Ġ 1 1 ). split ("," ). map Ġ{ Ġit . to Long () Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġpart 1 () Ġ= Ġsolve ( 0 ). first ĊĠĠĠ Ġoverride Ġfun Ġpart 2 () Ġ= Ġsolve ( 1 ). second ĊĊĠĠĠ Ġprivate Ġfun Ġsolve ( start : ĠInt ) Ġ: ĠPair < Int , ĠString > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġinput Ġ= ĠLinked BlockingQueue < Long >() ĊĠĠĠĠĠĠĠ Ġval Ġoutput Ġ= ĠLinked BlockingQueue < Long >() ĊĊĠĠĠĠĠĠĠ Ġval Ġbrain Ġ= ĠInt Code ( program , Ġinput , Ġoutput ) ĊĊĠĠĠĠĠĠĠ Ġval Ġgrid Ġ= Ġmutable Map Of < Point , ĠInt >() ĊĠĠĠĠĠĠĠ Ġvar Ġdirection Ġ= ĠDirection . NORTH ĊĠĠĠĠĠĠĠ Ġvar Ġcurrent Point Ġ= ĠPoint ( 0 , 0 ) ĊĠĠĠĠĠĠĠ Ġinput . put ( start . to Long ()) ĊĊĠĠĠĠĠĠĠ Ġwhile (! brain . terminated ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ(! brain . terminated Ġ&& Ġbrain . output . size Ġ< Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbrain . step () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif (! brain . terminated ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgrid [ current Point ] Ġ= Ġoutput . take (). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdirection Ġ= Ġif Ġ( output . take () Ġ== Ġ 0 L ) Ġdirection . cc w () Ġelse Ġdirection . cw () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Point Ġ+= Ġdirection ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcolor Ġ= Ġgrid . get OrDefault ( current Point , Ġ 0 ). to Long () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput . put ( color ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġgrid . keys . size Ġto Ġrender ( grid ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrender ( grid : ĠMap < Point , ĠInt >) Ġ: ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbounds Ġ= Ġ( grid . keys Ġ). bounds () ĊĠĠĠĠĠĠĠ Ġreturn Ġbounds . points (). map Ġ{ Ġit Ġto Ġgrid . get OrDefault ( it , Ġ- 1 ) Ġ}. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it . second ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> Ġ'#' ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ' Ġ' ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. chunk ed ( bounds . second . x Ġ- Ġbounds . first . x Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . join ToString (" "). trim End () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. join ToString ("\ n ") ĊĠĠĠ Ġ} Ċ }