package Ġcolour . coroutine . columns Ċ Ċ import Ġcolour . coroutine . Order Ċ import Ġcolour . order To Colour ĊĊ Ċ class ĠColumn ed Coroutine ( ĊĠĠĠ Ġprivate Ġval Ġcolumn ed Ġ: Column ed = ĠColumn ed () Ċ ){ ĊĠĠĠ Ġprivate Ġval Ġorder Ġ= ĠOrder () ĊĊĠĠĠ Ġsuspend Ġfun Ġpr ln ( msg : String ): ĠUnit Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġo Ġ= Ġorder . job Order () ĊĠĠĠĠĠĠĠ Ġval Ġlines Ġ= Ġcolumn ed . to Column Lines ( column Ġ= Ġo , Ġmsg Ġ= Ġmsg ) ĊĠĠĠĠĠĠĠ Ġlines . forEach Ġ{ Ġcolour . coroutine . pr ln ( order To Colour [ o ], it ) Ġ} ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ class ĠColumn ed ( ĊĠĠĠ Ġprivate Ġval Ġcolumn Width : Int Ġ= Ġ 2 0 , ĊĠĠĠ Ġprivate Ġval Ġseparator : String Ġ= Ġ" |" Ċ Ċ ){ ĊĠĠĠ Ġfun Ġto Column Lines ( column : Int , msg : String ): ĠList < String > Ġ= Ġmsg . chunk ed ( 2 0 ). map Ġ{ Ġcolumn Prefix ( column ) Ġ+ it Ġ} ĊĊĠĠĠ Ġfun Ġcolumn Prefix ( column : Int ): String Ġ= Ġ( 0 .. column * Ġcolumn Width ). fold (" "){ Ġa , Ġb Ġ-> Ġ Ġa + Ġ" Ġ"} Ċ Ċ }