function* grids(size = 2, taken = new Set()) {
for (const [dx, dy] of dirs) {
for (let x = 0; x < width - (size - 1) * dx; x++) {
point: for (let y = 0; y < width - (size - 1) * dy; y++) {
const grid = new d3.InternSet([], String);
for (let i = 0; i < size; i++) {
const p = [x + dx * i, y + dy * i];
if (taken.has(p)) continue point;
grid.add(p);
}
yield grid;
}
}
}
}