Skip to content

Instantly share code, notes, and snippets.

@pope
Created February 16, 2018 18:29
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save pope/7e590437662da604323e90c1b8ae59a1 to your computer and use it in GitHub Desktop.
Save pope/7e590437662da604323e90c1b8ae59a1 to your computer and use it in GitHub Desktop.
JS Bin // source https://jsbin.com/pelibij
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>JS Bin</title>
</head>
<body>
<script id="jsbin-javascript">
function* subSequenceCycle(sequence, size) {
if (sequence.length === 0) {
throw new Error('cannot be empty');
}
// OR
// asserts.assert(sequence.length !== 0);
const copy = sequence.slice();
let cur = 0;
const res = [];
let rem = size;
while (true) {
const itemsLeft = copy.length - cur;
// Don't have enough to send back. Add what we have to `res` and
// start back over.
if (itemsLeft < rem) {
res.push(...copy.slice(cur));
rem -= itemsLeft;
cur = 0;
continue;
}
const end = rem + cur
res.push(...copy.slice(cur, end));
yield res.slice();
// Reset for next
res.length = 0;
rem = size;
cur = end;
}
}
let gen = subSequenceCycle([1, 2, 3, 4, 5, 6], 4);
console.log(gen.next().value);
console.log(gen.next().value);
console.log(gen.next().value);
console.log(gen.next().value);
console.log(gen.next().value);
</script>
<script id="jsbin-source-javascript" type="text/javascript">function* subSequenceCycle(sequence, size) {
if (sequence.length === 0) {
throw new Error('cannot be empty');
}
// OR
// asserts.assert(sequence.length !== 0);
const copy = sequence.slice();
let cur = 0;
const res = [];
let rem = size;
while (true) {
const itemsLeft = copy.length - cur;
// Don't have enough to send back. Add what we have to `res` and
// start back over.
if (itemsLeft < rem) {
res.push(...copy.slice(cur));
rem -= itemsLeft;
cur = 0;
continue;
}
const end = rem + cur
res.push(...copy.slice(cur, end));
yield res.slice();
// Reset for next
res.length = 0;
rem = size;
cur = end;
}
}
let gen = subSequenceCycle([1, 2, 3, 4, 5, 6], 4);
console.log(gen.next().value);
console.log(gen.next().value);
console.log(gen.next().value);
console.log(gen.next().value);
console.log(gen.next().value);</script></body>
</html>
function* subSequenceCycle(sequence, size) {
if (sequence.length === 0) {
throw new Error('cannot be empty');
}
// OR
// asserts.assert(sequence.length !== 0);
const copy = sequence.slice();
let cur = 0;
const res = [];
let rem = size;
while (true) {
const itemsLeft = copy.length - cur;
// Don't have enough to send back. Add what we have to `res` and
// start back over.
if (itemsLeft < rem) {
res.push(...copy.slice(cur));
rem -= itemsLeft;
cur = 0;
continue;
}
const end = rem + cur
res.push(...copy.slice(cur, end));
yield res.slice();
// Reset for next
res.length = 0;
rem = size;
cur = end;
}
}
let gen = subSequenceCycle([1, 2, 3, 4, 5, 6], 4);
console.log(gen.next().value);
console.log(gen.next().value);
console.log(gen.next().value);
console.log(gen.next().value);
console.log(gen.next().value);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment