-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsolvable.js
61 lines (53 loc) · 1.59 KB
/
solvable.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
function getRandomPos() {
let arr = shuffleArray([...Array(16).keys()]);
return shuffleArray(arr);
}
function shuffleArray(array) {
for (var i = array.length - 1; i > 0; i--) {
var j = Math.floor(Math.random() * (i + 1));
var temp = array[i];
array[i] = array[j];
array[j] = temp;
}
return array;
}
function findBlankRowIfEven(input) {
var index = input.indexOf(15);
var row = Math.floor(index/4);
return !(row%2);
}
function findNumberOfInversion(input) {
input = input.filter(i => i !== 15)
let l = input.length;
let numOfInversion = 0;
input.forEach((el,i) => {
if (i!==l-1) {
for (let j = i+1; j < l; j++) {
if (el > input[j]) {
numOfInversion++;
}
}
}
});
return numOfInversion;
}
function findSolvable(input) {
var numInversion = findNumberOfInversion(input);
// console.log('numInversion', numInversion);
var evenInversion = !(numInversion % 2) ;
// console.log('numInversion', numInversion, 'is Even?', evenInversion);
if (findBlankRowIfEven(input)) {
return !evenInversion;
} else {
return evenInversion;
}
}
[12,1,9,2,0,11,7,3,4,15,8,5,14,13,10,6]
[5,12,6,9,7,8,10,15,14,1,11,4,13,2,0,3]
[2,8,0,14,13,10,3,5,12,15,9,11,1,6,7,4]
findSolvable([12,1,9,2,0,11,7,3,4,15,8,5,14,13,10,6]);
findSolvable([5,12,6,9,7,8,10,15,14,1,11,4,13,2,0,3]);
findSolvable([2,8,0,14,13,10,3,5,12,15,9,11,1,6,7,4]);
findBlankRowIfEven([12,1,9,2,0,11,7,3,4,15,8,5,14,13,10,6]);
findBlankRowIfEven([5,12,6,9,7,8,10,15,14,1,11,4,13,2,0,3]);
findBlankRowIfEven([2,8,0,14,13,10,3,5,12,15,9,11,1,6,7,4]);