@@ -73,13 +73,47 @@ function sortedMatrix(list) {
73
73
74
74
exports . sortedMatrix = sortedMatrix ;
75
75
76
+ function squareMatrix ( matrix ) {
77
+ var width = matrix [ 0 ] . length ;
78
+ var height = matrix . length ;
79
+
80
+ if ( width === height ) {
81
+ return matrix ;
82
+ }
83
+
84
+ var newMatrix = [ ] ;
85
+
86
+ if ( width > height ) {
87
+ for ( var rw = 0 ; rw < height ; rw ++ ) {
88
+ newMatrix . push ( matrix [ rw ] . slice ( ) ) ;
89
+ }
90
+ for ( var i = height ; i < width ; i ++ ) {
91
+ newMatrix . push ( Array ( width ) ) ;
92
+ }
93
+ } else {
94
+ for ( var row = 0 ; row < height ; row ++ ) {
95
+ var rowExpansion = Array ( height - width ) ;
96
+ var rowSlice = matrix [ row ] . slice ( ) ;
97
+ Array . prototype . push . apply ( rowSlice , rowExpansion ) ;
98
+ newMatrix . push ( rowSlice ) ;
99
+ }
100
+ }
101
+ return newMatrix ;
102
+ }
103
+
104
+ exports . squareMatrix = squareMatrix ;
105
+
76
106
function transpose ( matrix ) {
107
+ var height = matrix . length ;
77
108
var width = matrix [ 0 ] . length ;
109
+
110
+ var squaredMatrix = squareMatrix ( matrix ) ;
111
+
78
112
var newMatrix = [ ] ;
79
113
80
114
// prevent inplace change
81
- for ( var row = 0 ; row < matrix . length ; row ++ ) {
82
- newMatrix . push ( matrix [ row ] . slice ( ) ) ;
115
+ for ( var rw = 0 ; rw < squaredMatrix . length ; rw ++ ) {
116
+ newMatrix . push ( squaredMatrix [ rw ] . slice ( ) ) ;
83
117
}
84
118
85
119
for ( var i = 0 ; i < newMatrix . length ; i ++ ) {
@@ -90,8 +124,13 @@ function transpose(matrix) {
90
124
newMatrix [ j ] [ i ] = temp ;
91
125
}
92
126
}
93
-
94
- newMatrix = newMatrix . slice ( 0 , width ) ;
127
+ if ( width > height ) {
128
+ for ( var row = 0 ; row < newMatrix . length ; row ++ ) {
129
+ newMatrix [ row ] = newMatrix [ row ] . slice ( 0 , height ) ;
130
+ }
131
+ } else {
132
+ newMatrix = newMatrix . slice ( 0 , width ) ;
133
+ }
95
134
return newMatrix ;
96
135
}
97
136
0 commit comments