L
function range(...args) {
const rangeParseArgs = (s, e, d = 1) => {
if ( e === undefined )
[s, e] = [0, s]
return [s, e, d]
}
function* rangeGen(...args) {
let [s, e, d] = rangeParseArgs(...args)
if ( s < e )
for(; s < e; s += d)
yield s
else
for(; s > e; s -= d)
yield s
}
return new Proxy({
[Symbol.iterator]: () => rangeGen(...args)
}, {
has(p, n) {
const [s, e, d] = rangeParseArgs(...args)
n = +n
if ( s < e && (n >= e || n < s) ) return false
if ( s >= e && (n <= e || n > s) ) return false
if ( (n - s) % d ) return false
return true
},
})
}