{"version":3,"sources":["jsdelivr-header.js","/npm/@lachenmayer/longest-common-subsequence@1.0.1/index.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA,ACNA,MAAM,MAAQ,EACR,GAAK,EACL,KAAO,EACP,SAAW,EAyEjB,SAAS,MAAM,EAAQ,GACrB,MAAM,EAAQ,IAAI,MAAM,GACxB,IAAK,IAAI,EAAI,EAAG,EAAI,EAAQ,IAAK,EAAM,GAAK,IAAI,MAAM,GACtD,OAAO,CACT,CA3EA,OAAO,QAAU,SAAkC,EAAG,GACpD,GAAiB,iBAAN,GAA+B,iBAAN,EAClC,MAAM,IAAI,UAAU,0BAGtB,MAAM,EAAM,MAAM,EAAE,OAAS,EAAG,EAAE,OAAS,GACrC,EAAa,MAAM,EAAE,OAAS,EAAG,EAAE,OAAS,GAGlD,IAAK,IAAI,EAAI,EAAG,GAAK,EAAE,OAAQ,IAC7B,EAAI,GAAG,GAAK,EACZ,EAAW,GAAG,GAhBJ,EAoBZ,IAAK,IAAI,EAAI,EAAG,GAAK,EAAE,OAAQ,IAC7B,EAAI,GAAG,GAAK,EACZ,EAAW,GAAG,GAtBJ,EAyBZ,IAAK,IAAI,EAAI,EAAG,GAAK,EAAE,OAAQ,IAC7B,IAAK,IAAI,EAAI,EAAG,GAAK,EAAE,OAAQ,IAC7B,GAAI,EAAE,EAAI,KAAO,EAAE,EAAI,GACrB,EAAI,GAAG,GAAK,EAAI,EAAI,GAAG,EAAI,GAAK,EAChC,EAAW,GAAG,GA1BL,MA2BJ,CACL,MAAM,EAAQ,EAAI,EAAI,GAAG,GACnB,EAAU,EAAI,GAAG,EAAI,GACvB,GAAS,GACX,EAAI,GAAG,GAAK,EACZ,EAAW,GAAG,GAlCb,IAoCD,EAAI,GAAG,GAAK,EACZ,EAAW,GAAG,GApCX,EAsCP,CAIJ,IAAI,EAAS,GACb,MAAM,EAAO,GACb,IAAK,EAAG,GAAK,CAAC,EAAE,OAAQ,EAAE,QACtB,EAAI,EAAW,GAAG,GACtB,KAhDY,IAgDL,GA7CQ,IA8CT,GACF,IACA,IACA,EAAS,EAAE,GAAK,EAChB,EAAK,KAAK,CAAC,UAAW,KAnDf,IAoDE,GACT,IACA,EAAK,KAAK,CAAC,SAAU,KAvDhB,IAwDI,IACT,IACA,EAAK,KAAK,CAAC,YAAa,KAE1B,EAAI,EAAW,GAAG,GAEpB,KAAO,EAAI,GACT,IACA,EAAK,KAAK,CAAC,SAAU,IAEvB,KAAO,EAAI,GACT,IACA,EAAK,KAAK,CAAC,YAAa,IAI1B,OAFA,EAAK,UAEE,CAAE,IAAK,EAAQ,OACxB","file":"/npm/@lachenmayer/longest-common-subsequence@1.0.1/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/@lachenmayer/longest-common-subsequence@1.0.1/index.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","const empty = 0\nconst up = 1\nconst left = 2\nconst diagonal = 3\n\nmodule.exports = function longestCommonSubsequence(a, b) {\n  if (typeof a !== 'string' || typeof b !== 'string') {\n    throw new TypeError('inputs must be strings')\n  }\n\n  const lcs = table(a.length + 1, b.length + 1)\n  const directions = table(a.length + 1, b.length + 1)\n\n  // a empty\n  for (let i = 0; i <= b.length; i++) {\n    lcs[0][i] = 0\n    directions[0][i] = empty\n  }\n\n  // b empty\n  for (let i = 0; i <= a.length; i++) {\n    lcs[i][0] = 0\n    directions[i][0] = empty\n  }\n\n  for (let i = 1; i <= a.length; i++) {\n    for (let j = 1; j <= b.length; j++) {\n      if (a[i - 1] === b[j - 1]) {\n        lcs[i][j] = lcs[i - 1][j - 1] + 1\n        directions[i][j] = diagonal\n      } else {\n        const upLcs = lcs[i - 1][j]\n        const leftLcs = lcs[i][j - 1]\n        if (upLcs >= leftLcs) {\n          lcs[i][j] = upLcs\n          directions[i][j] = up\n        } else {\n          lcs[i][j] = leftLcs\n          directions[i][j] = left\n        }\n      }\n    }\n  }\n\n  let result = ''\n  const diff = []\n  let [i, j] = [a.length, b.length]\n  let m = directions[i][j]\n  while (m !== empty) {\n    if (m === diagonal) {\n      i--\n      j--\n      result = a[i] + result\n      diff.push(['keepOld', i])\n    } else if (m === left) {\n      j--\n      diff.push(['addNew', j])\n    } else if (m === up) {\n      i--\n      diff.push(['removeOld', i])\n    }\n    m = directions[i][j]\n  }\n  while (j > 0) {\n    j--\n    diff.push(['addNew', j])\n  }\n  while (i > 0) {\n    i--\n    diff.push(['removeOld', i])\n  }\n  diff.reverse()\n\n  return { lcs: result, diff }\n}\n\nfunction table(height, width) {\n  const table = new Array(height)\n  for (let i = 0; i < height; i++) table[i] = new Array(width)\n  return table\n}\n"]}