Sanjay's challenge
by Arnaud Buchholz
HTML
<script src="https://arnaudbuchholz.github.io/blog/jsfiddle-assert.js"></script>
JavaScript
function* range (start, end, skip) {
if ((start === undefined) ||Â (start && end === undefined && skip) || (start < end && skip <= 0) || start > end && skip >= 0) {
return null;
}
end == undefined && ([end, start] = [start, 0]);
!skip && (skip = (start < end) ? +1 : -1);
yield* [...
[... Array(Math.abs(end - start) / Math.abs(skip)).keys()]
.map(value => start + value * skip)
];
}
check = (range, expected) => {
return range.length === expected.length
&& expected.every((value, index) => range[index] === value)
}
assert(() => check([... range(5)], [0, 1, 2, 3, 4]))
assert(() => check([... range(0, 3)], [0, 1, 2]))
assert(() => check([... range(0, 4, 2)], [0, 2]))
assert(() => check([... range(3, 0)], [3, 2, 1]))
assert(() => check([... range(4, 0, -2)], [4, 2]))