@@ -41,6 +41,12 @@ class @Grid
41
41
grid[sourceRow][sourceCol] = 0
42
42
43
43
nextGrid = new Grid (grid, emptyPos)
44
+
45
+ number = grid[targetRow][targetCol]
46
+ nextGrid ._lowerSolutionBound = @ lowerSolutionBound () -
47
+ rectilinearDistance (number, sourceRow, sourceCol) +
48
+ rectilinearDistance (number, targetRow, targetCol)
49
+
44
50
return nextGrid
45
51
46
52
applyMoves : (sourceDirections ) ->
@@ -59,20 +65,24 @@ class @Grid
59
65
from where each number is to where it should
60
66
be
61
67
###
62
- moveCount = 0
68
+ if not @_lowerSolutionBound ?
69
+
70
+ moveCount = 0
71
+
72
+ for rowNum of @grid
73
+ rowNum = parseInt (rowNum, 10 )
74
+ for colNum of @grid [rowNum]
75
+ colNum = parseInt (colNum, 10 )
63
76
64
- for rowNum of @grid
65
- rowNum = parseInt (rowNum, 10 )
66
- for colNum of @grid [rowNum]
67
- colNum = parseInt (colNum, 10 )
77
+ number = @grid [rowNum][colNum]
68
78
69
- number = @grid [rowNum][colNum]
79
+ continue if number == 0
70
80
71
- continue if number == 0
81
+ moveCount += rectilinearDistance number, rowNum, colNum
72
82
73
- moveCount += rectilinearDistance number, rowNum, colNum
83
+ @_lowerSolutionBound = moveCount
74
84
75
- return moveCount
85
+ return @_lowerSolutionBound
76
86
77
87
log : ->
78
88
console .log " Empty: #{ @emptyPos } "
0 commit comments