|  |  |  | '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; |