package Ġcom . kj ipo . experiments ĊĊ Ċ class ĠMatrix < T >( val ĠnumberOf Rows : ĠInt , Ġval ĠnumberOf Columns : ĠInt , Ġval Ġarray : ĠArray < Array < T >>) Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġinline Ġoperator Ġfun Ġ< re ified ĠT > Ġinvoke () Ġ= ĠMatrix ( 0 , Ġ 0 , ĠArray ( 0 , Ġ{ Ġempty Array < T >() Ġ})) ĊĊĠĠĠĠĠĠĠ Ġinline Ġoperator Ġfun Ġ< re ified ĠT > Ġinvoke ( x Width : ĠInt , Ġy Width : ĠInt ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMatrix ( x Width , Ġy Width , ĠArray ( x Width , Ġ{ ĠarrayOf Null s < T >( y Width ) Ġ})) ĊĊĠĠĠĠĠĠĠ Ġinline Ġoperator Ġfun Ġ< re ified ĠT > Ġinvoke ( x Width : ĠInt , Ġy Width : ĠInt , Ġoperator : Ġ( Int , ĠInt ) Ġ-> Ġ( T )): ĠMatrix < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġarray Ġ= ĠArray ( x Width , Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġx Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠArray ( y Width , Ġ{ Ġoperator ( x , Ġit ) Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠMatrix ( x Width , Ġy Width , Ġarray ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġinline Ġfun Ġ< re ified ĠT > Ġcopy ( matrix : ĠMatrix < T >): ĠMatrix < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠMatrix ( matrix . numberOf Rows , Ġmatrix . numberOf Columns , Ġ{ Ġrow , Ġcolumn Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmatrix . get ( row , Ġcolumn ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoperator Ġfun Ġget ( x : ĠInt , Ġy : ĠInt ): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġarray [ x ][ y ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoperator Ġfun Ġset ( x : ĠInt , Ġy : ĠInt , Ġt : ĠT ) Ġ{ ĊĠĠĠĠĠĠĠ Ġarray [ x ][ y ] Ġ= Ġt ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinline Ġfun ĠforEach ( operation : Ġ( T ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġarray . forEach Ġ{ Ġit . forEach Ġ{ Ġoperation . invoke ( it ) Ġ} Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinline Ġfun ĠforEach Indexed ( operation : Ġ( x : ĠInt , Ġy : ĠInt , ĠT ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġarray . forEach Indexed Ġ{ Ġx , Ġp Ġ-> Ġp . forEach Indexed Ġ{ Ġy , Ġt Ġ-> Ġoperation . invoke ( x , Ġy , Ġt ) Ġ} Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠ Ġarray . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . forEach Ġ{ Ġresult . append ( it ). append (" Ġ") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult . append ("\ n ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġresult . toString () ĊĠĠĠ Ġ} ĊĊ Ċ }