hyperStep = space => {
const newSpace = new Map();
const { minX, minY, minZ, minW, maxX, maxY, maxZ, maxW } = hyperspaceRange(
space
);
for (let w = minW - 1; w <= maxW + 1; w++) {
for (let z = minZ - 1; z <= maxZ + 1; z++) {
for (let y = minY - 1; y <= maxY + 1; y++) {
for (let x = minX - 1; x <= maxX + 1; x++) {
const neighbors = hyperactiveNeighbors(space, w, z, y, x);
const active = hyperGet(space, w, z, y, x);
if (active && neighbors !== 2 && neighbors !== 3) {
hyperSet(newSpace, w, z, y, x, false);
} else if (!active && neighbors === 3) {
hyperSet(newSpace, w, z, y, x, true);
} else {
hyperSet(newSpace, w, z, y, x, active);
}
}
}
}
}
return newSpace;
}