1"use strict"; 2 3const MOVE = [ 4 "U", "U2", "U'", 5 "R", "R2", "R'", 6 "F", "F2", "F'", 7 "D", "D2", "D'", 8 "L", "L2", "L'", 9 "B", "B2", "B'", 10 "u", "u2", "u'", 11 "r", "r2", "r'", 12 "f", "f2", "f'", 13 "d", "d2", "d'", 14 "l", "l2", "l'", 15 "b", "b2", "b'", 16 "E", "E2", "E'", 17 "M", "M2", "M'", 18 "S", "S2", "S'" 19]; 20const ROTATION = ["", "y", "y2", "y'", "x", "x y", "x y2", "x y'", "x2", "x2 y", "x2 y2", "x2 y'", "x'", "x' y", "x' y2", "x' y'", "z", "z y", "z y2", "z y'", "z'", "z' y", "z' y2", "z' y'"]; 21const ROTATION_BASE = ["x", "y", "z"]; 22const ROTATION_DICT = { 23 "x": [4, 21, 14, 19, 8, 22, 2, 18, 12, 23, 6, 17, 0, 20, 10, 16, 5, 1, 13, 9, 7, 11, 15, 3], 24 "x2": [8, 11, 10, 9, 12, 15, 14, 13, 0, 3, 2, 1, 4, 7, 6, 5, 22, 21, 20, 23, 18, 17, 16, 19], 25 "x'": [12, 17, 6, 23, 0, 16, 10, 20, 4, 19, 14, 21, 8, 18, 2, 22, 15, 11, 7, 3, 13, 1, 5, 9], 26 "y": [1, 2, 3, 0, 5, 6, 7, 4, 9, 10, 11, 8, 13, 14, 15, 12, 17, 18, 19, 16, 21, 22, 23, 20], 27 "y2": [2, 3, 0, 1, 6, 7, 4, 5, 10, 11, 8, 9, 14, 15, 12, 13, 18, 19, 16, 17, 22, 23, 20, 21], 28 "y'": [3, 0, 1, 2, 7, 4, 5, 6, 11, 8, 9, 10, 15, 12, 13, 14, 19, 16, 17, 18, 23, 20, 21, 22], 29 "z": [16, 5, 22, 15, 19, 9, 23, 3, 18, 13, 20, 7, 17, 1, 21, 11, 10, 6, 2, 14, 0, 4, 8, 12], 30 "z2": [10, 9, 8, 11, 14, 13, 12, 15, 2, 1, 0, 3, 6, 5, 4, 7, 20, 23, 22, 21, 16, 19, 18, 17], 31 "z'": [20, 13, 18, 7, 21, 1, 17, 11, 22, 5, 16, 15, 23, 9, 19, 3, 0, 12, 8, 4, 10, 14, 2, 6] 32}; 33const MOVE_DICT = [ 34 ["U", "U2", "U'", "R", "R2", "R'", "F", "F2", "F'", "D", "D2", "D'", "L", "L2", "L'", "B", "B2", "B'", "u", "u2", "u'", "r", "r2", "r'", "f", "f2", "f'", "d", "d2", "d'", "l", "l2", "l'", "b", "b2", "b'", "E", "E2", "E'", "M", "M2", "M'", "S", "S2", "S'"], 35 ["U", "U2", "U'", "B", "B2", "B'", "R", "R2", "R'", "D", "D2", "D'", "F", "F2", "F'", "L", "L2", "L'", "u", "u2", "u'", "b", "b2", "b'", "r", "r2", "r'", "d", "d2", "d'", "f", "f2", "f'", "l", "l2", "l'", "E", "E2", "E'", "S", "S2", "S'", "M'", "M2", "M"], 36 ["U", "U2", "U'", "L", "L2", "L'", "B", "B2", "B'", "D", "D2", "D'", "R", "R2", "R'", "F", "F2", "F'", "u", "u2", "u'", "l", "l2", "l'", "b", "b2", "b'", "d", "d2", "d'", "r", "r2", "r'", "f", "f2", "f'", "E", "E2", "E'", "M'", "M2", "M", "S'", "S2", "S"], 37 ["U", "U2", "U'", "F", "F2", "F'", "L", "L2", "L'", "D", "D2", "D'", "B", "B2", "B'", "R", "R2", "R'", "u", "u2", "u'", "f", "f2", "f'", "l", "l2", "l'", "d", "d2", "d'", "b", "b2", "b'", "r", "r2", "r'", "E", "E2", "E'", "S'", "S2", "S", "M", "M2", "M'"], 38 ["F", "F2", "F'", "R", "R2", "R'", "D", "D2", "D'", "B", "B2", "B'", "L", "L2", "L'", "U", "U2", "U'", "f", "f2", "f'", "r", "r2", "r'", "d", "d2", "d'", "b", "b2", "b'", "l", "l2", "l'", "u", "u2", "u'", "S'", "S2", "S", "M", "M2", "M'", "E", "E2", "E'"], 39 ["F", "F2", "F'", "U", "U2", "U'", "R", "R2", "R'", "B", "B2", "B'", "D", "D2", "D'", "L", "L2", "L'", "f", "f2", "f'", "u", "u2", "u'", "r", "r2", "r'", "b", "b2", "b'", "d", "d2", "d'", "l", "l2", "l'", "S'", "S2", "S", "E", "E2", "E'", "M'", "M2", "M"], 40 ["F", "F2", "F'", "L", "L2", "L'", "U", "U2", "U'", "B", "B2", "B'", "R", "R2", "R'", "D", "D2", "D'", "f", "f2", "f'", "l", "l2", "l'", "u", "u2", "u'", "b", "b2", "b'", "r", "r2", "r'", "d", "d2", "d'", "S'", "S2", "S", "M'", "M2", "M", "E'", "E2", "E"], 41 ["F", "F2", "F'", "D", "D2", "D'", "L", "L2", "L'", "B", "B2", "B'", "U", "U2", "U'", "R", "R2", "R'", "f", "f2", "f'", "d", "d2", "d'", "l", "l2", "l'", "b", "b2", "b'", "u", "u2", "u'", "r", "r2", "r'", "S'", "S2", "S", "E'", "E2", "E", "M", "M2", "M'"], 42 ["D", "D2", "D'", "R", "R2", "R'", "B", "B2", "B'", "U", "U2", "U'", "L", "L2", "L'", "F", "F2", "F'", "d", "d2", "d'", "r", "r2", "r'", "b", "b2", "b'", "u", "u2", "u'", "l", "l2", "l'", "f", "f2", "f'", "E'", "E2", "E", "M", "M2", "M'", "S'", "S2", "S"], 43 ["D", "D2", "D'", "F", "F2", "F'", "R", "R2", "R'", "U", "U2", "U'", "B", "B2", "B'", "L", "L2", "L'", "d", "d2", "d'", "f", "f2", "f'", "r", "r2", "r'", "u", "u2", "u'", "b", "b2", "b'", "l", "l2", "l'", "E'", "E2", "E", "S'", "S2", "S", "M'", "M2", "M"], 44 ["D", "D2", "D'", "L", "L2", "L'", "F", "F2", "F'", "U", "U2", "U'", "R", "R2", "R'", "B", "B2", "B'", "d", "d2", "d'", "l", "l2", "l'", "f", "f2", "f'", "u", "u2", "u'", "r", "r2", "r'", "b", "b2", "b'", "E'", "E2", "E", "M'", "M2", "M", "S", "S2", "S'"], 45 ["D", "D2", "D'", "B", "B2", "B'", "L", "L2", "L'", "U", "U2", "U'", "F", "F2", "F'", "R", "R2", "R'", "d", "d2", "d'", "b", "b2", "b'", "l", "l2", "l'", "u", "u2", "u'", "f", "f2", "f'", "r", "r2", "r'", "E'", "E2", "E", "S", "S2", "S'", "M", "M2", "M'"], 46 ["B", "B2", "B'", "R", "R2", "R'", "U", "U2", "U'", "F", "F2", "F'", "L", "L2", "L'", "D", "D2", "D'", "b", "b2", "b'", "r", "r2", "r'", "u", "u2", "u'", "f", "f2", "f'", "l", "l2", "l'", "d", "d2", "d'", "S", "S2", "S'", "M", "M2", "M'", "E'", "E2", "E"], 47 ["B", "B2", "B'", "D", "D2", "D'", "R", "R2", "R'", "F", "F2", "F'", "U", "U2", "U'", "L", "L2", "L'", "b", "b2", "b'", "d", "d2", "d'", "r", "r2", "r'", "f", "f2", "f'", "u", "u2", "u'", "l", "l2", "l'", "S", "S2", "S'", "E'", "E2", "E", "M'", "M2", "M"], 48 ["B", "B2", "B'", "L", "L2", "L'", "D", "D2", "D'", "F", "F2", "F'", "R", "R2", "R'", "U", "U2", "U'", "b", "b2", "b'", "l", "l2", "l'", "d", "d2", "d'", "f", "f2", "f'", "r", "r2", "r'", "u", "u2", "u'", "S", "S2", "S'", "M'", "M2", "M", "E", "E2", "E'"], 49 ["B", "B2", "B'", "U", "U2", "U'", "L", "L2", "L'", "F", "F2", "F'", "D", "D2", "D'", "R", "R2", "R'", "b", "b2", "b'", "u", "u2", "u'", "l", "l2", "l'", "f", "f2", "f'", "d", "d2", "d'", "r", "r2", "r'", "S", "S2", "S'", "E", "E2", "E'", "M", "M2", "M'"], 50 ["L", "L2", "L'", "U", "U2", "U'", "F", "F2", "F'", "R", "R2", "R'", "D", "D2", "D'", "B", "B2", "B'", "l", "l2", "l'", "u", "u2", "u'", "f", "f2", "f'", "r", "r2", "r'", "d", "d2", "d'", "b", "b2", "b'", "M'", "M2", "M", "E", "E2", "E'", "S", "S2", "S'"], 51 ["L", "L2", "L'", "B", "B2", "B'", "U", "U2", "U'", "R", "R2", "R'", "F", "F2", "F'", "D", "D2", "D'", "l", "l2", "l'", "b", "b2", "b'", "u", "u2", "u'", "r", "r2", "r'", "f", "f2", "f'", "d", "d2", "d'", "M'", "M2", "M", "S", "S2", "S'", "E'", "E2", "E"], 52 ["L", "L2", "L'", "D", "D2", "D'", "B", "B2", "B'", "R", "R2", "R'", "U", "U2", "U'", "F", "F2", "F'", "l", "l2", "l'", "d", "d2", "d'", "b", "b2", "b'", "r", "r2", "r'", "u", "u2", "u'", "f", "f2", "f'", "M'", "M2", "M", "E'", "E2", "E", "S'", "S2", "S"], 53 ["L", "L2", "L'", "F", "F2", "F'", "D", "D2", "D'", "R", "R2", "R'", "B", "B2", "B'", "U", "U2", "U'", "l", "l2", "l'", "f", "f2", "f'", "d", "d2", "d'", "r", "r2", "r'", "b", "b2", "b'", "u", "u2", "u'", "M'", "M2", "M", "S'", "S2", "S", "E", "E2", "E'"], 54 ["R", "R2", "R'", "D", "D2", "D'", "F", "F2", "F'", "L", "L2", "L'", "U", "U2", "U'", "B", "B2", "B'", "r", "r2", "r'", "d", "d2", "d'", "f", "f2", "f'", "l", "l2", "l'", "u", "u2", "u'", "b", "b2", "b'", "M", "M2", "M'", "E'", "E2", "E", "S", "S2", "S'"], 55 ["R", "R2", "R'", "B", "B2", "B'", "D", "D2", "D'", "L", "L2", "L'", "F", "F2", "F'", "U", "U2", "U'", "r", "r2", "r'", "b", "b2", "b'", "d", "d2", "d'", "l", "l2", "l'", "f", "f2", "f'", "u", "u2", "u'", "M", "M2", "M'", "S", "S2", "S'", "E", "E2", "E'"], 56 ["R", "R2", "R'", "U", "U2", "U'", "B", "B2", "B'", "L", "L2", "L'", "D", "D2", "D'", "F", "F2", "F'", "r", "r2", "r'", "u", "u2", "u'", "b", "b2", "b'", "l", "l2", "l'", "d", "d2", "d'", "f", "f2", "f'", "M", "M2", "M'", "E", "E2", "E'", "S'", "S2", "S"], 57 ["R", "R2", "R'", "F", "F2", "F'", "U", "U2", "U'", "L", "L2", "L'", "B", "B2", "B'", "D", "D2", "D'", "r", "r2", "r'", "f", "f2", "f'", "u", "u2", "u'", "l", "l2", "l'", "b", "b2", "b'", "d", "d2", "d'", "M", "M2", "M'", "S'", "S2", "S", "E'", "E2", "E"] 58]; 59const ALG_REPLACE = { 60 "U": "d y", 61 "U2": "d2 y2", 62 "U'": "d' y'", 63 "R": "l x", 64 "R2": "l2 x2", 65 "R'": "l' x'", 66 "F": "b z", 67 "F2": "b2 z2", 68 "F'": "b' z'", 69 "D": "u y'", 70 "D2": "u2 y2", 71 "D'": "u' y", 72 "L": "r x'", 73 "L2": "r2 x2", 74 "L'": "r' x", 75 "B": "f z'", 76 "B2": "f2 z2", 77 "B'": "f' z", 78 "u": "D y", 79 "u2": "D2 y2", 80 "u'": "D' y'", 81 "r": "L x", 82 "r2": "L2 x2", 83 "r'": "L' x'", 84 "f": "B z", 85 "f2": "B2 z2", 86 "f'": "B' z'", 87 "d": "U y'", 88 "d2": "U2 y2", 89 "d'": "U' y", 90 "l": "R x'", 91 "l2": "R2 x2", 92 "l'": "R' x", 93 "b": "F z'", 94 "b2": "F2 z2", 95 "b'": "F' z", 96 "E": "U D' y'", 97 "E2": "U2 D2 y2", 98 "E'": "U' D y", 99 "M": "L' R x'", 100 "M2": "L2 R2 x2", 101 "M'": "L R' x", 102 "S": "F' B z", 103 "S2": "F2 B2 z2", 104 "S'": "F B' z'" 105}; 106 107function rewrite(alg, ALG_ALLOWED) { 108 function processMove(res, rotationIndex) { 109 let rotationIndexOut = rotationIndex; 110 for (let i = 0; i < res.length; i++) { 111 if (ROTATION_BASE.includes(res[i][0]) && !ALG_ALLOWED.includes(res[i][0])) { 112 if (!ROTATION_DICT.hasOwnProperty(res[i])) { 113 return -1; 114 } 115 rotationIndexOut = ROTATION_DICT[res[i]][rotationIndexOut]; 116 } else if (ROTATION_BASE.includes(res[i][0]) && ALG_ALLOWED.includes(res[i][0])) { 117 out.push(res[i]); 118 } else { 119 if (MOVE.indexOf(res[i]) === -1) { 120 return -1; 121 } 122 const moveNew = MOVE_DICT[rotationIndexOut][MOVE.indexOf(res[i])]; 123 if (!ALG_ALLOWED.includes(moveNew[0]) && ALG_REPLACE.hasOwnProperty(res[i])) { 124 const moveReplaceList = ALG_REPLACE[res[i]].split(" "); 125 rotationIndexOut = processMove(moveReplaceList, rotationIndexOut); 126 } else { 127 out.push(moveNew); 128 } 129 } 130 } 131 return rotationIndexOut; 132 } 133 const res = arrayToStr(algToArray(alg)).split(" "); 134 for (let i = 0; i < res.length; i++) { 135 if (res[i][0] === "y" || res[i][0] === "z") { 136 return arrayToStr(algToArray(res.join(" "))); 137 } 138 } 139 let rotationIndex = 0; 140 const out = []; 141 rotationIndex = processMove(res, rotationIndex); 142 if (rotationIndex === -1) { 143 return ""; 144 } 145 if (ROTATION[rotationIndex] === "") {
146 return arrayToStr(algToArray(out.join(" "))); 147 } 148 return arrayToStr(algToArray("".concat(out.join(" "), " ").concat(ROTATION[rotationIndex]))); 149} 150 151function single(alg) { 152 return rewrite(alg, ["U", "R", "F", "D", "L", "B", "E", "M", "S", "y", "z"]); 153} 154 155function righty(alg) { 156 return rewrite(alg, ["R", "r", "U", "d", "D", "u", "F", "b", "B", "f", "E", "M", "S"]); 157} 158 159function finger(s1, position) { 160 // R' F R' S' R F R' S R F2 R 161 // if (fingerback(s1, position) > 5) { 162 // return 0; 163 // } 164 let fingerposition = position; 165 const arr = s1.split(" "); 166 for (let i = 0; i <= arr.length - 1; i++) { 167 if (i > 0 && arr[i][0] === "E") { 168 if (arr[i - 1] === "U2") { 169 return 0; 170 } 171 if (arr[i - 1][0] === "U" && arr[i] === "E2") { 172 return 0; 173 } 174 } 175 if (i < arr.length - 1 && arr[i][0] === "E") { 176 if (arr[i + 1][0] === "D") { 177 return 0; 178 } 179 } 180 if (i > 0 && arr[i][0] === "S") { 181 if (arr[i - 1] === "F2") { 182 return 0; 183 } 184 } 185 if (i < arr.length - 1 && arr[i][0] === "S") { 186 if (arr[i + 1][0] === "B") { 187 return 0; 188 } 189 } 190 if (i > 0 && arr[i] === "S2") { 191 if (arr[i - 1][0] === "F") { 192 return 0; 193 } 194 } 195 if (i < arr.length - 1 && arr[i] === "S2") { 196 if (arr[i + 1][0] === "B") { 197 return 0; 198 } 199 } 200 if (i > 0 && arr[i][0] === "B") { 201 if (arr[i - 1][0] === "F") { 202 if (arr[i - 1] === "F2" || arr[i] === "B2") { 203 return 0; 204 } 205 } 206 } 207 if (i > 0 && arr[i][0] === "D") { 208 if (arr[i - 1][0] === "u") { 209 return 0; 210 } 211 } 212 // U E R S' R' U' R S R' E' 213 if (i > 0 && arr[i][0] === "E") { 214 if (arr[i - 1][0] === "U") { 215 if (fingerposition !== 2) { 216 return 0; 217 } 218 } 219 } 220 if (i > 0 && i < arr.length - 1) { 221 if (arr[i][0] === "E" || arr[i][0] === "M" || arr[i][0] === "S") { 222 if (arr[i - 1][0] === "E" || arr[i - 1][0] === "M" || arr[i - 1][0] === "S") { 223 if (arr[i + 1][0] === "E" || arr[i + 1][0] === "M" || arr[i + 1][0] === "S") { 224 return 0; 225 } 226 } 227 } 228 } 229 if (fingerposition === 4 && (arr[i][0] === "B" || arr[i][0] === "F" || arr[i] === "D2" || arr[i] === "S2" || arr[i] === "M2")) { 230 return 0; 231 } 232 if (fingerposition === 2 && (arr[i][0] === "B" || arr[i] === "F2" || arr[i] === "S2" || arr[i] === "E2")) { 233 return 0; 234 } 235 // R U2 R2 F' R S R' F R S' R U2 R' 236 if (fingerposition === 1 && arr[i] === "B2") { 237 return 0; 238 } 239 if (fingerposition === 0 && (arr[i][0] === "B" || arr[i][0] === "F" || arr[i] === "D2" || arr[i] === "S2" || arr[i] === "M2")) { 240 return 0; 241 } 242 if (arr[i] === "R" || arr[i] === "r") { 243 fingerposition = fingerposition + 1; 244 } 245 if (arr[i] === "R'" || arr[i] === "r'") { 246 fingerposition = fingerposition - 1; 247 } 248 if (arr[i] === "R2" || arr[i] === "r2") { 249 if (fingerposition === 2) { 250 fingerposition = 0; 251 for (let j = i + 1; j <= arr.length - 1; j++) { 252 if (arr[j] === "R" || arr[j] === "r" || arr[j] === "R2" || arr[j] === "r2") { 253 fingerposition = 0; 254 break; 255 } 256 if (arr[j] === "R'" || arr[j] === "r'") { 257 fingerposition = 4; 258 break; 259 } 260 } 261 } else { 262 fingerposition = (fingerposition + 2) % 4; 263 } 264 } 265 if (fingerposition === 5 || fingerposition === -1) { 266 return 0; 267 } 268 } 269 if (fingerposition === 4 || fingerposition === 0) { 270 return 0; 271 } 272 return 1; 273} 274 275function fingerpain(s1, position) { 276 let pain = 0; 277 let fingerposition = position; 278 const arr = s1.split(" "); 279 pain = pain + Math.min(Math.floor(fingerback(s1, position) / 2), 2); 280 for (let i = 0; i <= arr.length - 1; i++) { 281 if (fingerposition === 4 && (arr[i] === "U2" || arr[i][0] === "M" || arr[i][0] === "E")) { 282 pain = pain + 1; 283 } 284 if (fingerposition === 3 && (arr[i] === "U2" || arr[i][0] === "M")) { 285 pain = pain + 1; 286 } 287 if (fingerposition === 2 && (arr[i][0] === "E" || arr[i][0] === "F")) { 288 pain = pain + 1; 289 } 290 if (fingerposition === 1 && (arr[i] === "U2" || arr[i][0] === "M")) { 291 pain = pain + 1; 292 } 293 if (fingerposition === 0 && (arr[i] === "U2" || arr[i][0] === "M" || arr[i][0] === "E")) { 294 pain = pain + 1; 295 } 296 if (fingerposition === 3 && arr[i] === "F2") { 297 pain = pain + 1; 298 } 299 if (arr[i] === "R" || arr[i] === "r") { 300 fingerposition = fingerposition + 1; 301 } 302 if (arr[i] === "R'" || arr[i] === "r'") { 303 fingerposition = fingerposition - 1; 304 } 305 if (arr[i] === "R2" || arr[i] === "r2") { 306 if (fingerposition === 2) { 307 fingerposition = 0; 308 for (let j = i + 1; j <= arr.length - 1; j++) { 309 if (arr[j] === "R" || arr[j] === "r" || arr[j] === "R2" || arr[j] === "r2") { 310 fingerposition = 0; 311 break; 312 } 313 if (arr[j] === "R'" || arr[j] === "r'") { 314 fingerposition = 4; 315 break; 316 } 317 } 318 } else { 319 fingerposition = (fingerposition + 2) % 4; 320 } 321 } 322 } 323 return pain; 324} 325 326function fingerback(s1, position) { 327 let fingerposition = position; 328 const arr = s1.split(" "); 329 let sum = 0; 330 for (let i = 0; i <= arr.length - 1; i++) { 331 if (arr[i] === "R" || arr[i] === "r") { 332 fingerposition = fingerposition + 1; 333 } 334 if (arr[i] === "R'" || arr[i] === "r'") { 335 fingerposition = fingerposition - 1; 336 } 337 if (arr[i] === "R2" || arr[i] === "r2") { 338 if (fingerposition === 2) { 339 fingerposition = 0; 340 for (let j = i + 1; j <= arr.length - 1; j++) { 341 if (arr[j] === "R" || arr[j] === "r" || arr[j] === "R2" || arr[j] === "r2") { 342 fingerposition = 0; 343 break; 344 } 345 if (arr[j] === "R'" || arr[j] === "r'") { 346 fingerposition = 4; 347 break; 348 } 349 } 350 } else { 351 fingerposition = (fingerposition + 2) % 4; 352 } 353 } 354 if (fingerposition === 0 || fingerposition === 4) { 355 // U R' U' S R2 S' R2 U R U' 356 let isBad = true; 357 if (i > 0) { 358 if ((arr[i - 1] === "S" || arr[i - 1] === "S'") && (arr[i] === "R2" || arr[i] === "r2") || (arr[i] === "S" || arr[i] === "S'") && (arr[i - 1] === "R2" || arr[i - 1] === "r2")) { 359 isBad = false;
360 } 361 } 362 if (i < arr.length - 1) { 363 if ((arr[i + 1] === "S" || arr[i + 1] === "S'") && (arr[i] === "R2" || arr[i] === "r2") || (arr[i] === "S" || arr[i] === "S'") && (arr[i + 1] === "R2" || arr[i + 1] === "r2")) { 364 isBad = false; 365 } 366 } 367 if (isBad) { 368 sum = sum + 1; 369 } 370 } 371 } 372 return sum; 373} 374 375 376function fingerbeginfrom(s1) { 377 if (s1 === "") { 378 return ""; 379 } 380 const s1Righty = righty(s1); 381 let fingerbegin = "", 382 count = 0; 383 for (let i = 0; i <= 10; i++) { 384 if (finger(s1Righty, 2) === 1 && (fingerpain(s1Righty, 2) === i || fingerpain(s1Righty, 2) === i + 1)) { 385 count = count + 1; 386 fingerbegin = `${fingerbegin}${arrLang[lang]["homegrip"]}/`; 387 } 388 if (finger(s1Righty, 1) === 1 && fingerpain(s1Righty, 1) === i) { 389 count = count + 1; 390 fingerbegin = `${fingerbegin}${arrLang[lang]["thumbdown"]}/`; 391 } 392 if (finger(s1Righty, 3) === 1 && fingerpain(s1Righty, 3) === i) { 393 count = count + 1; 394 fingerbegin = `${fingerbegin}${arrLang[lang]["thumbup"]}/`; 395 } 396 if (fingerbegin.length > 0) { 397 break; 398 } 399 } 400 if (count === 3) { 401 return `${arrLang[lang]["homegrip"]}`; 402 } 403 return fingerbegin.substring(0, fingerbegin.length - 1); 404}
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.