是否有类似代数的工具可以将代码降低到有效的程度?

时间:2015-08-10 21:44:50

标签: javascript

例如,我正在进行http://eloquentjavascript.net练习,其中一个教程是创建输出:

 # # # #
# # # # 
 # # # #
# # # # 
 # # # #
# # # # 
 # # # #
# # # # 

给出的答案是:

var size = 8;

var board = "";

for (var y = 0; y < size; y++) {
  for (var x = 0; x < size; x++) {
    if ((x + y) % 2 == 0)
      board += " ";
    else
      board += "#";
  }
  board += "\n";
}

console.log(board);

我的回答是:

var tile = "#";
var piece = "";
var switche = false;
var columns = prompt("enter number of columns","");
var rows = prompt("enter number of rows","");

var lastPiece = "blank";

for (var x = 0; x < columns; x++)
{

    if (lastPiece == "#") 
    {
        piece += tile;
        lastPiece = "blank";
    }

    else if (lastPiece == "blank") 
    {
        piece += " ";
        lastPiece = "#";
    }
 var row1 = piece; 
}

var lastPiece = "#";
var piece = "";

for (var x = 0; x < columns; x++) 
{

    if (lastPiece == "#") 
    {

        piece += tile;
        lastPiece = "blank";
    }

    else if (lastPiece == "blank") 
    {
        piece += " ";
        lastPiece = "#";
    }
var row2 = piece;

}

for (var i = 1; i <= rows; i++) 
{
if (!switche){
    document.write('&nbsp;'+ row1 + '<br>');
    switche = true;}
    else if(switche){
    document.write('&nbsp;' + row2 + '<br>');
    switche = false;}
}

我没有经验,但我已经看到将来会有很多人写不必要的代码。是否有一些好的方法来防止这种或工具?

2 个答案:

答案 0 :(得分:1)

(Un?)肯定没有可用于优化某些任意JS代码的工具,你的大脑就是你真正需要的东西(正如Greg Hewgill所说)。

正如一个挑剔,下面是一个代码,它应该比给定的练习答案更有效。

&#13;
&#13;
var line = ' # # # #',
    n,
    str = '';
for (n = 0; n < 8; n++) {
     str += ((n % 2 === 0) ? line : line.trim()) + '\n';
}
console.log(str); // Could be also put as element.innerHTML when replacing \n with <br> and replacing the leading space in line with &nbsp;
&#13;
&#13;
&#13;

答案 1 :(得分:1)

我认为有效率取决于你的意思。显然,只需打印输出就是你所能做到的“最快”:

console.log(“#### n ##### n #### n #### n ##### n ## ### n #### n ############################################### ##“)//没有什么会因为速度而打败这个。

但是,您也可以使用不同的含义来提高效率:程序占用多少空间。理想情况下,我们希望它占用的空间少于输出。上面的程序虽然非常快,但却比输出多占用了13个字符(那你为什么不直接存储输出呢?)。如果我们稍微调整一下:

a =“##### n #### n”; 的console.log([,,,,,]。加入(a))的

现在,我们已经从原始输出大小中保存了整整16个字符。它当然比我们原来的“只打印答案”解决方案慢。

计算机始终能够找到我们的顶级解决方案“非常困难”。但是,计算机有时可以优化它,并且不会更改实际代码(在引擎盖下)。