Mercurial > repos > icfp2012
changeset 41:20327ae2120b
merged.
author | William Morgan <bill@mrgn.org> |
---|---|
date | Sun, 15 Jul 2012 14:41:28 -0700 |
parents | f38437d22ebd (diff) 9bccdb3ac979 (current diff) |
children | 21b14768ea00 0c09730c173e |
files | src/sim.tp |
diffstat | 1 files changed, 31 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/src/sim.tp Sun Jul 15 14:27:21 2012 -0700 +++ b/src/sim.tp Sun Jul 15 14:41:28 2012 -0700 @@ -32,7 +32,7 @@ string <- idStr isrobot <- { false } eq <- :other { id = (other id) } - navigable <- { cannav } + navigable <- { cannav } } typedict set: (ret id) ret ret @@ -66,7 +66,7 @@ busted <- false mine <- null doCmd <- :cmd { - action <- commands get: cmd + action <- commands get: cmd withDefault: { null } action: } move <- :xDelta yDelta { @@ -120,6 +120,8 @@ nextGrid <- #[] _robot <- null endreached <- false + _lambdaCount <- 0 + _succeeded <- false ret <- #{ grid <- in_grid width <- in_width @@ -178,14 +180,35 @@ obj x!: (calcX: Index) obj y!: (calcY: Index) } + lambdaCount <- {_lambdaCount} water <- 0 flooding <- 0 waterproof <- 10 moves <- 0 ended <- {endreached} - succeeded <- false + succeeded <- {_succeeded} + succeeded! <- :newval { + endreached <- newval + _succeeded <- newval + } doUpdate <- { - true + foreach: grid :index value { + if: (value eq: (cellTypes rock)) { + x <- calcX: index + y <- calcY: index + below <- getCell: x (y - 1) + if: (below eq: (cellTypes empty)) { + setCell: x y (cellTypes empty) + setCell: x (y - 1) value + } + } else: { + if: (value eq: (cellTypes closedLift)) { + if: (_robot collected) = _lambdaCount { + grid set: index (cellTypes openLift) + } + } + } + } } advance <- :roboCmd { endreached <- roboCmd = "A" @@ -233,6 +256,10 @@ _robot <- el _robot mine!: ret ret updatePos: _robot index + } else: { + if: (el eq: (cellTypes lambda)) { + _lambdaCount <- _lambdaCount + 1 + } }