package Ġad . k ata . a oc 2 0 2 1 . types Ċ Ċ import Ġad . k ata . a oc 2 0 2 1 . extensions . transp osed Ċ Ċ fun Ġ< T > ĠMatrix < T >. value At ( index : ĠCoordinate ): ĠT ? Ġ= ĊĠĠĠ Ġto ListOf Lists (). get OrNull ( index . col Index )?. get OrNull ( index . rowIndex ) Ċ Ċ operator Ġfun ĠCoordinate . plus ( other : ĠPair < Int , ĠInt >) Ġ= ĊĠĠĠ ĠCoordinate ( rowIndex Ġ+ Ġother . first , Ġcol Index Ġ+ Ġother . second ) Ċ Ċ fun Ġ< T > ĠMatrix < T >. transp osed () Ġ= Ġto ListOf Lists (). transp osed () Ċ Ċ fun Ġ< T , ĠR > ĠMatrix < T >. map Indexed ( transform : Ġ( Coordinate , ĠT ) Ġ-> ĠR ) Ġ= ĊĠĠĠ Ġto ListOf Lists (). map Indexed Ġ{ Ġcol Index , Ġc Ġ-> ĊĠĠĠĠĠĠĠ Ġc . map Indexed Ġ{ ĠrowIndex , Ġitem Ġ-> Ġtransform ( Coordinate ( rowIndex , Ġcol Index ), Ġitem ) Ġ} ĊĠĠĠ Ġ}. to Matrix () Ċ Ċ fun Ġ< T , ĠR > ĠMatrix < T >. map ( transform : Ġ( value : ĠT ) Ġ-> ĠR ) Ġ= ĊĠĠĠ Ġto ListOf Lists (). map Ġ{ Ġc Ġ-> Ġc . map Ġ{ Ġitem Ġ-> Ġtransform ( item ) Ġ} Ġ}. to Matrix () Ċ Ċ fun Ġ< T > ĠMatrix < T >. filter Indexed ( predicate : Ġ( Coordinate , Ġvalue : ĠT ) Ġ-> ĠBoolean ) Ġ= ĊĠĠĠ Ġto ListOf Lists (). flatMap Indexed Ġ{ Ġcol Index , Ġc Ġ-> ĊĠĠĠĠĠĠĠ Ġc . with Index (). filter Ġ{ Ġitem Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpredicate ( Coordinate ( item . index , Ġcol Index ), Ġitem . value ) ĊĠĠĠĠĠĠĠ Ġ}. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCoordinate ( it . index , Ġcol Index ) Ġto Ġit . value ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}. toMap () Ċ Ċ fun Ġ< T > ĠMatrix < T >. flatten () Ġ= Ġto ListOf Lists (). flatten () Ċ Ċ inline Ġfun Ġ< T > ĠMatrix < T >. all ( predicate : Ġ( T ) Ġ-> ĠBoolean ) Ġ= Ġflatten (). all ( predicate ) Ċ Ċ fun Ġ< T > ĠMatrix < T >. adjacent Items Of ( c : ĠCoordinate , Ġvectors : ĠSet < Pair < Int , ĠInt >> Ġ= Ġad jacency Vectors ) Ġ= ĊĠĠĠ Ġvectors . map Ġ{ Ġc Ġ+ Ġit Ġ} ĊĠĠĠĠĠĠĠ Ġ. map NotNull Ġ{ Ġac Ġ-> Ġvalue At ( ac )?. let Ġ{ Ġac Ġto Ġit Ġ} Ġ} ĊĠĠĠĠĠĠĠ Ġ. toMap () Ċ Ċ private Ġval Ġad jacency Vectors Ġ= ĊĠĠĠ Ġset Of (- 1 Ġto Ġ- 1 , Ġ 0 Ġto Ġ- 1 , Ġ 1 Ġto Ġ- 1 , Ġ- 1 Ġto Ġ 0 , Ġ 1 Ġto Ġ 0 , Ġ- 1 Ġto Ġ 1 , Ġ 0 Ġto Ġ 1 , Ġ 1 Ġto Ġ 1 )