-
Questions about "Life Counter" mission
Hi everybody,
I am not sure if the assertions of this mission are correct. The first assertion has only 7 rows, while the picture in the mission shows 8 rows. If I add [0,0,0,0,0,0,0,0] to the initial state then the correct result will appear.
In the second example my algorithm returns 11 and not 15. I don't know why that is. 11 seems correct. Also there seems to be a row missing, too.
In the third example the result should be 4 and not 5. Here are the states: Initial: [0, 1, 0] [0, 0, 1] [1, 1, 1]
After 1st tick: [0, 0, 0] [1, 0, 1] [0, 1, 1]
After 2nd tick: [0, 0, 0] [0, 1, 1] [0, 1, 1]
And from now on nothing will change. So why should there be 5 alive cells after tick 50?
I hope someone can clarify what I am missunderstanding here?!?
Cheers, Hendrik
Here is my code:
"use strict"; function getLivingNeighbours(tempCells,position){ var sum = 0; for(var i=Math.max(position[0]-1,0);i<Math.min(position[0]+2,tempCells.length);i++){ for(var j=Math.max(position[1]-1,0);j<Math.min(position[1]+2, tempCells[i].length);j++){ if(i!==position[0] || j!==position[1]){ if(tempCells[i][j]===1){ sum++; } } } } return sum; } function getLivingCells(cells){ var sum = 0; for(var i=0;i<cells.length;i++){ for(var j=0;j<cells[i].length;j++){ if(cells[i][j]===1){ sum++; } } } console.log(sum); return sum; } function copyArray(a){ var b = []; for(var i=0;i<a.length;i++){ b[i] = []; for(var j=0;j<a[i].length;j++){ b[i].push(a[i][j]); } } return b; } function lifeCounter(cells, n) { var newCells = []; for(var nc = 0;nc<cells.length;nc++){ newCells.push([]); } for(var s=0;s<n;s++){ for(var i=0;i<cells.length;i++){ for(var j=0;j<cells[i].length;j++){ switch(cells[i][j]){ case 0: if((getLivingNeighbours(cells,[i,j])===3)){ newCells[i][j]=1; }else{ newCells[i][j]=0; } break; case 1: var neighbours = getLivingNeighbours(cells,[i,j]); if(neighbours<2 || neighbours >3){ newCells[i][j]=0; }else{ newCells[i][j]=1; } break; } } } cells = copyArray(newCells); console.log(cells); } return getLivingCells(cells); } var assert = require('assert'); if (!global.is_checking) { assert.equal(lifeCounter([[0, 1, 0, 0, 0, 0, 0], [0, 0, 1, 0, 0, 0, 0], [1, 1, 1, 0, 0, 0, 0], [0, 0, 0, 0, 0, 1, 1], [0, 0, 0, 0, 0, 1, 1], [0, 0, 0, 0, 0, 0, 0], [1, 1, 1, 0, 0, 0, 0]], 15), 14, "Little later"); assert.equal(lifeCounter([[0, 1, 0, 0, 0, 0, 0], [0, 0, 1, 0, 0, 0, 0], [1, 1, 1, 0, 0, 0, 0], [0, 0, 0, 0, 0, 1, 1], [0, 0, 0, 0, 0, 1, 1], [0, 0, 0, 0, 0, 0, 0], [1, 1, 1, 0, 0, 0, 0]], 4), 15, "Example"); assert.equal(lifeCounter([[0, 1, 0], [0, 0, 1], [1, 1, 1]], 50), 5, "Glider"); assert.equal(lifeCounter([[1, 1, 0, 1, 1], [1, 1, 0, 1, 1], [0, 0, 0, 0, 0], [1, 1, 0, 1, 1], [1, 1, 0, 1, 1]], 100), 16, "Stones"); console.log("Coding complete? Click 'Check' to review your tests and earn cool rewards!"); }