Mercurial > repos > icfp2012
annotate src/lifter.tp @ 39:9bccdb3ac979
Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Sun, 15 Jul 2012 14:27:21 -0700 |
parents | f7a1daaec925 |
children | 0c09730c173e |
rev | line source |
---|---|
3
bb29dcd46cbf
Put dummy code in placeholder source files. Create makefile.
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
1 #{ |
39
9bccdb3ac979
Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents:
31
diff
changeset
|
2 pqueue <- { |
9bccdb3ac979
Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents:
31
diff
changeset
|
3 normalnode <- :pri val { |
9bccdb3ac979
Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents:
31
diff
changeset
|
4 #{ |
9bccdb3ac979
Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents:
31
diff
changeset
|
5 priority <- pri |
9bccdb3ac979
Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents:
31
diff
changeset
|
6 value <- val |
9bccdb3ac979
Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents:
31
diff
changeset
|
7 next <- false |
9bccdb3ac979
Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents:
31
diff
changeset
|
8 higherPriority? <- :other { |
9bccdb3ac979
Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents:
31
diff
changeset
|
9 priority > (other priority) |
9bccdb3ac979
Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents:
31
diff
changeset
|
10 } |
9bccdb3ac979
Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents:
31
diff
changeset
|
11 if:else <- :self trueblock :elseblock { |
9bccdb3ac979
Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents:
31
diff
changeset
|
12 trueblock: |
9bccdb3ac979
Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents:
31
diff
changeset
|
13 } |
9bccdb3ac979
Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents:
31
diff
changeset
|
14 } |
9bccdb3ac979
Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents:
31
diff
changeset
|
15 } |
9bccdb3ac979
Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents:
31
diff
changeset
|
16 head <- #{ |
9bccdb3ac979
Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents:
31
diff
changeset
|
17 higherPriority? <- :other {false} |
9bccdb3ac979
Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents:
31
diff
changeset
|
18 next <- { self } |
9bccdb3ac979
Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents:
31
diff
changeset
|
19 value <- { false } |
9bccdb3ac979
Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents:
31
diff
changeset
|
20 } |
9bccdb3ac979
Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents:
31
diff
changeset
|
21 #{ |
9bccdb3ac979
Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents:
31
diff
changeset
|
22 take <- { |
9bccdb3ac979
Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents:
31
diff
changeset
|
23 cur <- head |
9bccdb3ac979
Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents:
31
diff
changeset
|
24 head <- cur next |
9bccdb3ac979
Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents:
31
diff
changeset
|
25 cur value |
9bccdb3ac979
Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents:
31
diff
changeset
|
26 } |
9bccdb3ac979
Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents:
31
diff
changeset
|
27 insert:atPriority <- :val pri { |
9bccdb3ac979
Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents:
31
diff
changeset
|
28 node <- normalnode: pri val |
9bccdb3ac979
Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents:
31
diff
changeset
|
29 cur <- head |
9bccdb3ac979
Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents:
31
diff
changeset
|
30 last <- false |
9bccdb3ac979
Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents:
31
diff
changeset
|
31 while: {cur higherPriority?: node} do: { |
9bccdb3ac979
Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents:
31
diff
changeset
|
32 last <- cur |
9bccdb3ac979
Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents:
31
diff
changeset
|
33 cur <- cur next |
9bccdb3ac979
Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents:
31
diff
changeset
|
34 } |
9bccdb3ac979
Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents:
31
diff
changeset
|
35 if: last { |
9bccdb3ac979
Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents:
31
diff
changeset
|
36 node next!: (last next) |
9bccdb3ac979
Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents:
31
diff
changeset
|
37 last next!: node |
9bccdb3ac979
Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents:
31
diff
changeset
|
38 } else: { |
9bccdb3ac979
Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents:
31
diff
changeset
|
39 node next!: head |
9bccdb3ac979
Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents:
31
diff
changeset
|
40 head <- node |
9bccdb3ac979
Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents:
31
diff
changeset
|
41 } |
9bccdb3ac979
Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents:
31
diff
changeset
|
42 self |
9bccdb3ac979
Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents:
31
diff
changeset
|
43 } |
9bccdb3ac979
Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents:
31
diff
changeset
|
44 } |
9bccdb3ac979
Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents:
31
diff
changeset
|
45 } |
9bccdb3ac979
Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents:
31
diff
changeset
|
46 |
31 | 47 abs <- :val { |
48 if: val < 0 { 0 - val } else: { val } | |
49 } | |
50 | |
51 distanceFrom:to <- :sx sy :dx dy { | |
52 (abs: sx - dx) + (abs: sy - dy) | |
53 } | |
54 | |
3
bb29dcd46cbf
Put dummy code in placeholder source files. Create makefile.
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
55 main <- { |
20
50a456168c25
Split readFd out of readFile for use in lifter. Add code to read map from stdin to lifter using code in sim
Mike Pavone <pavone@retrodev.com>
parents:
3
diff
changeset
|
56 text <- sim readFd: 0 |
50a456168c25
Split readFd out of readFile for use in lifter. Add code to read map from stdin to lifter using code in sim
Mike Pavone <pavone@retrodev.com>
parents:
3
diff
changeset
|
57 playfield <- (sim state) fromStr: text |
50a456168c25
Split readFd out of readFile for use in lifter. Add code to read map from stdin to lifter using code in sim
Mike Pavone <pavone@retrodev.com>
parents:
3
diff
changeset
|
58 os write: 2 text |
50a456168c25
Split readFd out of readFile for use in lifter. Add code to read map from stdin to lifter using code in sim
Mike Pavone <pavone@retrodev.com>
parents:
3
diff
changeset
|
59 os write: 2 "width: " . (string: (playfield width)) . "\n" |
50a456168c25
Split readFd out of readFile for use in lifter. Add code to read map from stdin to lifter using code in sim
Mike Pavone <pavone@retrodev.com>
parents:
3
diff
changeset
|
60 os write: 2 "height: " . (string: (playfield height)) . "\n" |
39
9bccdb3ac979
Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents:
31
diff
changeset
|
61 me <-playfield getRobot |
9bccdb3ac979
Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents:
31
diff
changeset
|
62 os write: 2 "robot x: " . (me x) . " y: " . (me y) . "\n" |
9bccdb3ac979
Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents:
31
diff
changeset
|
63 neighbors <- playfield validMoves: (me x) (me y) |
9bccdb3ac979
Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents:
31
diff
changeset
|
64 foreach: neighbors :idx move { |
9bccdb3ac979
Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents:
31
diff
changeset
|
65 os write: 2 "move: " . move . "\n" |
9bccdb3ac979
Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents:
31
diff
changeset
|
66 curfield <- playfield clone |
9bccdb3ac979
Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents:
31
diff
changeset
|
67 curfield advance: (move cmd) |
9bccdb3ac979
Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents:
31
diff
changeset
|
68 curfield printGrid |
9bccdb3ac979
Add priority queue implementation to lifter. Add methods for cloning playfield and determining valid moves.
Mike Pavone <pavone@retrodev.com>
parents:
31
diff
changeset
|
69 } |
3
bb29dcd46cbf
Put dummy code in placeholder source files. Create makefile.
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
70 } |
bb29dcd46cbf
Put dummy code in placeholder source files. Create makefile.
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
71 } |