1+ /*
2+ let flag;
3+ const inf = 1010
4+ let dir = "LRUD";
5+ let dx = [0,0,-1,1];
6+ let dy = [-1,1,0,0];
7+ let len = [0,0,0,0];
8+ let str = new Array(60);
9+ let ar = new Array(4);
10+ let idx = new Array(4);
11+ let transpose = new Array(4);
12+
13+ for (let i = 0; i < 4; i++) {
14+ ar[i] = new Array(4);
15+ idx[i] = new Array(4);
16+ transpose[i] = new Array(4);
17+ }
18+
19+
20+ export function isSolvable(){
21+
22+ }
23+
24+ function row_conflict(rc){
25+ let i, j, k, x, y, res = 0;
26+
27+ for (i = 0; i < 4; i++){
28+ x = (ar[rc][i] >> 2);
29+ if (ar[rc][i] != 16) idx[x][len[x]++] = ar[rc][i];
30+ }
31+
32+ for (i = 0; i < 4; i++){
33+ if (len[i] > 1){
34+ for (j = 0; j < len[i]; j++){
35+ for (k = j + 1; k < len[i]; k++){
36+ if (idx[i][j] > idx[i][k]) res += 2;
37+ }
38+ }
39+ }
40+ len[i] = 0;
41+ }
42+ return res;
43+ }
44+
45+ function column_conflict(rc){
46+ let i, j, k, x, y, res = 0;
47+
48+ for (i = 0; i < 4; i++){
49+ x = (ar[i][rc] & 3);
50+ if (ar[i][rc] != 16) idx[x][len[x]++] = ar[i][rc];
51+ }
52+
53+ for (i = 0; i < 4; i++){
54+ if (len[i] > 1){
55+ for (j = 0; j < len[i]; j++){
56+ for (k = j + 1; k < len[i]; k++){
57+ if (idx[i][j] > idx[i][k]) res += 2;
58+ }
59+ }
60+ }
61+ len[i] = 0;
62+ }
63+ return res;
64+ }
65+
66+ let heuristic(bx, by){
67+ let i, j, k, l, res, linear_conflict = 0, manhattan_distance = 0;
68+
69+ for (i = 0; i < 4; i++){
70+ for (j = 0; j < 4; j++){
71+ transpose[j][i] = ar[i][j];
72+ if (ar[i][j] != 16){
73+ manhattan_distance += F(i, j);
74+ }
75+ }
76+ linear_conflict += row_conflict(i);
77+ linear_conflict += column_conflict(i);
78+ }
79+
80+ res = manhattan_distance + linear_conflict;
81+ return res;
82+ }
83+
84+ function ida(bx, by, lx, ly, g, lim, d, h){
85+ if (flag) return 0;
86+
87+ if (!h){
88+ if (!flag){
89+ flag = true;
90+ str[d] = 0;
91+ //puts(str);
92+ console.log(str);
93+ }
94+ return g;
95+ }
96+
97+ let f = g + h;
98+ if (f > lim) return f;
99+
100+ let i, k, l, nh, r, res = inf;
101+ for (i = 0; i < 4; i++){
102+ k = bx + dx[i], l = by + dy[i];
103+ if (k >= 0 && k < 4 && l >= 0 && l < 4 && !(k === lx && l === ly)){
104+ nh = h;
105+ nh -= F(k, l);
106+ if (bx !== k) nh -= row_conflict(bx), nh -= row_conflict(k);
107+ if (by !== l) nh -= column_conflict(by), nh -= column_conflict(l);
108+ swap(ar[bx][by], ar[k][l]);
109+ let sw ;
110+
111+ nh += F(bx, by);
112+ if (bx != k) nh += row_conflict(bx), nh += row_conflict(k);
113+ if (by != l) nh += column_conflict(by), nh += column_conflict(l);
114+
115+ str[d] = dir[i];
116+ r = ida(k, l, bx, by, g + 1, lim, d + 1, nh);
117+ swap(ar[bx][by], ar[k][l]);
118+ if (r < res) res = r;
119+ if (r <= lim) return r;
120+ }
121+ }
122+
123+ return res;
124+ }
125+
126+
127+ */
0 commit comments