# HG changeset patch # User Oleksandr Gavenko # Date 1411427192 -10800 # Node ID b7b5e4a03e4be8cd5025336889c87824f43dbc81 # Parent 653ee00d2601fe8fd18124917a61d658e94baee2 Speedup score calculation. diff -r 653ee00d2601 -r b7b5e4a03e4b board.js --- a/board.js Tue Sep 23 01:33:10 2014 +0300 +++ b/board.js Tue Sep 23 02:06:32 2014 +0300 @@ -838,41 +838,30 @@ if (brd.da === 0) cnt++; if (brd.db === 0) cnt++; if (brd.dc === 0) cnt++; if (brd.dd === 0) cnt++; return cnt; } +BoardObj.scoreLookup = [0]; // [ 0, 4, 16, 48, 128, 320, 768, 1792, 4096, 9216, 20480, 45056, 98304]; +(function() { + for (var i = 1; i < 16; i++) + BoardObj.scoreLookup[i] = (i-1)*(1 << i); +})(); BoardObj.prototype.score = function() { - var score = 0; var brd = this.brd; - var v = brd.aa; - if (v > 1) score += (v-1)*(1 << v); - var v = brd.ab; - if (v > 1) score += (v-1)*(1 << v); - var v = brd.ac; - if (v > 1) score += (v-1)*(1 << v); - var v = brd.ad; - if (v > 1) score += (v-1)*(1 << v); - var v = brd.ba; - if (v > 1) score += (v-1)*(1 << v); - var v = brd.bb; - if (v > 1) score += (v-1)*(1 << v); - var v = brd.bc; - if (v > 1) score += (v-1)*(1 << v); - var v = brd.bd; - if (v > 1) score += (v-1)*(1 << v); - var v = brd.ca; - if (v > 1) score += (v-1)*(1 << v); - var v = brd.cb; - if (v > 1) score += (v-1)*(1 << v); - var v = brd.cc; - if (v > 1) score += (v-1)*(1 << v); - var v = brd.cd; - if (v > 1) score += (v-1)*(1 << v); - var v = brd.da; - if (v > 1) score += (v-1)*(1 << v); - var v = brd.db; - if (v > 1) score += (v-1)*(1 << v); - var v = brd.dc; - if (v > 1) score += (v-1)*(1 << v); - var v = brd.dd; - if (v > 1) score += (v-1)*(1 << v); + var lookup = BoardObj.scoreLookup; + var score = lookup[brd.aa]; + score += lookup[brd.ab]; + score += lookup[brd.ac]; + score += lookup[brd.ad]; + score += lookup[brd.ba]; + score += lookup[brd.bb]; + score += lookup[brd.bc]; + score += lookup[brd.bd]; + score += lookup[brd.ca]; + score += lookup[brd.cb]; + score += lookup[brd.cc]; + score += lookup[brd.cd]; + score += lookup[brd.da]; + score += lookup[brd.db]; + score += lookup[brd.dc]; + score += lookup[brd.dd]; return score; } BoardObj.prototype.max = function() {