Mercurial > repos > icfp2012
comparison src/sim.tp @ 65:aa822c683e28
merge
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Mon, 16 Jul 2012 04:35:43 -0700 |
parents | ff2b38518a58 ca86c88c2336 |
children | ff8d7b4499f5 |
comparison
equal
deleted
inserted
replaced
64:3d058b4889a2 | 65:aa822c683e28 |
---|---|
131 _robot <- null | 131 _robot <- null |
132 _ended <- false | 132 _ended <- false |
133 _maxmoves <- in_width * in_height | 133 _maxmoves <- in_width * in_height |
134 _heuristicValid <- false | 134 _heuristicValid <- false |
135 _heuristic <- 0 | 135 _heuristic <- 0 |
136 getSafe <- :collection :index { | |
137 if: index >= 0 { | |
138 if: index < (collection length) { | |
139 collection get: index | |
140 } else: { (cellTypes wall) } | |
141 } else: { (cellTypes wall) } | |
142 } | |
136 _succeeded <- false | 143 _succeeded <- false |
137 ret <- #{ | 144 ret <- #{ |
138 grid <- in_grid | 145 grid <- in_grid |
139 width <- in_width | 146 width <- in_width |
140 height <- in_height | 147 height <- in_height |
141 calcIndex <- :x y { x + y * width } | 148 calcIndex <- :x y { x + y * width } |
142 calcX <- :index {index % width} | 149 calcX <- :index {index % width} |
143 calcY <- :index {index / width} | 150 calcY <- :index {index / width} |
144 getCell <- :x y { | 151 getCell <- :x y { |
145 grid get: (calcIndex: x y) | 152 grid getSafe: (calcIndex: x y) |
146 } | 153 } |
147 setCell <- :x y val { | 154 setCell <- :x y val { |
148 grid set: (calcIndex: x y) val | 155 grid set: (calcIndex: x y) val |
149 } | 156 } |
150 getNextCell <- :x y { | 157 getNextCell <- :x y { |
151 _nextGrid get: (calcIndex: x y) | 158 _nextGrid getSafe: (calcIndex: x y) |
152 } | 159 } |
153 setNextCell <- :x y val { | 160 setNextCell <- :x y val { |
154 _nextGrid set: (calcIndex: x y) val | 161 _nextGrid set: (calcIndex: x y) val |
155 } | 162 } |
156 validDest?:from <- :index :fromIndex { | 163 validDest?:from <- :index :fromIndex { |
157 cell <- (grid get: index) | 164 cell <- (grid getSafe: index) |
158 if: (cell navigable) {true} else: { | 165 if: (cell navigable) {true} else: { |
159 if: (cell eq: (cellTypes rock)) { | 166 if: (cell eq: (cellTypes rock)) { |
160 diff <- index - fromIndex | 167 diff <- index - fromIndex |
161 //make sure movement was horizontal | 168 //make sure movement was horizontal |
162 if: (abs: diff) = 1 { | 169 if: (abs: diff) = 1 { |
163 rockdest <- index + diff | 170 rockdest <- index + diff |
164 if: ((grid get: rockdest) eq: (cellTypes empty)) { | 171 if: ((grid getSafe: rockdest) eq: (cellTypes empty)) { |
165 //make sure rock destination doesn't wrap | 172 //make sure rock destination doesn't wrap |
166 (calcY: rockdest) = (calcY: index) | 173 (calcY: rockdest) = (calcY: index) |
167 } | 174 } |
168 } | 175 } |
169 } | 176 } |
375 } | 382 } |
376 printGrid <- { | 383 printGrid <- { |
377 cur <- (grid length) - width | 384 cur <- (grid length) - width |
378 col <- 0 | 385 col <- 0 |
379 while: {cur >= 0} do: { | 386 while: {cur >= 0} do: { |
380 os write: 2 ((grid get: cur) string) | 387 os write: 2 ((grid getSafe: cur) string) |
381 cur <- cur + 1 | 388 cur <- cur + 1 |
382 col <- col + 1 | 389 col <- col + 1 |
383 if: col = width { | 390 if: col = width { |
384 col <- 0 | 391 col <- 0 |
385 cur <- cur - (width + width) | 392 cur <- cur - (width + width) |