'use strict'; const isEq = require('@codefeathers/iseq'); const wrap = (f, ...x) => (...y) => f(...x, ...y); class Slider { constructor (options) { this.windowSize = options.size; this.prefer = options.prefer; this.accepting = options.accepting; } slide (host, guest) { const k = this.windowSize; const get = { val: 0, next: () => ++get.val, } const startSliding = (window, i) => { const firstMatch = host.findIndex(wrap(isEq, window[0])); if(firstMatch !== -1) { get.val = firstMatch; if(window.every((item, j) => { if(j === 0) return true; return isEq(item, host[get.next()]); })) return [ firstMatch, i ]; } const nextI = i + 1; const newWindow = guest.slice(nextI, nextI + k); if(newWindow.length === k) return startSliding(newWindow, nextI); return [ -1, -1 ]; }; const window = guest.slice(0, k); return startSliding(window, 0); } }; module.exports = Slider;