The transpose of a matrix is an operator which flips a matrix over its diagonal; that is, it switches the row and column indices of the matrix A by producing another matrix, often denoted by AT.
type Matrix = Transpose <[[1]]>; // expected to be [[1]]
type Matrix1 = Transpose <[[1, 2], [3, 4]]>; // expected to be [[1, 3], [2, 4]]
type Matrix2 = Transpose <[[1, 2, 3], [4, 5, 6]]>; // expected to be [[1, 4], [2, 5], [3, 6]]
Solution:
type Transpose<M extends number[][],R = M['length'] extends 0?[]:M[0]> = {
[X in keyof R]:{
[Y in keyof M]:X extends keyof M[Y]?M[Y][X]:never
}
}
/* _____________ Test Cases _____________ */
import type { Equal, Expect } from '@type-challenges/utils'
import { ExpectFalse, NotEqual } from '@type-challenges/utils'
type cases = [
Expect<Equal<Transpose<[]>, []>>,
Expect<Equal<Transpose<[[1]]>, [[1]]>>,
Expect<Equal<Transpose<[[1, 2]]>, [[1], [2]]>>,
Expect<Equal<Transpose<[[1, 2], [3, 4]]>, [[1, 3], [2, 4]]>>,
Expect<Equal<Transpose<[[1, 2, 3], [4, 5, 6]]>, [[1, 4], [2, 5], [3, 6]]>>,
Expect<Equal<Transpose<[[1, 4], [2, 5], [3, 6]]>, [[1, 2, 3], [4, 5, 6]]>>,
Expect<Equal<Transpose<[[1, 2, 3], [4, 5, 6], [7, 8, 9]]>, [[1, 4, 7], [2, 5, 8], [3, 6, 9]]>>,
]
- Typescript Challenges Transpose Hard 144typescript challenges transpose hard checkrepeatedtuple typescript challenges medium typescript challenges mergeall medium typescript challenges medium public optionalundefined typescript hard 150 challenges transpose contiguous maxpool2d transpose maxpool2 densetensor transpose transpose pytorch