995 if (f1 > 0 && (f1 === f2 || f2 === 0)) return true; |
995 if (f1 > 0 && (f1 === f2 || f2 === 0)) return true; |
996 if (f0 > 0 && (f0 === f1 || f1 === 0)) return true; |
996 if (f0 > 0 && (f0 === f1 || f1 === 0)) return true; |
997 return false; |
997 return false; |
998 } |
998 } |
999 |
999 |
|
1000 BoardObj.prototype.right = function(brd) { |
|
1001 var updated = false; |
|
1002 var from = this.brd, to = brd.brd; |
|
1003 var moved = true; |
|
1004 var f0 = from.aa, f1 = from.ab, f2 = from.ac, f3 = from.ad; |
|
1005 if (f3 === 0) { |
|
1006 if (f2 === 0) { |
|
1007 if (f1 === 0) { // a 0 0 0 |
|
1008 if (f0 === 0) |
|
1009 moved = false; |
|
1010 f3 = f0; |
|
1011 f2 = 0; |
|
1012 } else { // a b 0 0 |
|
1013 f3 = f1; |
|
1014 f2 = f0; |
|
1015 } |
|
1016 f1 = 0; |
|
1017 } else { // f2 !== 0 && f3 === 0 |
|
1018 if (f1 === 0) { // a 0 b 0 |
|
1019 f3 = f2; |
|
1020 f2 = f0; |
|
1021 } else { // a b c 0 |
|
1022 f3 = f2; |
|
1023 f2 = f1; |
|
1024 f1 = f0; |
|
1025 } |
|
1026 } |
|
1027 f0 = 0; |
|
1028 } else { // f3 !== 0 |
|
1029 if (f2 === 0) { |
|
1030 if (f1 === 0) { // a 0 0 b |
|
1031 if (f0 === 0) |
|
1032 moved = false; |
|
1033 f2 = f0; |
|
1034 } else { // a b 0 c |
|
1035 f2 = f1; |
|
1036 f1 = f0; |
|
1037 } |
|
1038 f0 = 0; |
|
1039 } else { // f2 !== 0 && f3 !== 0 |
|
1040 if (f1 === 0) { // a 0 b c |
|
1041 if (f0 === 0) |
|
1042 moved = false; |
|
1043 f1 = f0; |
|
1044 f0 = 0; |
|
1045 } else { // else: a b c d |
|
1046 moved = false; |
|
1047 } |
|
1048 } |
|
1049 } |
|
1050 updated = updated || moved; |
|
1051 if (f2 === 0) { |
|
1052 to.aa = 0; |
|
1053 to.ab = 0; |
|
1054 to.ac = 0; |
|
1055 to.ad = f3; |
|
1056 continue; |
|
1057 } |
|
1058 if (f1 === 0) { |
|
1059 to.aa = 0; |
|
1060 to.ab = 0; |
|
1061 if (f2 === f3) { |
|
1062 updated = true; |
|
1063 to.ac = 0; |
|
1064 to.ad = f3 + 1; |
|
1065 } else { |
|
1066 to.ac = f2; |
|
1067 to.ad = f3; |
|
1068 } |
|
1069 continue; |
|
1070 } |
|
1071 if (f2 === f3) { |
|
1072 updated = true; |
|
1073 to.aa = 0; |
|
1074 to.ad = f3 + 1; |
|
1075 if (f0 === f1) { |
|
1076 to.ab = 0; |
|
1077 to.ac = f1 + 1; |
|
1078 } else { |
|
1079 to.ab = f0; |
|
1080 to.ac = f1; |
|
1081 } |
|
1082 } else { |
|
1083 to.ad = f3; |
|
1084 if (f1 === f2) { |
|
1085 updated = true; |
|
1086 to.aa = 0; |
|
1087 to.ab = f0; |
|
1088 to.ac = f2 + 1; |
|
1089 } else { |
|
1090 if (f0 === f1) { |
|
1091 updated = true; |
|
1092 to.aa = 0; |
|
1093 to.ab = f1+1; |
|
1094 to.ac = f2; |
|
1095 } else { |
|
1096 to.aa = f0; |
|
1097 to.ab = f1; |
|
1098 to.ac = f2; |
|
1099 } |
|
1100 } |
|
1101 } |
|
1102 var moved = true; |
|
1103 var f0 = from.ba, f1 = from.bb, f2 = from.bc, f3 = from.bd; |
|
1104 if (f3 === 0) { |
|
1105 if (f2 === 0) { |
|
1106 if (f1 === 0) { // a 0 0 0 |
|
1107 if (f0 === 0) |
|
1108 moved = false; |
|
1109 f3 = f0; |
|
1110 f2 = 0; |
|
1111 } else { // a b 0 0 |
|
1112 f3 = f1; |
|
1113 f2 = f0; |
|
1114 } |
|
1115 f1 = 0; |
|
1116 } else { // f2 !== 0 && f3 === 0 |
|
1117 if (f1 === 0) { // a 0 b 0 |
|
1118 f3 = f2; |
|
1119 f2 = f0; |
|
1120 } else { // a b c 0 |
|
1121 f3 = f2; |
|
1122 f2 = f1; |
|
1123 f1 = f0; |
|
1124 } |
|
1125 } |
|
1126 f0 = 0; |
|
1127 } else { // f3 !== 0 |
|
1128 if (f2 === 0) { |
|
1129 if (f1 === 0) { // a 0 0 b |
|
1130 if (f0 === 0) |
|
1131 moved = false; |
|
1132 f2 = f0; |
|
1133 } else { // a b 0 c |
|
1134 f2 = f1; |
|
1135 f1 = f0; |
|
1136 } |
|
1137 f0 = 0; |
|
1138 } else { // f2 !== 0 && f3 !== 0 |
|
1139 if (f1 === 0) { // a 0 b c |
|
1140 if (f0 === 0) |
|
1141 moved = false; |
|
1142 f1 = f0; |
|
1143 f0 = 0; |
|
1144 } else { // else: a b c d |
|
1145 moved = false; |
|
1146 } |
|
1147 } |
|
1148 } |
|
1149 updated = updated || moved; |
|
1150 if (f2 === 0) { |
|
1151 to.ba = 0; |
|
1152 to.bb = 0; |
|
1153 to.bc = 0; |
|
1154 to.bd = f3; |
|
1155 continue; |
|
1156 } |
|
1157 if (f1 === 0) { |
|
1158 to.ba = 0; |
|
1159 to.bb = 0; |
|
1160 if (f2 === f3) { |
|
1161 updated = true; |
|
1162 to.bc = 0; |
|
1163 to.bd = f3 + 1; |
|
1164 } else { |
|
1165 to.bc = f2; |
|
1166 to.bd = f3; |
|
1167 } |
|
1168 continue; |
|
1169 } |
|
1170 if (f2 === f3) { |
|
1171 updated = true; |
|
1172 to.ba = 0; |
|
1173 to.bd = f3 + 1; |
|
1174 if (f0 === f1) { |
|
1175 to.bb = 0; |
|
1176 to.bc = f1 + 1; |
|
1177 } else { |
|
1178 to.bb = f0; |
|
1179 to.bc = f1; |
|
1180 } |
|
1181 } else { |
|
1182 to.bd = f3; |
|
1183 if (f1 === f2) { |
|
1184 updated = true; |
|
1185 to.ba = 0; |
|
1186 to.bb = f0; |
|
1187 to.bc = f2 + 1; |
|
1188 } else { |
|
1189 if (f0 === f1) { |
|
1190 updated = true; |
|
1191 to.ba = 0; |
|
1192 to.bb = f1+1; |
|
1193 to.bc = f2; |
|
1194 } else { |
|
1195 to.ba = f0; |
|
1196 to.bb = f1; |
|
1197 to.bc = f2; |
|
1198 } |
|
1199 } |
|
1200 } |
|
1201 var moved = true; |
|
1202 var f0 = from.ca, f1 = from.cb, f2 = from.cc, f3 = from.cd; |
|
1203 if (f3 === 0) { |
|
1204 if (f2 === 0) { |
|
1205 if (f1 === 0) { // a 0 0 0 |
|
1206 if (f0 === 0) |
|
1207 moved = false; |
|
1208 f3 = f0; |
|
1209 f2 = 0; |
|
1210 } else { // a b 0 0 |
|
1211 f3 = f1; |
|
1212 f2 = f0; |
|
1213 } |
|
1214 f1 = 0; |
|
1215 } else { // f2 !== 0 && f3 === 0 |
|
1216 if (f1 === 0) { // a 0 b 0 |
|
1217 f3 = f2; |
|
1218 f2 = f0; |
|
1219 } else { // a b c 0 |
|
1220 f3 = f2; |
|
1221 f2 = f1; |
|
1222 f1 = f0; |
|
1223 } |
|
1224 } |
|
1225 f0 = 0; |
|
1226 } else { // f3 !== 0 |
|
1227 if (f2 === 0) { |
|
1228 if (f1 === 0) { // a 0 0 b |
|
1229 if (f0 === 0) |
|
1230 moved = false; |
|
1231 f2 = f0; |
|
1232 } else { // a b 0 c |
|
1233 f2 = f1; |
|
1234 f1 = f0; |
|
1235 } |
|
1236 f0 = 0; |
|
1237 } else { // f2 !== 0 && f3 !== 0 |
|
1238 if (f1 === 0) { // a 0 b c |
|
1239 if (f0 === 0) |
|
1240 moved = false; |
|
1241 f1 = f0; |
|
1242 f0 = 0; |
|
1243 } else { // else: a b c d |
|
1244 moved = false; |
|
1245 } |
|
1246 } |
|
1247 } |
|
1248 updated = updated || moved; |
|
1249 if (f2 === 0) { |
|
1250 to.ca = 0; |
|
1251 to.cb = 0; |
|
1252 to.cc = 0; |
|
1253 to.cd = f3; |
|
1254 continue; |
|
1255 } |
|
1256 if (f1 === 0) { |
|
1257 to.ca = 0; |
|
1258 to.cb = 0; |
|
1259 if (f2 === f3) { |
|
1260 updated = true; |
|
1261 to.cc = 0; |
|
1262 to.cd = f3 + 1; |
|
1263 } else { |
|
1264 to.cc = f2; |
|
1265 to.cd = f3; |
|
1266 } |
|
1267 continue; |
|
1268 } |
|
1269 if (f2 === f3) { |
|
1270 updated = true; |
|
1271 to.ca = 0; |
|
1272 to.cd = f3 + 1; |
|
1273 if (f0 === f1) { |
|
1274 to.cb = 0; |
|
1275 to.cc = f1 + 1; |
|
1276 } else { |
|
1277 to.cb = f0; |
|
1278 to.cc = f1; |
|
1279 } |
|
1280 } else { |
|
1281 to.cd = f3; |
|
1282 if (f1 === f2) { |
|
1283 updated = true; |
|
1284 to.ca = 0; |
|
1285 to.cb = f0; |
|
1286 to.cc = f2 + 1; |
|
1287 } else { |
|
1288 if (f0 === f1) { |
|
1289 updated = true; |
|
1290 to.ca = 0; |
|
1291 to.cb = f1+1; |
|
1292 to.cc = f2; |
|
1293 } else { |
|
1294 to.ca = f0; |
|
1295 to.cb = f1; |
|
1296 to.cc = f2; |
|
1297 } |
|
1298 } |
|
1299 } |
|
1300 var moved = true; |
|
1301 var f0 = from.da, f1 = from.db, f2 = from.dc, f3 = from.dd; |
|
1302 if (f3 === 0) { |
|
1303 if (f2 === 0) { |
|
1304 if (f1 === 0) { // a 0 0 0 |
|
1305 if (f0 === 0) |
|
1306 moved = false; |
|
1307 f3 = f0; |
|
1308 f2 = 0; |
|
1309 } else { // a b 0 0 |
|
1310 f3 = f1; |
|
1311 f2 = f0; |
|
1312 } |
|
1313 f1 = 0; |
|
1314 } else { // f2 !== 0 && f3 === 0 |
|
1315 if (f1 === 0) { // a 0 b 0 |
|
1316 f3 = f2; |
|
1317 f2 = f0; |
|
1318 } else { // a b c 0 |
|
1319 f3 = f2; |
|
1320 f2 = f1; |
|
1321 f1 = f0; |
|
1322 } |
|
1323 } |
|
1324 f0 = 0; |
|
1325 } else { // f3 !== 0 |
|
1326 if (f2 === 0) { |
|
1327 if (f1 === 0) { // a 0 0 b |
|
1328 if (f0 === 0) |
|
1329 moved = false; |
|
1330 f2 = f0; |
|
1331 } else { // a b 0 c |
|
1332 f2 = f1; |
|
1333 f1 = f0; |
|
1334 } |
|
1335 f0 = 0; |
|
1336 } else { // f2 !== 0 && f3 !== 0 |
|
1337 if (f1 === 0) { // a 0 b c |
|
1338 if (f0 === 0) |
|
1339 moved = false; |
|
1340 f1 = f0; |
|
1341 f0 = 0; |
|
1342 } else { // else: a b c d |
|
1343 moved = false; |
|
1344 } |
|
1345 } |
|
1346 } |
|
1347 updated = updated || moved; |
|
1348 if (f2 === 0) { |
|
1349 to.da = 0; |
|
1350 to.db = 0; |
|
1351 to.dc = 0; |
|
1352 to.dd = f3; |
|
1353 continue; |
|
1354 } |
|
1355 if (f1 === 0) { |
|
1356 to.da = 0; |
|
1357 to.db = 0; |
|
1358 if (f2 === f3) { |
|
1359 updated = true; |
|
1360 to.dc = 0; |
|
1361 to.dd = f3 + 1; |
|
1362 } else { |
|
1363 to.dc = f2; |
|
1364 to.dd = f3; |
|
1365 } |
|
1366 continue; |
|
1367 } |
|
1368 if (f2 === f3) { |
|
1369 updated = true; |
|
1370 to.da = 0; |
|
1371 to.dd = f3 + 1; |
|
1372 if (f0 === f1) { |
|
1373 to.db = 0; |
|
1374 to.dc = f1 + 1; |
|
1375 } else { |
|
1376 to.db = f0; |
|
1377 to.dc = f1; |
|
1378 } |
|
1379 } else { |
|
1380 to.dd = f3; |
|
1381 if (f1 === f2) { |
|
1382 updated = true; |
|
1383 to.da = 0; |
|
1384 to.db = f0; |
|
1385 to.dc = f2 + 1; |
|
1386 } else { |
|
1387 if (f0 === f1) { |
|
1388 updated = true; |
|
1389 to.da = 0; |
|
1390 to.db = f1+1; |
|
1391 to.dc = f2; |
|
1392 } else { |
|
1393 to.da = f0; |
|
1394 to.db = f1; |
|
1395 to.dc = f2; |
|
1396 } |
|
1397 } |
|
1398 } |
|
1399 return updated; |
|
1400 } |
|
1401 |
|
1402 BoardObj.prototype.down = function(brd) { |
|
1403 var updated = false; |
|
1404 var from = this.brd, to = brd.brd; |
|
1405 var moved = true; |
|
1406 var f0 = from.aa, f1 = from.ba, f2 = from.ca, f3 = from.da; |
|
1407 if (f3 === 0) { |
|
1408 if (f2 === 0) { |
|
1409 if (f1 === 0) { // a 0 0 0 |
|
1410 if (f0 === 0) |
|
1411 moved = false; |
|
1412 f3 = f0; |
|
1413 f2 = 0; |
|
1414 } else { // a b 0 0 |
|
1415 f3 = f1; |
|
1416 f2 = f0; |
|
1417 } |
|
1418 f1 = 0; |
|
1419 } else { // f2 !== 0 && f3 === 0 |
|
1420 if (f1 === 0) { // a 0 b 0 |
|
1421 f3 = f2; |
|
1422 f2 = f0; |
|
1423 } else { // a b c 0 |
|
1424 f3 = f2; |
|
1425 f2 = f1; |
|
1426 f1 = f0; |
|
1427 } |
|
1428 } |
|
1429 f0 = 0; |
|
1430 } else { // f3 !== 0 |
|
1431 if (f2 === 0) { |
|
1432 if (f1 === 0) { // a 0 0 b |
|
1433 if (f0 === 0) |
|
1434 moved = false; |
|
1435 f2 = f0; |
|
1436 } else { // a b 0 c |
|
1437 f2 = f1; |
|
1438 f1 = f0; |
|
1439 } |
|
1440 f0 = 0; |
|
1441 } else { // f2 !== 0 && f3 !== 0 |
|
1442 if (f1 === 0) { // a 0 b c |
|
1443 if (f0 === 0) |
|
1444 moved = false; |
|
1445 f1 = f0; |
|
1446 f0 = 0; |
|
1447 } else { // else: a b c d |
|
1448 moved = false; |
|
1449 } |
|
1450 } |
|
1451 } |
|
1452 updated = updated || moved; |
|
1453 if (f2 === 0) { |
|
1454 to.aa = 0; |
|
1455 to.ba = 0; |
|
1456 to.ca = 0; |
|
1457 to.da = f3; |
|
1458 continue; |
|
1459 } |
|
1460 if (f1 === 0) { |
|
1461 to.aa = 0; |
|
1462 to.ba = 0; |
|
1463 if (f2 === f3) { |
|
1464 to.ca = 0; |
|
1465 to.da = f3 + 1; |
|
1466 updated = true; |
|
1467 } else { |
|
1468 to.ca = f2; |
|
1469 to.da = f3; |
|
1470 } |
|
1471 continue; |
|
1472 } |
|
1473 if (f2 === f3) { |
|
1474 updated = true; |
|
1475 to.aa = 0; |
|
1476 to.da = f3 + 1; |
|
1477 if (f0 === f1) { |
|
1478 to.ba = 0; |
|
1479 to.ca = f1 + 1; |
|
1480 } else { |
|
1481 to.ba = f0; |
|
1482 to.ca = f1; |
|
1483 } |
|
1484 } else { |
|
1485 to.da = f3; |
|
1486 if (f1 === f2) { |
|
1487 updated = true; |
|
1488 to.aa = 0; |
|
1489 to.ba = f0; |
|
1490 to.ca = f2 + 1; |
|
1491 } else { |
|
1492 if (f0 === f1) { |
|
1493 updated = true; |
|
1494 to.aa = 0; |
|
1495 to.ba = f1+1; |
|
1496 to.ca = f2; |
|
1497 } else { |
|
1498 to.aa = f0; |
|
1499 to.ba = f1; |
|
1500 to.ca = f2; |
|
1501 } |
|
1502 } |
|
1503 } |
|
1504 var moved = true; |
|
1505 var f0 = from.ab, f1 = from.bb, f2 = from.cb, f3 = from.db; |
|
1506 if (f3 === 0) { |
|
1507 if (f2 === 0) { |
|
1508 if (f1 === 0) { // a 0 0 0 |
|
1509 if (f0 === 0) |
|
1510 moved = false; |
|
1511 f3 = f0; |
|
1512 f2 = 0; |
|
1513 } else { // a b 0 0 |
|
1514 f3 = f1; |
|
1515 f2 = f0; |
|
1516 } |
|
1517 f1 = 0; |
|
1518 } else { // f2 !== 0 && f3 === 0 |
|
1519 if (f1 === 0) { // a 0 b 0 |
|
1520 f3 = f2; |
|
1521 f2 = f0; |
|
1522 } else { // a b c 0 |
|
1523 f3 = f2; |
|
1524 f2 = f1; |
|
1525 f1 = f0; |
|
1526 } |
|
1527 } |
|
1528 f0 = 0; |
|
1529 } else { // f3 !== 0 |
|
1530 if (f2 === 0) { |
|
1531 if (f1 === 0) { // a 0 0 b |
|
1532 if (f0 === 0) |
|
1533 moved = false; |
|
1534 f2 = f0; |
|
1535 } else { // a b 0 c |
|
1536 f2 = f1; |
|
1537 f1 = f0; |
|
1538 } |
|
1539 f0 = 0; |
|
1540 } else { // f2 !== 0 && f3 !== 0 |
|
1541 if (f1 === 0) { // a 0 b c |
|
1542 if (f0 === 0) |
|
1543 moved = false; |
|
1544 f1 = f0; |
|
1545 f0 = 0; |
|
1546 } else { // else: a b c d |
|
1547 moved = false; |
|
1548 } |
|
1549 } |
|
1550 } |
|
1551 updated = updated || moved; |
|
1552 if (f2 === 0) { |
|
1553 to.ab = 0; |
|
1554 to.bb = 0; |
|
1555 to.cb = 0; |
|
1556 to.db = f3; |
|
1557 continue; |
|
1558 } |
|
1559 if (f1 === 0) { |
|
1560 to.ab = 0; |
|
1561 to.bb = 0; |
|
1562 if (f2 === f3) { |
|
1563 to.cb = 0; |
|
1564 to.db = f3 + 1; |
|
1565 updated = true; |
|
1566 } else { |
|
1567 to.cb = f2; |
|
1568 to.db = f3; |
|
1569 } |
|
1570 continue; |
|
1571 } |
|
1572 if (f2 === f3) { |
|
1573 updated = true; |
|
1574 to.ab = 0; |
|
1575 to.db = f3 + 1; |
|
1576 if (f0 === f1) { |
|
1577 to.bb = 0; |
|
1578 to.cb = f1 + 1; |
|
1579 } else { |
|
1580 to.bb = f0; |
|
1581 to.cb = f1; |
|
1582 } |
|
1583 } else { |
|
1584 to.db = f3; |
|
1585 if (f1 === f2) { |
|
1586 updated = true; |
|
1587 to.ab = 0; |
|
1588 to.bb = f0; |
|
1589 to.cb = f2 + 1; |
|
1590 } else { |
|
1591 if (f0 === f1) { |
|
1592 updated = true; |
|
1593 to.ab = 0; |
|
1594 to.bb = f1+1; |
|
1595 to.cb = f2; |
|
1596 } else { |
|
1597 to.ab = f0; |
|
1598 to.bb = f1; |
|
1599 to.cb = f2; |
|
1600 } |
|
1601 } |
|
1602 } |
|
1603 var moved = true; |
|
1604 var f0 = from.ac, f1 = from.bc, f2 = from.cc, f3 = from.dc; |
|
1605 if (f3 === 0) { |
|
1606 if (f2 === 0) { |
|
1607 if (f1 === 0) { // a 0 0 0 |
|
1608 if (f0 === 0) |
|
1609 moved = false; |
|
1610 f3 = f0; |
|
1611 f2 = 0; |
|
1612 } else { // a b 0 0 |
|
1613 f3 = f1; |
|
1614 f2 = f0; |
|
1615 } |
|
1616 f1 = 0; |
|
1617 } else { // f2 !== 0 && f3 === 0 |
|
1618 if (f1 === 0) { // a 0 b 0 |
|
1619 f3 = f2; |
|
1620 f2 = f0; |
|
1621 } else { // a b c 0 |
|
1622 f3 = f2; |
|
1623 f2 = f1; |
|
1624 f1 = f0; |
|
1625 } |
|
1626 } |
|
1627 f0 = 0; |
|
1628 } else { // f3 !== 0 |
|
1629 if (f2 === 0) { |
|
1630 if (f1 === 0) { // a 0 0 b |
|
1631 if (f0 === 0) |
|
1632 moved = false; |
|
1633 f2 = f0; |
|
1634 } else { // a b 0 c |
|
1635 f2 = f1; |
|
1636 f1 = f0; |
|
1637 } |
|
1638 f0 = 0; |
|
1639 } else { // f2 !== 0 && f3 !== 0 |
|
1640 if (f1 === 0) { // a 0 b c |
|
1641 if (f0 === 0) |
|
1642 moved = false; |
|
1643 f1 = f0; |
|
1644 f0 = 0; |
|
1645 } else { // else: a b c d |
|
1646 moved = false; |
|
1647 } |
|
1648 } |
|
1649 } |
|
1650 updated = updated || moved; |
|
1651 if (f2 === 0) { |
|
1652 to.ac = 0; |
|
1653 to.bc = 0; |
|
1654 to.cc = 0; |
|
1655 to.dc = f3; |
|
1656 continue; |
|
1657 } |
|
1658 if (f1 === 0) { |
|
1659 to.ac = 0; |
|
1660 to.bc = 0; |
|
1661 if (f2 === f3) { |
|
1662 to.cc = 0; |
|
1663 to.dc = f3 + 1; |
|
1664 updated = true; |
|
1665 } else { |
|
1666 to.cc = f2; |
|
1667 to.dc = f3; |
|
1668 } |
|
1669 continue; |
|
1670 } |
|
1671 if (f2 === f3) { |
|
1672 updated = true; |
|
1673 to.ac = 0; |
|
1674 to.dc = f3 + 1; |
|
1675 if (f0 === f1) { |
|
1676 to.bc = 0; |
|
1677 to.cc = f1 + 1; |
|
1678 } else { |
|
1679 to.bc = f0; |
|
1680 to.cc = f1; |
|
1681 } |
|
1682 } else { |
|
1683 to.dc = f3; |
|
1684 if (f1 === f2) { |
|
1685 updated = true; |
|
1686 to.ac = 0; |
|
1687 to.bc = f0; |
|
1688 to.cc = f2 + 1; |
|
1689 } else { |
|
1690 if (f0 === f1) { |
|
1691 updated = true; |
|
1692 to.ac = 0; |
|
1693 to.bc = f1+1; |
|
1694 to.cc = f2; |
|
1695 } else { |
|
1696 to.ac = f0; |
|
1697 to.bc = f1; |
|
1698 to.cc = f2; |
|
1699 } |
|
1700 } |
|
1701 } |
|
1702 var moved = true; |
|
1703 var f0 = from.ad, f1 = from.bd, f2 = from.cd, f3 = from.dd; |
|
1704 if (f3 === 0) { |
|
1705 if (f2 === 0) { |
|
1706 if (f1 === 0) { // a 0 0 0 |
|
1707 if (f0 === 0) |
|
1708 moved = false; |
|
1709 f3 = f0; |
|
1710 f2 = 0; |
|
1711 } else { // a b 0 0 |
|
1712 f3 = f1; |
|
1713 f2 = f0; |
|
1714 } |
|
1715 f1 = 0; |
|
1716 } else { // f2 !== 0 && f3 === 0 |
|
1717 if (f1 === 0) { // a 0 b 0 |
|
1718 f3 = f2; |
|
1719 f2 = f0; |
|
1720 } else { // a b c 0 |
|
1721 f3 = f2; |
|
1722 f2 = f1; |
|
1723 f1 = f0; |
|
1724 } |
|
1725 } |
|
1726 f0 = 0; |
|
1727 } else { // f3 !== 0 |
|
1728 if (f2 === 0) { |
|
1729 if (f1 === 0) { // a 0 0 b |
|
1730 if (f0 === 0) |
|
1731 moved = false; |
|
1732 f2 = f0; |
|
1733 } else { // a b 0 c |
|
1734 f2 = f1; |
|
1735 f1 = f0; |
|
1736 } |
|
1737 f0 = 0; |
|
1738 } else { // f2 !== 0 && f3 !== 0 |
|
1739 if (f1 === 0) { // a 0 b c |
|
1740 if (f0 === 0) |
|
1741 moved = false; |
|
1742 f1 = f0; |
|
1743 f0 = 0; |
|
1744 } else { // else: a b c d |
|
1745 moved = false; |
|
1746 } |
|
1747 } |
|
1748 } |
|
1749 updated = updated || moved; |
|
1750 if (f2 === 0) { |
|
1751 to.ad = 0; |
|
1752 to.bd = 0; |
|
1753 to.cd = 0; |
|
1754 to.dd = f3; |
|
1755 continue; |
|
1756 } |
|
1757 if (f1 === 0) { |
|
1758 to.ad = 0; |
|
1759 to.bd = 0; |
|
1760 if (f2 === f3) { |
|
1761 to.cd = 0; |
|
1762 to.dd = f3 + 1; |
|
1763 updated = true; |
|
1764 } else { |
|
1765 to.cd = f2; |
|
1766 to.dd = f3; |
|
1767 } |
|
1768 continue; |
|
1769 } |
|
1770 if (f2 === f3) { |
|
1771 updated = true; |
|
1772 to.ad = 0; |
|
1773 to.dd = f3 + 1; |
|
1774 if (f0 === f1) { |
|
1775 to.bd = 0; |
|
1776 to.cd = f1 + 1; |
|
1777 } else { |
|
1778 to.bd = f0; |
|
1779 to.cd = f1; |
|
1780 } |
|
1781 } else { |
|
1782 to.dd = f3; |
|
1783 if (f1 === f2) { |
|
1784 updated = true; |
|
1785 to.ad = 0; |
|
1786 to.bd = f0; |
|
1787 to.cd = f2 + 1; |
|
1788 } else { |
|
1789 if (f0 === f1) { |
|
1790 updated = true; |
|
1791 to.ad = 0; |
|
1792 to.bd = f1+1; |
|
1793 to.cd = f2; |
|
1794 } else { |
|
1795 to.ad = f0; |
|
1796 to.bd = f1; |
|
1797 to.cd = f2; |
|
1798 } |
|
1799 } |
|
1800 } |
|
1801 return updated; |
|
1802 } |
|
1803 |
|
1804 BoardObj.prototype.left = function(brd) { |
|
1805 var updated = false; |
|
1806 var from = this.brd, to = brd.brd; |
|
1807 var moved = true; |
|
1808 var f0 = from.aa, f1 = from.ab, f2 = from.ac, f3 = from.ad; |
|
1809 if (f0 === 0) { |
|
1810 if (f1 === 0) { |
|
1811 if (f2 === 0) { // 0 0 0 a |
|
1812 if (f3 === 0) |
|
1813 moved = false; |
|
1814 f0 = f3; |
|
1815 f1 = 0; |
|
1816 } else { // 0 0 a b |
|
1817 f0 = f2; |
|
1818 f1 = f3; |
|
1819 } |
|
1820 f2 = 0; |
|
1821 } else { // f1 !== 0 && f0 === 0 |
|
1822 if (f2 === 0) { // 0 a 0 b |
|
1823 f0 = f1; |
|
1824 f1 = f3; |
|
1825 } else { // 0 a b c |
|
1826 f0 = f1; |
|
1827 f1 = f2; |
|
1828 f2 = f3; |
|
1829 } |
|
1830 } |
|
1831 f3 = 0; |
|
1832 } else { // f0 !== 0 |
|
1833 if (f1 === 0) { |
|
1834 if (f2 === 0) { // a 0 0 b |
|
1835 if (f3 === 0) |
|
1836 moved = false; |
|
1837 f1 = f3; |
|
1838 } else { // a 0 b c |
|
1839 f1 = f2; |
|
1840 f2 = f3; |
|
1841 } |
|
1842 f3 = 0; |
|
1843 } else { // f1 !== 0 && f0 !== 0 |
|
1844 if (f2 === 0) { // a b 0 c |
|
1845 if (f3 === 0) |
|
1846 moved = false; |
|
1847 f2 = f3; |
|
1848 f3 = 0; |
|
1849 } else { // else: a b c d |
|
1850 moved = false; |
|
1851 } |
|
1852 } |
|
1853 } |
|
1854 updated = updated || moved; |
|
1855 if (f1 === 0) { // a 0 0 0 |
|
1856 to.ad = 0; |
|
1857 to.ac = 0; |
|
1858 to.ab = 0; |
|
1859 to.aa = f0; |
|
1860 continue; |
|
1861 } |
|
1862 if (f2 === 0) { |
|
1863 to.ad = 0; |
|
1864 to.ac = 0; |
|
1865 if (f1 === f0) { // a a 0 0 |
|
1866 updated = true; |
|
1867 to.ab = 0; |
|
1868 to.aa = f0 + 1; |
|
1869 } else { // a b 0 0 |
|
1870 to.ab = f1; |
|
1871 to.aa = f0; |
|
1872 } |
|
1873 continue; |
|
1874 } |
|
1875 if (f1 === f0) { |
|
1876 updated = true; |
|
1877 to.ad = 0; |
|
1878 to.aa = f0 + 1; |
|
1879 if (f3 === f2) { // a a b b |
|
1880 to.ac = 0; |
|
1881 to.ab = f2 + 1; |
|
1882 } else { // a a b c |
|
1883 to.ac = f3; |
|
1884 to.ab = f2; |
|
1885 } |
|
1886 } else { |
|
1887 to.aa = f0; |
|
1888 if (f2 === f1) { // a b b c |
|
1889 updated = true; |
|
1890 to.ad = 0; |
|
1891 to.ac = f3; |
|
1892 to.ab = f1 + 1; |
|
1893 } else { |
|
1894 to.ab = f1; |
|
1895 if (f2 === f3) { // a b c c |
|
1896 updated = true; |
|
1897 to.ad = 0; |
|
1898 to.ac = f2+1; |
|
1899 } else { // a b c d |
|
1900 to.ad = f3; |
|
1901 to.ac = f2; |
|
1902 } |
|
1903 } |
|
1904 } |
|
1905 var moved = true; |
|
1906 var f0 = from.ba, f1 = from.bb, f2 = from.bc, f3 = from.bd; |
|
1907 if (f0 === 0) { |
|
1908 if (f1 === 0) { |
|
1909 if (f2 === 0) { // 0 0 0 a |
|
1910 if (f3 === 0) |
|
1911 moved = false; |
|
1912 f0 = f3; |
|
1913 f1 = 0; |
|
1914 } else { // 0 0 a b |
|
1915 f0 = f2; |
|
1916 f1 = f3; |
|
1917 } |
|
1918 f2 = 0; |
|
1919 } else { // f1 !== 0 && f0 === 0 |
|
1920 if (f2 === 0) { // 0 a 0 b |
|
1921 f0 = f1; |
|
1922 f1 = f3; |
|
1923 } else { // 0 a b c |
|
1924 f0 = f1; |
|
1925 f1 = f2; |
|
1926 f2 = f3; |
|
1927 } |
|
1928 } |
|
1929 f3 = 0; |
|
1930 } else { // f0 !== 0 |
|
1931 if (f1 === 0) { |
|
1932 if (f2 === 0) { // a 0 0 b |
|
1933 if (f3 === 0) |
|
1934 moved = false; |
|
1935 f1 = f3; |
|
1936 } else { // a 0 b c |
|
1937 f1 = f2; |
|
1938 f2 = f3; |
|
1939 } |
|
1940 f3 = 0; |
|
1941 } else { // f1 !== 0 && f0 !== 0 |
|
1942 if (f2 === 0) { // a b 0 c |
|
1943 if (f3 === 0) |
|
1944 moved = false; |
|
1945 f2 = f3; |
|
1946 f3 = 0; |
|
1947 } else { // else: a b c d |
|
1948 moved = false; |
|
1949 } |
|
1950 } |
|
1951 } |
|
1952 updated = updated || moved; |
|
1953 if (f1 === 0) { // a 0 0 0 |
|
1954 to.bd = 0; |
|
1955 to.bc = 0; |
|
1956 to.bb = 0; |
|
1957 to.ba = f0; |
|
1958 continue; |
|
1959 } |
|
1960 if (f2 === 0) { |
|
1961 to.bd = 0; |
|
1962 to.bc = 0; |
|
1963 if (f1 === f0) { // a a 0 0 |
|
1964 updated = true; |
|
1965 to.bb = 0; |
|
1966 to.ba = f0 + 1; |
|
1967 } else { // a b 0 0 |
|
1968 to.bb = f1; |
|
1969 to.ba = f0; |
|
1970 } |
|
1971 continue; |
|
1972 } |
|
1973 if (f1 === f0) { |
|
1974 updated = true; |
|
1975 to.bd = 0; |
|
1976 to.ba = f0 + 1; |
|
1977 if (f3 === f2) { // a a b b |
|
1978 to.bc = 0; |
|
1979 to.bb = f2 + 1; |
|
1980 } else { // a a b c |
|
1981 to.bc = f3; |
|
1982 to.bb = f2; |
|
1983 } |
|
1984 } else { |
|
1985 to.ba = f0; |
|
1986 if (f2 === f1) { // a b b c |
|
1987 updated = true; |
|
1988 to.bd = 0; |
|
1989 to.bc = f3; |
|
1990 to.bb = f1 + 1; |
|
1991 } else { |
|
1992 to.bb = f1; |
|
1993 if (f2 === f3) { // a b c c |
|
1994 updated = true; |
|
1995 to.bd = 0; |
|
1996 to.bc = f2+1; |
|
1997 } else { // a b c d |
|
1998 to.bd = f3; |
|
1999 to.bc = f2; |
|
2000 } |
|
2001 } |
|
2002 } |
|
2003 var moved = true; |
|
2004 var f0 = from.ca, f1 = from.cb, f2 = from.cc, f3 = from.cd; |
|
2005 if (f0 === 0) { |
|
2006 if (f1 === 0) { |
|
2007 if (f2 === 0) { // 0 0 0 a |
|
2008 if (f3 === 0) |
|
2009 moved = false; |
|
2010 f0 = f3; |
|
2011 f1 = 0; |
|
2012 } else { // 0 0 a b |
|
2013 f0 = f2; |
|
2014 f1 = f3; |
|
2015 } |
|
2016 f2 = 0; |
|
2017 } else { // f1 !== 0 && f0 === 0 |
|
2018 if (f2 === 0) { // 0 a 0 b |
|
2019 f0 = f1; |
|
2020 f1 = f3; |
|
2021 } else { // 0 a b c |
|
2022 f0 = f1; |
|
2023 f1 = f2; |
|
2024 f2 = f3; |
|
2025 } |
|
2026 } |
|
2027 f3 = 0; |
|
2028 } else { // f0 !== 0 |
|
2029 if (f1 === 0) { |
|
2030 if (f2 === 0) { // a 0 0 b |
|
2031 if (f3 === 0) |
|
2032 moved = false; |
|
2033 f1 = f3; |
|
2034 } else { // a 0 b c |
|
2035 f1 = f2; |
|
2036 f2 = f3; |
|
2037 } |
|
2038 f3 = 0; |
|
2039 } else { // f1 !== 0 && f0 !== 0 |
|
2040 if (f2 === 0) { // a b 0 c |
|
2041 if (f3 === 0) |
|
2042 moved = false; |
|
2043 f2 = f3; |
|
2044 f3 = 0; |
|
2045 } else { // else: a b c d |
|
2046 moved = false; |
|
2047 } |
|
2048 } |
|
2049 } |
|
2050 updated = updated || moved; |
|
2051 if (f1 === 0) { // a 0 0 0 |
|
2052 to.cd = 0; |
|
2053 to.cc = 0; |
|
2054 to.cb = 0; |
|
2055 to.ca = f0; |
|
2056 continue; |
|
2057 } |
|
2058 if (f2 === 0) { |
|
2059 to.cd = 0; |
|
2060 to.cc = 0; |
|
2061 if (f1 === f0) { // a a 0 0 |
|
2062 updated = true; |
|
2063 to.cb = 0; |
|
2064 to.ca = f0 + 1; |
|
2065 } else { // a b 0 0 |
|
2066 to.cb = f1; |
|
2067 to.ca = f0; |
|
2068 } |
|
2069 continue; |
|
2070 } |
|
2071 if (f1 === f0) { |
|
2072 updated = true; |
|
2073 to.cd = 0; |
|
2074 to.ca = f0 + 1; |
|
2075 if (f3 === f2) { // a a b b |
|
2076 to.cc = 0; |
|
2077 to.cb = f2 + 1; |
|
2078 } else { // a a b c |
|
2079 to.cc = f3; |
|
2080 to.cb = f2; |
|
2081 } |
|
2082 } else { |
|
2083 to.ca = f0; |
|
2084 if (f2 === f1) { // a b b c |
|
2085 updated = true; |
|
2086 to.cd = 0; |
|
2087 to.cc = f3; |
|
2088 to.cb = f1 + 1; |
|
2089 } else { |
|
2090 to.cb = f1; |
|
2091 if (f2 === f3) { // a b c c |
|
2092 updated = true; |
|
2093 to.cd = 0; |
|
2094 to.cc = f2+1; |
|
2095 } else { // a b c d |
|
2096 to.cd = f3; |
|
2097 to.cc = f2; |
|
2098 } |
|
2099 } |
|
2100 } |
|
2101 var moved = true; |
|
2102 var f0 = from.da, f1 = from.db, f2 = from.dc, f3 = from.dd; |
|
2103 if (f0 === 0) { |
|
2104 if (f1 === 0) { |
|
2105 if (f2 === 0) { // 0 0 0 a |
|
2106 if (f3 === 0) |
|
2107 moved = false; |
|
2108 f0 = f3; |
|
2109 f1 = 0; |
|
2110 } else { // 0 0 a b |
|
2111 f0 = f2; |
|
2112 f1 = f3; |
|
2113 } |
|
2114 f2 = 0; |
|
2115 } else { // f1 !== 0 && f0 === 0 |
|
2116 if (f2 === 0) { // 0 a 0 b |
|
2117 f0 = f1; |
|
2118 f1 = f3; |
|
2119 } else { // 0 a b c |
|
2120 f0 = f1; |
|
2121 f1 = f2; |
|
2122 f2 = f3; |
|
2123 } |
|
2124 } |
|
2125 f3 = 0; |
|
2126 } else { // f0 !== 0 |
|
2127 if (f1 === 0) { |
|
2128 if (f2 === 0) { // a 0 0 b |
|
2129 if (f3 === 0) |
|
2130 moved = false; |
|
2131 f1 = f3; |
|
2132 } else { // a 0 b c |
|
2133 f1 = f2; |
|
2134 f2 = f3; |
|
2135 } |
|
2136 f3 = 0; |
|
2137 } else { // f1 !== 0 && f0 !== 0 |
|
2138 if (f2 === 0) { // a b 0 c |
|
2139 if (f3 === 0) |
|
2140 moved = false; |
|
2141 f2 = f3; |
|
2142 f3 = 0; |
|
2143 } else { // else: a b c d |
|
2144 moved = false; |
|
2145 } |
|
2146 } |
|
2147 } |
|
2148 updated = updated || moved; |
|
2149 if (f1 === 0) { // a 0 0 0 |
|
2150 to.dd = 0; |
|
2151 to.dc = 0; |
|
2152 to.db = 0; |
|
2153 to.da = f0; |
|
2154 continue; |
|
2155 } |
|
2156 if (f2 === 0) { |
|
2157 to.dd = 0; |
|
2158 to.dc = 0; |
|
2159 if (f1 === f0) { // a a 0 0 |
|
2160 updated = true; |
|
2161 to.db = 0; |
|
2162 to.da = f0 + 1; |
|
2163 } else { // a b 0 0 |
|
2164 to.db = f1; |
|
2165 to.da = f0; |
|
2166 } |
|
2167 continue; |
|
2168 } |
|
2169 if (f1 === f0) { |
|
2170 updated = true; |
|
2171 to.dd = 0; |
|
2172 to.da = f0 + 1; |
|
2173 if (f3 === f2) { // a a b b |
|
2174 to.dc = 0; |
|
2175 to.db = f2 + 1; |
|
2176 } else { // a a b c |
|
2177 to.dc = f3; |
|
2178 to.db = f2; |
|
2179 } |
|
2180 } else { |
|
2181 to.da = f0; |
|
2182 if (f2 === f1) { // a b b c |
|
2183 updated = true; |
|
2184 to.dd = 0; |
|
2185 to.dc = f3; |
|
2186 to.db = f1 + 1; |
|
2187 } else { |
|
2188 to.db = f1; |
|
2189 if (f2 === f3) { // a b c c |
|
2190 updated = true; |
|
2191 to.dd = 0; |
|
2192 to.dc = f2+1; |
|
2193 } else { // a b c d |
|
2194 to.dd = f3; |
|
2195 to.dc = f2; |
|
2196 } |
|
2197 } |
|
2198 } |
|
2199 return updated; |
|
2200 } |
|
2201 |
|
2202 BoardObj.prototype.up = function(brd) { |
|
2203 var updated = false; |
|
2204 var from = this.brd, to = brd.brd; |
|
2205 var moved = true; |
|
2206 var f0 = from.aa, f1 = from.ba, f2 = from.ca, f3 = from.da; |
|
2207 if (f0 === 0) { |
|
2208 if (f1 === 0) { |
|
2209 if (f2 === 0) { // 0 0 0 a |
|
2210 if (f3 === 0) |
|
2211 moved = false; |
|
2212 f0 = f3; |
|
2213 f1 = 0; |
|
2214 } else { // 0 0 a b |
|
2215 f0 = f2; |
|
2216 f1 = f3; |
|
2217 } |
|
2218 f2 = 0; |
|
2219 } else { // f1 !== 0 && f0 === 0 |
|
2220 if (f2 === 0) { // 0 a 0 b |
|
2221 f0 = f1; |
|
2222 f1 = f3; |
|
2223 } else { // 0 a b c |
|
2224 f0 = f1; |
|
2225 f1 = f2; |
|
2226 f2 = f3; |
|
2227 } |
|
2228 } |
|
2229 f3 = 0; |
|
2230 } else { // f0 !== 0 |
|
2231 if (f1 === 0) { |
|
2232 if (f2 === 0) { // a 0 0 b |
|
2233 if (f3 === 0) |
|
2234 moved = false; |
|
2235 f1 = f3; |
|
2236 } else { // a 0 b c |
|
2237 f1 = f2; |
|
2238 f2 = f3; |
|
2239 } |
|
2240 f3 = 0; |
|
2241 } else { // f1 !== 0 && f0 !== 0 |
|
2242 if (f2 === 0) { // a b 0 c |
|
2243 if (f3 === 0) |
|
2244 moved = false; |
|
2245 f2 = f3; |
|
2246 f3 = 0; |
|
2247 } else { // else: a b c d |
|
2248 moved = false; |
|
2249 } |
|
2250 } |
|
2251 } |
|
2252 updated = updated || moved; |
|
2253 if (f1 === 0) { // a 0 0 0 |
|
2254 to.da = 0; |
|
2255 to.ca = 0; |
|
2256 to.ba = 0; |
|
2257 to.aa = f0; |
|
2258 continue; |
|
2259 } |
|
2260 if (f2 === 0) { |
|
2261 to.da = 0; |
|
2262 to.ca = 0; |
|
2263 if (f1 === f0) { // a a 0 0 |
|
2264 updated = true; |
|
2265 to.ba = 0; |
|
2266 to.aa = f0 + 1; |
|
2267 } else { // a b 0 0 |
|
2268 to.ba = f1; |
|
2269 to.aa = f0; |
|
2270 } |
|
2271 continue; |
|
2272 } |
|
2273 if (f1 === f0) { |
|
2274 to.da = 0; |
|
2275 to.aa = f0 + 1; |
|
2276 if (f3 === f2) { // a a b b |
|
2277 updated = true; |
|
2278 to.ca = 0; |
|
2279 to.ba = f2 + 1; |
|
2280 } else { // a a b c |
|
2281 to.ca = f3; |
|
2282 to.ba = f2; |
|
2283 } |
|
2284 } else { |
|
2285 to.aa = f0; |
|
2286 if (f2 === f1) { // a b b c |
|
2287 updated = true; |
|
2288 to.da = 0; |
|
2289 to.ca = f3; |
|
2290 to.ba = f1 + 1; |
|
2291 } else { |
|
2292 to.ba = f1; |
|
2293 if (f2 === f3) { // a b c c |
|
2294 updated = true; |
|
2295 to.da = 0; |
|
2296 to.ca = f2+1; |
|
2297 } else { // a b c d |
|
2298 to.da = f3; |
|
2299 to.ca = f2; |
|
2300 } |
|
2301 } |
|
2302 } |
|
2303 var moved = true; |
|
2304 var f0 = from.ab, f1 = from.bb, f2 = from.cb, f3 = from.db; |
|
2305 if (f0 === 0) { |
|
2306 if (f1 === 0) { |
|
2307 if (f2 === 0) { // 0 0 0 a |
|
2308 if (f3 === 0) |
|
2309 moved = false; |
|
2310 f0 = f3; |
|
2311 f1 = 0; |
|
2312 } else { // 0 0 a b |
|
2313 f0 = f2; |
|
2314 f1 = f3; |
|
2315 } |
|
2316 f2 = 0; |
|
2317 } else { // f1 !== 0 && f0 === 0 |
|
2318 if (f2 === 0) { // 0 a 0 b |
|
2319 f0 = f1; |
|
2320 f1 = f3; |
|
2321 } else { // 0 a b c |
|
2322 f0 = f1; |
|
2323 f1 = f2; |
|
2324 f2 = f3; |
|
2325 } |
|
2326 } |
|
2327 f3 = 0; |
|
2328 } else { // f0 !== 0 |
|
2329 if (f1 === 0) { |
|
2330 if (f2 === 0) { // a 0 0 b |
|
2331 if (f3 === 0) |
|
2332 moved = false; |
|
2333 f1 = f3; |
|
2334 } else { // a 0 b c |
|
2335 f1 = f2; |
|
2336 f2 = f3; |
|
2337 } |
|
2338 f3 = 0; |
|
2339 } else { // f1 !== 0 && f0 !== 0 |
|
2340 if (f2 === 0) { // a b 0 c |
|
2341 if (f3 === 0) |
|
2342 moved = false; |
|
2343 f2 = f3; |
|
2344 f3 = 0; |
|
2345 } else { // else: a b c d |
|
2346 moved = false; |
|
2347 } |
|
2348 } |
|
2349 } |
|
2350 updated = updated || moved; |
|
2351 if (f1 === 0) { // a 0 0 0 |
|
2352 to.db = 0; |
|
2353 to.cb = 0; |
|
2354 to.bb = 0; |
|
2355 to.ab = f0; |
|
2356 continue; |
|
2357 } |
|
2358 if (f2 === 0) { |
|
2359 to.db = 0; |
|
2360 to.cb = 0; |
|
2361 if (f1 === f0) { // a a 0 0 |
|
2362 updated = true; |
|
2363 to.bb = 0; |
|
2364 to.ab = f0 + 1; |
|
2365 } else { // a b 0 0 |
|
2366 to.bb = f1; |
|
2367 to.ab = f0; |
|
2368 } |
|
2369 continue; |
|
2370 } |
|
2371 if (f1 === f0) { |
|
2372 to.db = 0; |
|
2373 to.ab = f0 + 1; |
|
2374 if (f3 === f2) { // a a b b |
|
2375 updated = true; |
|
2376 to.cb = 0; |
|
2377 to.bb = f2 + 1; |
|
2378 } else { // a a b c |
|
2379 to.cb = f3; |
|
2380 to.bb = f2; |
|
2381 } |
|
2382 } else { |
|
2383 to.ab = f0; |
|
2384 if (f2 === f1) { // a b b c |
|
2385 updated = true; |
|
2386 to.db = 0; |
|
2387 to.cb = f3; |
|
2388 to.bb = f1 + 1; |
|
2389 } else { |
|
2390 to.bb = f1; |
|
2391 if (f2 === f3) { // a b c c |
|
2392 updated = true; |
|
2393 to.db = 0; |
|
2394 to.cb = f2+1; |
|
2395 } else { // a b c d |
|
2396 to.db = f3; |
|
2397 to.cb = f2; |
|
2398 } |
|
2399 } |
|
2400 } |
|
2401 var moved = true; |
|
2402 var f0 = from.ac, f1 = from.bc, f2 = from.cc, f3 = from.dc; |
|
2403 if (f0 === 0) { |
|
2404 if (f1 === 0) { |
|
2405 if (f2 === 0) { // 0 0 0 a |
|
2406 if (f3 === 0) |
|
2407 moved = false; |
|
2408 f0 = f3; |
|
2409 f1 = 0; |
|
2410 } else { // 0 0 a b |
|
2411 f0 = f2; |
|
2412 f1 = f3; |
|
2413 } |
|
2414 f2 = 0; |
|
2415 } else { // f1 !== 0 && f0 === 0 |
|
2416 if (f2 === 0) { // 0 a 0 b |
|
2417 f0 = f1; |
|
2418 f1 = f3; |
|
2419 } else { // 0 a b c |
|
2420 f0 = f1; |
|
2421 f1 = f2; |
|
2422 f2 = f3; |
|
2423 } |
|
2424 } |
|
2425 f3 = 0; |
|
2426 } else { // f0 !== 0 |
|
2427 if (f1 === 0) { |
|
2428 if (f2 === 0) { // a 0 0 b |
|
2429 if (f3 === 0) |
|
2430 moved = false; |
|
2431 f1 = f3; |
|
2432 } else { // a 0 b c |
|
2433 f1 = f2; |
|
2434 f2 = f3; |
|
2435 } |
|
2436 f3 = 0; |
|
2437 } else { // f1 !== 0 && f0 !== 0 |
|
2438 if (f2 === 0) { // a b 0 c |
|
2439 if (f3 === 0) |
|
2440 moved = false; |
|
2441 f2 = f3; |
|
2442 f3 = 0; |
|
2443 } else { // else: a b c d |
|
2444 moved = false; |
|
2445 } |
|
2446 } |
|
2447 } |
|
2448 updated = updated || moved; |
|
2449 if (f1 === 0) { // a 0 0 0 |
|
2450 to.dc = 0; |
|
2451 to.cc = 0; |
|
2452 to.bc = 0; |
|
2453 to.ac = f0; |
|
2454 continue; |
|
2455 } |
|
2456 if (f2 === 0) { |
|
2457 to.dc = 0; |
|
2458 to.cc = 0; |
|
2459 if (f1 === f0) { // a a 0 0 |
|
2460 updated = true; |
|
2461 to.bc = 0; |
|
2462 to.ac = f0 + 1; |
|
2463 } else { // a b 0 0 |
|
2464 to.bc = f1; |
|
2465 to.ac = f0; |
|
2466 } |
|
2467 continue; |
|
2468 } |
|
2469 if (f1 === f0) { |
|
2470 to.dc = 0; |
|
2471 to.ac = f0 + 1; |
|
2472 if (f3 === f2) { // a a b b |
|
2473 updated = true; |
|
2474 to.cc = 0; |
|
2475 to.bc = f2 + 1; |
|
2476 } else { // a a b c |
|
2477 to.cc = f3; |
|
2478 to.bc = f2; |
|
2479 } |
|
2480 } else { |
|
2481 to.ac = f0; |
|
2482 if (f2 === f1) { // a b b c |
|
2483 updated = true; |
|
2484 to.dc = 0; |
|
2485 to.cc = f3; |
|
2486 to.bc = f1 + 1; |
|
2487 } else { |
|
2488 to.bc = f1; |
|
2489 if (f2 === f3) { // a b c c |
|
2490 updated = true; |
|
2491 to.dc = 0; |
|
2492 to.cc = f2+1; |
|
2493 } else { // a b c d |
|
2494 to.dc = f3; |
|
2495 to.cc = f2; |
|
2496 } |
|
2497 } |
|
2498 } |
|
2499 var moved = true; |
|
2500 var f0 = from.ad, f1 = from.bd, f2 = from.cd, f3 = from.dd; |
|
2501 if (f0 === 0) { |
|
2502 if (f1 === 0) { |
|
2503 if (f2 === 0) { // 0 0 0 a |
|
2504 if (f3 === 0) |
|
2505 moved = false; |
|
2506 f0 = f3; |
|
2507 f1 = 0; |
|
2508 } else { // 0 0 a b |
|
2509 f0 = f2; |
|
2510 f1 = f3; |
|
2511 } |
|
2512 f2 = 0; |
|
2513 } else { // f1 !== 0 && f0 === 0 |
|
2514 if (f2 === 0) { // 0 a 0 b |
|
2515 f0 = f1; |
|
2516 f1 = f3; |
|
2517 } else { // 0 a b c |
|
2518 f0 = f1; |
|
2519 f1 = f2; |
|
2520 f2 = f3; |
|
2521 } |
|
2522 } |
|
2523 f3 = 0; |
|
2524 } else { // f0 !== 0 |
|
2525 if (f1 === 0) { |
|
2526 if (f2 === 0) { // a 0 0 b |
|
2527 if (f3 === 0) |
|
2528 moved = false; |
|
2529 f1 = f3; |
|
2530 } else { // a 0 b c |
|
2531 f1 = f2; |
|
2532 f2 = f3; |
|
2533 } |
|
2534 f3 = 0; |
|
2535 } else { // f1 !== 0 && f0 !== 0 |
|
2536 if (f2 === 0) { // a b 0 c |
|
2537 if (f3 === 0) |
|
2538 moved = false; |
|
2539 f2 = f3; |
|
2540 f3 = 0; |
|
2541 } else { // else: a b c d |
|
2542 moved = false; |
|
2543 } |
|
2544 } |
|
2545 } |
|
2546 updated = updated || moved; |
|
2547 if (f1 === 0) { // a 0 0 0 |
|
2548 to.dd = 0; |
|
2549 to.cd = 0; |
|
2550 to.bd = 0; |
|
2551 to.ad = f0; |
|
2552 continue; |
|
2553 } |
|
2554 if (f2 === 0) { |
|
2555 to.dd = 0; |
|
2556 to.cd = 0; |
|
2557 if (f1 === f0) { // a a 0 0 |
|
2558 updated = true; |
|
2559 to.bd = 0; |
|
2560 to.ad = f0 + 1; |
|
2561 } else { // a b 0 0 |
|
2562 to.bd = f1; |
|
2563 to.ad = f0; |
|
2564 } |
|
2565 continue; |
|
2566 } |
|
2567 if (f1 === f0) { |
|
2568 to.dd = 0; |
|
2569 to.ad = f0 + 1; |
|
2570 if (f3 === f2) { // a a b b |
|
2571 updated = true; |
|
2572 to.cd = 0; |
|
2573 to.bd = f2 + 1; |
|
2574 } else { // a a b c |
|
2575 to.cd = f3; |
|
2576 to.bd = f2; |
|
2577 } |
|
2578 } else { |
|
2579 to.ad = f0; |
|
2580 if (f2 === f1) { // a b b c |
|
2581 updated = true; |
|
2582 to.dd = 0; |
|
2583 to.cd = f3; |
|
2584 to.bd = f1 + 1; |
|
2585 } else { |
|
2586 to.bd = f1; |
|
2587 if (f2 === f3) { // a b c c |
|
2588 updated = true; |
|
2589 to.dd = 0; |
|
2590 to.cd = f2+1; |
|
2591 } else { // a b c d |
|
2592 to.dd = f3; |
|
2593 to.cd = f2; |
|
2594 } |
|
2595 } |
|
2596 } |
|
2597 return updated; |
|
2598 } |