javascript矩阵操作不起作用
javascript matrix manipulation is not working
这是"代码的出现"中问题的错误编码解决方案:问题的链接
我不知道原因,因为我的代码工作不正常,我有一个与正则表达式有关的错误,因为我没有重置regexp对象的指针,现在我想这个错误已经修复了,但据我所知,我做得不好。
问题是我的代码显示的解决方案不正确,你可以在我提供的链接上提交解决方案,并获得你的解决方案的反馈。
正确的解决方案:543903给定解决方案:418954
// day 6 of advent of code
var input = "removed, take from problem";
function processInput(input, matrix) {
var linesOfInput = input.split("'n");
var matches;
var turnOnRE = /turn on ('d+),('d+).*?('d+),('d+)/g;
var turnOffRE = /turn off ('d+),('d+).*?('d+),('d+)/g;
var toggleRE = /toggle ('d+),('d+).*?('d+),('d+)/g;
// regular expression objects lastIndex property must be 'reseted' in order to work well
for (var i = 0 ; i < linesOfInput.length; i++) {
turnOnRE.lastIndex = 0;
turnOffRE.lastIndex = 0;
toggleRE.lastIndex = 0;
matches = turnOnRE.exec(linesOfInput[i]);
if (matches != null) {
manipulateLights(matrix, matches[1], matches[2], matches[3], matches[4], true);
continue;
}
matches = turnOffRE.exec(linesOfInput[i]);
if (matches != null) {
manipulateLights(matrix, matches[1], matches[2], matches[3], matches[4], false);
continue;
}
matches = toggleRE.exec(linesOfInput[i]);
manipulateLights(matrix, matches[1], matches[2], matches[3], matches[4]);
}
}
function manipulateLights(matrix, startI, startJ, endI, endJ, newValue) {
if (newValue == undefined) { // toogle
for (var i = startI ; i <= endI; i++) {
for (var j = startJ ; j <= endJ; j++) {
matrix[i][j] = !matrix[i][j];
}
}
console.log(startI, startJ, endI, endJ, newValue);
} else {
for (var i = startI ; i <= endI; i++) {
for (var j = startJ ; j <= endJ; j++) {
matrix[i][j] = newValue;
}
}
console.log(startI, startJ, endI, endJ, newValue);
}
console.log(countTurnedOnLights(matrix));
}
function countTurnedOnLights(matrix) {
var turnedOn = 0;
for (var i = 0 ; i < matrixWidth; i++) {
for (var j = 0 ; j < matrixHeigth; j++) {
if (matrix[i][j] == true) {
turnedOn++;
}
}
}
return turnedOn;
}
var matrixHeigth = 1000;
var matrixWidth = 1000;
// define a bidimensional array, is almost like in C++
var lightMatrix = new Array(matrixWidth);
for (var i = 0 ; i < matrixWidth; i++) {
lightMatrix[i] = new Array(matrixHeigth);
}
// turn off all lights
for (var i = 0 ; i < matrixWidth; i++) {
for (var j = 0 ; j < matrixHeigth; j++) {
lightMatrix[i][j] = false;
}
}
processInput(input, lightMatrix);
console.log(countTurnedOnLights(lightMatrix));
好的,我发现了错误——当你第一次创建for循环时,正则表达式匹配被视为字符串。
for (var i = startI ; i <= endI; i++) {
for (var j = startJ ; j <= endJ; j++) {
当你打出756,53到923339这样的组合时,它会认为53>339,然后立即退出循环。在for循环中,用Number()包装每个"start"变量,或者在传递参数时这样做。
相关文章:
- ZF:js 被识别,但在操作视图中不起作用
- 单击时的javascript操作不起作用
- 如何调试不起作用的AJAX操作
- 是jQuery 1.3.2导致此操作不起作用,还是其他原因
- Javascript数学不起作用,更好的方式来执行操作
- 自定义主干.模型操作不起作用
- 全日历日单击不起作用(不执行任何操作)
- Ember.js身份验证操作不起作用
- 三元操作 JS 不起作用
- HTML 按钮操作在 Safari 中不起作用
- javascript 函数中的表单操作不起作用
- Javascript对象数组到MVC操作几乎不起作用,但不是完全
- jQuery setTimeout:行上的第一个操作不起作用
- JQuery TableSorter 单击操作不起作用
- 当表单操作使用Apache Shiro转到jsp页面时,onClick不起作用
- 具有默认“监视”操作的FB打开图形脚本不起作用
- JQuery 在创建 DOM 元素后执行某些操作 - DOMNodeInsert 不起作用
- AJAX 调用不起作用,查找错误的操作
- CSS 样式操作:Javascript 不起作用
- 数据库操作后,Ajax 功能不起作用