createBoard imperative version

This commit is contained in:
Ali Gator 2022-12-01 20:32:19 +01:00
parent aace63b1a2
commit d0802d850b

View File

@ -20,14 +20,31 @@ function evolve1d(state, rules) {
} }
// create a 2D board from a 1D CA initial state // create a 2D board from a 1D CA initial state
// function createBoard(state, rules, height) {
// function createBoardAcc(s, h, acc) {
// if (h === 0) return acc;
// const newState = evolve1d(s, rules);
// const newAcc = acc.concat([s]);
// return createBoardAcc(newState, h - 1, newAcc);
// }
// return createBoardAcc(state, height, []);
// }
// performance "choke point" in full imperative
function createBoard(state, rules, height) { function createBoard(state, rules, height) {
function createBoardAcc(s, h, acc) { var board = [];
if (h === 0) return acc; let prevState = [];
const newState = evolve1d(s, rules); for (let i = 0; i < height; i++) {
const newAcc = acc.concat([s]); let nextState = [];
return createBoardAcc(newState, h - 1, newAcc); if (i == 0) {
nextState = evolve1d(state, rules);
} else {
nextState = evolve1d(prevState, rules);
}
board = board.concat([nextState]);
prevState = nextState;
} }
return createBoardAcc(state, height, []); return board;
} }
// Find the neighbor of a given cell in a 2D CA board // Find the neighbor of a given cell in a 2D CA board