@extra-array/has-infix
Version:
Checks if array contains an infix.
43 lines (42 loc) • 1.07 kB
JavaScript
function id(v) {
return v;
}
function cmp(a, b) {
return a < b ? -1 : (a > b ? 1 : 0);
}
function from$$1(x) {
return Array.isArray(x) ? x : [...x];
}
function head(x, vd) {
for (var v of x)
return v;
return vd;
}
function* searchInfixAll(x, y, fc, fm = null) {
var fc = fc || cmp, fm = fm || id;
var y1 = from$$1(y), Y = y1.length;
if (Y === 0)
yield 0;
var y1 = y1.map(fm, null);
var m = new Array(Y).fill(false);
var i = -1, J = 0;
for (var u of x) {
var u1 = fm(u, ++i, x);
for (var j = J; j > 0; j--)
m[j] = m[j - 1] && fc(u1, y1[j]) === 0;
m[0] = fc(u1, y1[0]) === 0;
J = Math.min(J + 1, Y - 1);
if (m[Y - 1])
yield i - Y + 1;
}
}
function searchInfix(x, y, fc, fm = null) {
return head(searchInfixAll(x, y, fc, fm), -1);
}
function hasInfix$1(x, y, fc, fm = null) {
return searchInfix(x, y, fc, fm) >= 0;
}
function hasInfix(x, y, fc = null, fm = null) {
return hasInfix$1(x, y, fc, fm);
}
export { hasInfix as default };