var state = "A"; var tape = {}; var pointer = 0; var actions = { A: [ [1, 1, "B"], [0, -1, "B"] ], B: [ [0, 1, "C"], [1, -1, "B"] ], C: [ [1, 1, "D"], [0, -1, "A"] ], D: [ [1, -1, "E"], [1, -1, "F"] ], E: [ [1, -1, "A"], [0, -1, "D"] ], F: [ [1, 1, "A"], [1, -1, "E"] ], } aactions = { A: [[1,1,"B"],[0,-1,"B"]], B: [[1,-1,"A"],[1,1,"A"]], } for(var i = 0; i < 12629077; i++){ var action = actions[state][tape[pointer] ? 1 : 0]; //console.log(state, pointer, tape); tape[pointer] = action[0]; pointer += action[1]; state = action[2]; } console.log(tape); console.log(Object.keys(tape).map(a=>(tape[a])).reduce((a,b)=>(a+b)));