-
Notifications
You must be signed in to change notification settings - Fork 0
/
rookArrayGen.js
77 lines (65 loc) · 1.5 KB
/
rookArrayGen.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
var rookSolutions = [];
var queenSolutions = [];
var permuter = function(array, sol) {
if(array.length===0) {
rookSolutions.push(sol.slice());
return;
}
for(var i=0; i<array.length; i++) {
xArray = array.slice();
xSol = sol.slice();
xSol.push(xArray.splice(i,1)[0]);
permuter(xArray, xSol);
}
};
var makeQueenBoards = function(array, sol) {
if(diagonalConflict(sol)) {
console.log("diag conflict");
return;
}
if(array.length===0) {
console.log("Found solution for queens!" , sol);
queenSolutions.push(sol.slice());
return;
}
for(var i=0; i<array.length; i++) {
xArray = array.slice();
xSol = sol.slice();
xSol.push(xArray.splice(i,1)[0]);
makeQueenBoards(xArray, xSol);
}
};
var diagonalConflict = function(arr){
var n = arr.length;
for (var i = 0; i < n; i++){
for (var j = i + 1; j < n; j++){
if (Math.abs(arr[j] - arr[i]) === Math.abs(j - i)) {
return true;
}
}
}
return false;
};
var makeEmptyBoard = function(n) {
var board = [];
for (var i = 0; i < n; i++) {
board.push([0]);
for (var j = 1; j < n; j++) {
board[i].push(0);
}
}
return board;
};
var makeBoardFromIndicies = function(array) {
var board = makeEmptyBoard(array.length);
for(var i=0; i<array.length; i++) {
var col = array[i]-1;
board[i][col] = 1;
}
return board;
};
// window.findNRooksSolution2 = function(n){
// rookSolutions = [];
// permuter(_.range(n),[]);
// return rookSolutions[0];
// };