mirror of
				https://github.com/ls125781003/tvboxtg.git
				synced 2025-10-31 05:42:18 +00:00 
			
		
		
		
	1213-2322
fix
This commit is contained in:
		
							
								
								
									
										138
									
								
								PG/lib/mod.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										138
									
								
								PG/lib/mod.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,138 @@ | ||||
| const peq = new Uint32Array(0x10000); | ||||
| const myers_32 = (a, b) => { | ||||
|     const n = a.length; | ||||
|     const m = b.length; | ||||
|     const lst = 1 << (n - 1); | ||||
|     let pv = -1; | ||||
|     let mv = 0; | ||||
|     let sc = n; | ||||
|     let i = n; | ||||
|     while (i--) { | ||||
|         peq[a.charCodeAt(i)] |= 1 << i; | ||||
|     } | ||||
|     for (i = 0; i < m; i++) { | ||||
|         let eq = peq[b.charCodeAt(i)]; | ||||
|         const xv = eq | mv; | ||||
|         eq |= ((eq & pv) + pv) ^ pv; | ||||
|         mv |= ~(eq | pv); | ||||
|         pv &= eq; | ||||
|         if (mv & lst) { | ||||
|             sc++; | ||||
|         } | ||||
|         if (pv & lst) { | ||||
|             sc--; | ||||
|         } | ||||
|         mv = (mv << 1) | 1; | ||||
|         pv = (pv << 1) | ~(xv | mv); | ||||
|         mv &= xv; | ||||
|     } | ||||
|     i = n; | ||||
|     while (i--) { | ||||
|         peq[a.charCodeAt(i)] = 0; | ||||
|     } | ||||
|     return sc; | ||||
| }; | ||||
| const myers_x = (b, a) => { | ||||
|     const n = a.length; | ||||
|     const m = b.length; | ||||
|     const mhc = []; | ||||
|     const phc = []; | ||||
|     const hsize = Math.ceil(n / 32); | ||||
|     const vsize = Math.ceil(m / 32); | ||||
|     for (let i = 0; i < hsize; i++) { | ||||
|         phc[i] = -1; | ||||
|         mhc[i] = 0; | ||||
|     } | ||||
|     let j = 0; | ||||
|     for (; j < vsize - 1; j++) { | ||||
|         let mv = 0; | ||||
|         let pv = -1; | ||||
|         const start = j * 32; | ||||
|         const vlen = Math.min(32, m) + start; | ||||
|         for (let k = start; k < vlen; k++) { | ||||
|             peq[b.charCodeAt(k)] |= 1 << k; | ||||
|         } | ||||
|         for (let i = 0; i < n; i++) { | ||||
|             const eq = peq[a.charCodeAt(i)]; | ||||
|             const pb = (phc[(i / 32) | 0] >>> i) & 1; | ||||
|             const mb = (mhc[(i / 32) | 0] >>> i) & 1; | ||||
|             const xv = eq | mv; | ||||
|             const xh = ((((eq | mb) & pv) + pv) ^ pv) | eq | mb; | ||||
|             let ph = mv | ~(xh | pv); | ||||
|             let mh = pv & xh; | ||||
|             if ((ph >>> 31) ^ pb) { | ||||
|                 phc[(i / 32) | 0] ^= 1 << i; | ||||
|             } | ||||
|             if ((mh >>> 31) ^ mb) { | ||||
|                 mhc[(i / 32) | 0] ^= 1 << i; | ||||
|             } | ||||
|             ph = (ph << 1) | pb; | ||||
|             mh = (mh << 1) | mb; | ||||
|             pv = mh | ~(xv | ph); | ||||
|             mv = ph & xv; | ||||
|         } | ||||
|         for (let k = start; k < vlen; k++) { | ||||
|             peq[b.charCodeAt(k)] = 0; | ||||
|         } | ||||
|     } | ||||
|     let mv = 0; | ||||
|     let pv = -1; | ||||
|     const start = j * 32; | ||||
|     const vlen = Math.min(32, m - start) + start; | ||||
|     for (let k = start; k < vlen; k++) { | ||||
|         peq[b.charCodeAt(k)] |= 1 << k; | ||||
|     } | ||||
|     let score = m; | ||||
|     for (let i = 0; i < n; i++) { | ||||
|         const eq = peq[a.charCodeAt(i)]; | ||||
|         const pb = (phc[(i / 32) | 0] >>> i) & 1; | ||||
|         const mb = (mhc[(i / 32) | 0] >>> i) & 1; | ||||
|         const xv = eq | mv; | ||||
|         const xh = ((((eq | mb) & pv) + pv) ^ pv) | eq | mb; | ||||
|         let ph = mv | ~(xh | pv); | ||||
|         let mh = pv & xh; | ||||
|         score += (ph >>> (m - 1)) & 1; | ||||
|         score -= (mh >>> (m - 1)) & 1; | ||||
|         if ((ph >>> 31) ^ pb) { | ||||
|             phc[(i / 32) | 0] ^= 1 << i; | ||||
|         } | ||||
|         if ((mh >>> 31) ^ mb) { | ||||
|             mhc[(i / 32) | 0] ^= 1 << i; | ||||
|         } | ||||
|         ph = (ph << 1) | pb; | ||||
|         mh = (mh << 1) | mb; | ||||
|         pv = mh | ~(xv | ph); | ||||
|         mv = ph & xv; | ||||
|     } | ||||
|     for (let k = start; k < vlen; k++) { | ||||
|         peq[b.charCodeAt(k)] = 0; | ||||
|     } | ||||
|     return score; | ||||
| }; | ||||
| const distance = (a, b) => { | ||||
|     if (a.length < b.length) { | ||||
|         const tmp = b; | ||||
|         b = a; | ||||
|         a = tmp; | ||||
|     } | ||||
|     if (b.length === 0) { | ||||
|         return a.length; | ||||
|     } | ||||
|     if (a.length <= 32) { | ||||
|         return myers_32(a, b); | ||||
|     } | ||||
|     return myers_x(a, b); | ||||
| }; | ||||
| const closest = (str, arr) => { | ||||
|     let min_distance = Infinity; | ||||
|     let min_index = 0; | ||||
|     for (let i = 0; i < arr.length; i++) { | ||||
|         const dist = distance(str, arr[i]); | ||||
|         if (dist < min_distance) { | ||||
|             min_distance = dist; | ||||
|             min_index = i; | ||||
|         } | ||||
|     } | ||||
|     return arr[min_index]; | ||||
| }; | ||||
| export { closest, distance }; | ||||
		Reference in New Issue
	
	Block a user