/** Ċ Ġ* Ġ@ author ĠK ul ik ov ĠKon st ant in Ċ Ġ* Ġ@ since Ġ 2 4 . 0 5 . 2 0 1 8 . Ċ Ġ*/ Ċ class ĠConsole Smart Block ( ĊĠĠĠĠĠĠĠ Ġid : ĠInt Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠ Ġx : ĠInt , ĊĠĠĠĠĠĠĠ Ġy : ĠInt , ĊĠĠĠĠĠĠĠ ĠmaxHeight : ĠInt Ġ= ĠHEIGHT , ĊĠĠĠĠĠĠĠ Ġmax Weight : ĠInt Ġ= ĠWE IGHT , ĊĠĠĠĠĠĠĠ Ġgenerate Factor : ĠDouble Ġ= ĠDEFAULT _ GENER ATE _ FACTOR , ĊĠĠĠĠĠĠĠ Ġroot Block : ĠAbstract Smart Block ? Ġ= Ġnull Ċ ) Ġ: ĠAbstract Smart Block ( id , Ġx , Ġy , ĠmaxHeight , Ġmax Weight , Ġgenerate Factor , Ġroot Block ) Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠBLOCK Ġ= Ġ" âĸ ĵ " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠSPACE Ġ= Ġ" âĸĳ " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠSTART Ġ= Ġ" âĸĴ " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdraw () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( root Block Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstring Model Ġ= ĠArray ( max Height Ġ* Ġ 3 , Ġ{ ĠArray ( max Weight Ġ* Ġ 3 , Ġ{ ĠBLOCK Ġ}) Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmatrix !!. forEach Indexed Ġ{ Ġblock Y Index , Ġrow Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrow . forEach Indexed Ġ{ Ġblock X Index , Ġsmart Block Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ(( smart Block Ġas ? ĠConsole Smart Block )?. getString Model () Ġ?: Ġfull String Model ()). forEach Indexed Ġ{ Ġc Y Index , Ġc Row Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc Row . forEach Indexed Ġ{ Ġc X Index , Ġs Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstring Model [ c Y Index Ġ+ Ġ( block Y Index Ġ* Ġ 3 )][ c X Index Ġ+ Ġ( block X Index Ġ* Ġ 3 )] Ġ= Ġs ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġstring Model . forEach Ġ{ Ġrow Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġline Ġ= ĠStringBuffer (). apply Ġ{ Ġrow . forEach Ġ{ Ġappend ( it ) Ġ} Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( line ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠgetString Model (). forEach Ġ{ Ġrow Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġline Ġ= ĠStringBuffer (). apply Ġ{ Ġrow . forEach Ġ{ Ġappend ( it ) Ġ} Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( line ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠgetString Model () Ġ= ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( BLOCK , Ġif Ġ( top Ġ!= Ġnull ) ĠSPACE Ġelse ĠBLOCK , ĠBLOCK ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( if Ġ( left Ġ!= Ġnull ) ĠSPACE Ġelse ĠBLOCK , Ġif Ġ( root Block Ġ== Ġnull ) ĠSTART Ġelse ĠSPACE , Ġif Ġ( right Ġ!= Ġnull ) ĠSPACE Ġelse ĠBLOCK ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( BLOCK , Ġif Ġ( bottom Ġ!= Ġnull ) ĠSPACE Ġelse ĠBLOCK , ĠBLOCK ) ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġfun Ġfull String Model () Ġ= ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( BLOCK , ĠBLOCK , ĠBLOCK ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( BLOCK , ĠBLOCK , ĠBLOCK ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( BLOCK , ĠBLOCK , ĠBLOCK ) ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġoverride Ġfun Ġget Child Block ( x : ĠInt , Ġy : ĠInt ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConsole Smart Block ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġid Ġ+ Ġ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Ġ= Ġx , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Ġ= Ġy , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠmaxHeight Ġ= ĠmaxHeight , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmax Weight Ġ= Ġmax Weight , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgenerate Factor Ġ= Ġgenerate Factor , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroot Block Ġ= Ġroot Block Ġ?: Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ċ }