1
+ // Runtime: 100 ms (Top 33.33%) | Memory: 44.3 MB (Top 33.33%)
1
2
/**
2
3
* @param {number[][] } board
3
4
* @return {number }
4
5
*/
5
6
var movesToChessboard = function ( board ) {
6
7
const boardSize = board . length ;
7
8
const boardSizeIsEven = boardSize % 2 === 0 ;
8
-
9
+
9
10
if ( ! canBeTransformed ( board ) ) return - 1 ;
10
-
11
+
11
12
// to convert to 010101
12
13
let rowSwap = 0 ;
13
14
let colSwap = 0 ;
14
-
15
+
15
16
// to convert to 101010
16
17
let rowSwap2 = 0 ;
17
18
let colSwap2 = 0 ;
18
-
19
+
19
20
for ( let i = 0 ; i < boardSize ; i ++ ) {
20
21
if ( board [ i ] [ 0 ] === i % 2 ) {
21
22
rowSwap ++ ;
@@ -28,26 +29,26 @@ var movesToChessboard = function(board) {
28
29
colSwap2 ++ ;
29
30
}
30
31
}
31
-
32
+
32
33
// no need to swap anything
33
- if ( ( rowSwap + colSwap ) === 0 || ( rowSwap2 + colSwap2 ) === 0 ) return 0 ;
34
-
34
+ if ( ( rowSwap + colSwap ) === 0 || ( rowSwap2 + colSwap2 ) === 0 ) return 0 ;
35
+
35
36
if ( boardSizeIsEven ) {
36
37
rowSwap = Math . min ( rowSwap , rowSwap2 ) ;
37
38
colSwap = Math . min ( colSwap , colSwap2 ) ;
38
39
} else {
39
- rowSwap = rowSwap % 2 === 0 ? rowSwap : rowSwap2 ;
40
+ rowSwap = rowSwap % 2 === 0 ? rowSwap : rowSwap2 ;
40
41
colSwap = colSwap % 2 === 0 ? colSwap : colSwap2 ;
41
42
}
42
-
43
+
43
44
return ( rowSwap + colSwap ) / 2 ;
44
-
45
+
45
46
function canBeTransformed ( board ) {
46
47
// number of 0 and 1 should be equal
47
48
let sum = board [ 0 ] . reduce ( ( a , b ) => a + b ) ;
48
49
if ( boardSizeIsEven && sum != boardSize / 2 ) return false ;
49
50
if ( ! boardSizeIsEven && sum > ( ( boardSize + 1 ) / 2 ) ) return false ;
50
-
51
+
51
52
let first = board [ 0 ] . join ( '' ) ;
52
53
let opposite = board [ 0 ] . map ( ( item ) => item === 1 ? 0 : 1 ) . join ( '' ) ;
53
54
// each row should be equal to first or opposite
@@ -68,4 +69,4 @@ var movesToChessboard = function(board) {
68
69
}
69
70
return Math . abs ( counter [ 0 ] - counter [ 1 ] ) === 1
70
71
}
71
- } ;
72
+ } ;
0 commit comments