var uuid = function () { return'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) { var r = Math.random() * 16 | 0; var v = c === 'x' ? r : r & 0x3 | 0x8; return v.toString(16); }); };
functiongetCol(ques) { functioncheckCol(ques, i, j) { let other = (j + 1) % 3 // 第1列出现重复元素 if (i === 0) { // 看后一列 if (ques[i][other] === ques[i + 1][j]) return [[i, j], [i + 1, j]] } elseif (i === 1) { // 第2列出现重复元素 // 看后一列 if (ques[i][other] === ques[i + 1][j]) return [[i, j], [i + 1, j]] // 看前一列 if (ques[i][other] === ques[i - 1][j]) return [[i, j], [i - 1, j]] } else { // 第3列出现重复元素 // 看前一列 if (ques[i][other] === ques[i - 1][j]) return [[i, j], [i, j - 1]] } return [] }
// 看每一列是否经过一次交换就可消除 for (let i = 0; i < ques.length; i ++){ // 前面2个元素相同,看第三个元素是否可以经过一次交换产生相同元素 if (ques[i][0] === ques[i][1]) { let check = checkCol(ques, i, 2) // 第i列第三个元素可以与其隔壁交换 if (check.length !== 0) return check }
// 第1个元素与第3个元素相同,看第2个元素是否可以与其隔壁交换 if (ques[i][0] === ques[i][2]) { let check = checkCol(ques, i, 1) // 第i列第二个元素可以与其隔壁交换 if (check.length !== 0) return check }
// 第2个元素与第3个元素相同,看第1个元素是否可以与其隔壁交换 if (ques[i][1] === ques[i][2]) { let check = checkCol(ques, i, 0) // 第i列第一个元素可以与其隔壁交换 if (check.length !== 0) return check } } }
functionget_userresponse(ques) { // 根据列去判断是否可以消除 let arr = getCol(ques); // 如果按列不可消除,按照行去判断 if (arr === undefined || arr.length === 0) { // 把按照行判断转化为按照列判断 let new_ques = []; for (let index = 0; index < ques.length; index++) { new_ques[index] = [ques[0][index], ques[1][index], ques[2][index]]; } arr = getCol(new_ques); // 得到的结果再将列转化为行 let new_arr = []; for (let index = 0; index < arr.length; index++) { new_arr[index] = [arr[index][1], arr[index][0]] } return new_arr } else return arr; }
e0vm
watch变量e,发现代码运行过此处之后,e对象才有e0vm属性,如下图:
跟踪进去_gct方法,调试并整理代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
functionFvBQ(t) { var e = 5381; var n = t.length; var o = 0; while (n--) { e = (e << 5) + e + t.charCodeAt(o++); } e &= ~(1 << 31); return e; }
functionget_w(ques, lotNumber, guid) { let e = get_e(ques, lotNumber, guid); let c = encrypt(JSON.stringify(e), guid, "0000000000000000"); let o = []; for(let a = 0, i = c.sigBytes; a < i; a++) { var u = c.words[a >>> 2] >>> 24 - a % 4 * 8 & 255; o.push(u); } returnarrayToHex(o) }
functionarrayToHex(e) { for (var t = [], n = 0, s = 0; s < 2 * e["length"]; s += 2) t[s >>> 3] |= parseInt(e[n], 10) << 24 - s % 8 * 4, n++; for (var r = [], i = 0; i < e["length"]; i++) { var o = t[i >>> 2] >>> 24 - i % 4 * 8 & 255; r["push"]((o >>> 4)["toString"](16)), r["push"]((15 & o)["toString"](16)); } return r["join"](""); }