Mercurial > repos > icfp2012
annotate src/sim.tp @ 33:efa82c5e95c2
must commit, too late. does not compile.
author | William Morgan <bill@mrgn.org> |
---|---|
date | Sun, 15 Jul 2012 03:05:36 -0700 |
parents | 0a55ee387d69 |
children | ac0df071afe7 |
rev | line source |
---|---|
11
f28e465e9ee6
tried to unf*ck, ashamed rebarfing
William Morgan <bill@mrgn.org>
parents:
10
diff
changeset
|
1 { |
33
efa82c5e95c2
must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents:
32
diff
changeset
|
2 null <- #{} |
efa82c5e95c2
must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents:
32
diff
changeset
|
3 |
12 | 4 eachbyte <- :string action { |
5 strLen <- string byte_length: | |
6 index <- 0 | |
7 while: {index < strLen} do: { | |
8 element <- (string byte: index) | |
9 action: index element | |
10 index <- index + 1 | |
11 } | |
12 } | |
13 | |
25
a224dc43877f
major progress! ...robot always moves down though
William Morgan <bill@mrgn.org>
parents:
24
diff
changeset
|
14 debugLog <- :str { |
a224dc43877f
major progress! ...robot always moves down though
William Morgan <bill@mrgn.org>
parents:
24
diff
changeset
|
15 os write: 2 str |
a224dc43877f
major progress! ...robot always moves down though
William Morgan <bill@mrgn.org>
parents:
24
diff
changeset
|
16 } |
a224dc43877f
major progress! ...robot always moves down though
William Morgan <bill@mrgn.org>
parents:
24
diff
changeset
|
17 |
11
f28e465e9ee6
tried to unf*ck, ashamed rebarfing
William Morgan <bill@mrgn.org>
parents:
10
diff
changeset
|
18 makeCellTypes <- { |
31 | 19 typedict <- dict linear |
25
a224dc43877f
major progress! ...robot always moves down though
William Morgan <bill@mrgn.org>
parents:
24
diff
changeset
|
20 new <- :idStr { |
7
1bd46f854dbb
progress on sim, celltypes as objects
William Morgan <bill@mrgn.org>
parents:
6
diff
changeset
|
21 ret <- #{ |
25
a224dc43877f
major progress! ...robot always moves down though
William Morgan <bill@mrgn.org>
parents:
24
diff
changeset
|
22 id <- (idStr byte: 0) |
a224dc43877f
major progress! ...robot always moves down though
William Morgan <bill@mrgn.org>
parents:
24
diff
changeset
|
23 str <- idStr |
10 | 24 isrobot <- { false } |
7
1bd46f854dbb
progress on sim, celltypes as objects
William Morgan <bill@mrgn.org>
parents:
6
diff
changeset
|
25 } |
31 | 26 typedict set: (ret id) ret |
7
1bd46f854dbb
progress on sim, celltypes as objects
William Morgan <bill@mrgn.org>
parents:
6
diff
changeset
|
27 ret |
1bd46f854dbb
progress on sim, celltypes as objects
William Morgan <bill@mrgn.org>
parents:
6
diff
changeset
|
28 } |
11
f28e465e9ee6
tried to unf*ck, ashamed rebarfing
William Morgan <bill@mrgn.org>
parents:
10
diff
changeset
|
29 #{ |
13
c92633098f1d
simulator now properly parses map and accepts input until A is sent to it over stdin
Mike Pavone <pavone@retrodev.com>
parents:
12
diff
changeset
|
30 find <- :id { |
c92633098f1d
simulator now properly parses map and accepts input until A is sent to it over stdin
Mike Pavone <pavone@retrodev.com>
parents:
12
diff
changeset
|
31 if: id = ("R" byte: 0) { robot: } else: { |
31 | 32 typedict get: id withDefault: empty |
7
1bd46f854dbb
progress on sim, celltypes as objects
William Morgan <bill@mrgn.org>
parents:
6
diff
changeset
|
33 } |
11
f28e465e9ee6
tried to unf*ck, ashamed rebarfing
William Morgan <bill@mrgn.org>
parents:
10
diff
changeset
|
34 } |
f28e465e9ee6
tried to unf*ck, ashamed rebarfing
William Morgan <bill@mrgn.org>
parents:
10
diff
changeset
|
35 wall <- new: "#" |
f28e465e9ee6
tried to unf*ck, ashamed rebarfing
William Morgan <bill@mrgn.org>
parents:
10
diff
changeset
|
36 empty <- new: " " |
f28e465e9ee6
tried to unf*ck, ashamed rebarfing
William Morgan <bill@mrgn.org>
parents:
10
diff
changeset
|
37 earth <- new: "." |
f28e465e9ee6
tried to unf*ck, ashamed rebarfing
William Morgan <bill@mrgn.org>
parents:
10
diff
changeset
|
38 rock <- new: "*" |
f28e465e9ee6
tried to unf*ck, ashamed rebarfing
William Morgan <bill@mrgn.org>
parents:
10
diff
changeset
|
39 lambda <- new: "\\" |
33
efa82c5e95c2
must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents:
32
diff
changeset
|
40 closedLift <- new: "L" |
efa82c5e95c2
must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents:
32
diff
changeset
|
41 openLift <- new: "O" |
11
f28e465e9ee6
tried to unf*ck, ashamed rebarfing
William Morgan <bill@mrgn.org>
parents:
10
diff
changeset
|
42 newline <- new: "\n" |
f28e465e9ee6
tried to unf*ck, ashamed rebarfing
William Morgan <bill@mrgn.org>
parents:
10
diff
changeset
|
43 robot <- { |
33
efa82c5e95c2
must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents:
32
diff
changeset
|
44 ret <- #{ |
23 | 45 id <- ("R" byte: 0) |
25
a224dc43877f
major progress! ...robot always moves down though
William Morgan <bill@mrgn.org>
parents:
24
diff
changeset
|
46 str <- "R" |
23 | 47 x <- 0 |
48 y <- 0 | |
33
efa82c5e95c2
must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents:
32
diff
changeset
|
49 isrobot <- { true } |
efa82c5e95c2
must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents:
32
diff
changeset
|
50 collected <- 0 |
efa82c5e95c2
must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents:
32
diff
changeset
|
51 heldBreath <- 0 |
efa82c5e95c2
must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents:
32
diff
changeset
|
52 razors <- 0 |
efa82c5e95c2
must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents:
32
diff
changeset
|
53 busted <- false |
efa82c5e95c2
must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents:
32
diff
changeset
|
54 mine <- null |
efa82c5e95c2
must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents:
32
diff
changeset
|
55 doCmd <- :cmd { |
efa82c5e95c2
must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents:
32
diff
changeset
|
56 action <- commands get: cmd |
efa82c5e95c2
must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents:
32
diff
changeset
|
57 action: |
efa82c5e95c2
must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents:
32
diff
changeset
|
58 } |
efa82c5e95c2
must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents:
32
diff
changeset
|
59 move <- :xDelta yDelta { |
efa82c5e95c2
must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents:
32
diff
changeset
|
60 xPrime <- x + xDelta |
efa82c5e95c2
must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents:
32
diff
changeset
|
61 yPrime <- y + yDelta |
efa82c5e95c2
must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents:
32
diff
changeset
|
62 |
efa82c5e95c2
must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents:
32
diff
changeset
|
63 writeMove <- { |
23 | 64 mine setCell: xPrime yPrime self |
65 mine setCell: x y empty | |
25
a224dc43877f
major progress! ...robot always moves down though
William Morgan <bill@mrgn.org>
parents:
24
diff
changeset
|
66 x <- xPrime |
a224dc43877f
major progress! ...robot always moves down though
William Morgan <bill@mrgn.org>
parents:
24
diff
changeset
|
67 y <- yPrime |
23 | 68 } |
33
efa82c5e95c2
must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents:
32
diff
changeset
|
69 |
efa82c5e95c2
must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents:
32
diff
changeset
|
70 navigable <- { |
efa82c5e95c2
must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents:
32
diff
changeset
|
71 // need "any" and "all" functions... |
efa82c5e95c2
must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents:
32
diff
changeset
|
72 if: self = empty {true} else: { |
efa82c5e95c2
must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents:
32
diff
changeset
|
73 if: self = earth {true} else: { |
efa82c5e95c2
must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents:
32
diff
changeset
|
74 if: self = lambda {true} else: { |
efa82c5e95c2
must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents:
32
diff
changeset
|
75 if: self = openLift {true} else: { |
efa82c5e95c2
must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents:
32
diff
changeset
|
76 false }}}} |
efa82c5e95c2
must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents:
32
diff
changeset
|
77 } |
efa82c5e95c2
must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents:
32
diff
changeset
|
78 |
efa82c5e95c2
must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents:
32
diff
changeset
|
79 consequenceOf <- { |
efa82c5e95c2
must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents:
32
diff
changeset
|
80 if: self = lambda {collected <- collected + 1} |
efa82c5e95c2
must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents:
32
diff
changeset
|
81 if: self = openLift {mine succeeded!: true} |
efa82c5e95c2
must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents:
32
diff
changeset
|
82 } |
efa82c5e95c2
must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents:
32
diff
changeset
|
83 |
efa82c5e95c2
must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents:
32
diff
changeset
|
84 destination <- mine getCell: xPrime yPrime |
efa82c5e95c2
must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents:
32
diff
changeset
|
85 |
efa82c5e95c2
must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents:
32
diff
changeset
|
86 if: (destination navigable: ) { |
efa82c5e95c2
must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents:
32
diff
changeset
|
87 consequenceOf: destination |
efa82c5e95c2
must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents:
32
diff
changeset
|
88 writeMove: |
efa82c5e95c2
must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents:
32
diff
changeset
|
89 } else: { |
efa82c5e95c2
must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents:
32
diff
changeset
|
90 if: destination = rock { |
efa82c5e95c2
must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents:
32
diff
changeset
|
91 xPrimePrime <- xDelta * 2 + x |
efa82c5e95c2
must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents:
32
diff
changeset
|
92 rockDestination <- mine getCell: xPrimePrime y |
efa82c5e95c2
must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents:
32
diff
changeset
|
93 if: rockDestination = empty { |
efa82c5e95c2
must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents:
32
diff
changeset
|
94 mine setCell: xPrimePrime y rock |
efa82c5e95c2
must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents:
32
diff
changeset
|
95 writeMove: |
efa82c5e95c2
must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents:
32
diff
changeset
|
96 } |
efa82c5e95c2
must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents:
32
diff
changeset
|
97 } |
efa82c5e95c2
must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents:
32
diff
changeset
|
98 } |
efa82c5e95c2
must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents:
32
diff
changeset
|
99 |
13
c92633098f1d
simulator now properly parses map and accepts input until A is sent to it over stdin
Mike Pavone <pavone@retrodev.com>
parents:
12
diff
changeset
|
100 } |
7
1bd46f854dbb
progress on sim, celltypes as objects
William Morgan <bill@mrgn.org>
parents:
6
diff
changeset
|
101 } |
33
efa82c5e95c2
must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents:
32
diff
changeset
|
102 commands <- dict linear |
efa82c5e95c2
must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents:
32
diff
changeset
|
103 commands set: "L" {move: -1 0 } |
efa82c5e95c2
must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents:
32
diff
changeset
|
104 commands set: "R" {move: 1 0 } |
efa82c5e95c2
must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents:
32
diff
changeset
|
105 commands set: "U" {move: 0 1 } |
efa82c5e95c2
must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents:
32
diff
changeset
|
106 commands set: "D" {move: 0 -1 } |
efa82c5e95c2
must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents:
32
diff
changeset
|
107 //commands set: "A" {mine ended!: true} |
efa82c5e95c2
must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents:
32
diff
changeset
|
108 ret |
7
1bd46f854dbb
progress on sim, celltypes as objects
William Morgan <bill@mrgn.org>
parents:
6
diff
changeset
|
109 } |
1bd46f854dbb
progress on sim, celltypes as objects
William Morgan <bill@mrgn.org>
parents:
6
diff
changeset
|
110 } |
11
f28e465e9ee6
tried to unf*ck, ashamed rebarfing
William Morgan <bill@mrgn.org>
parents:
10
diff
changeset
|
111 } |
f28e465e9ee6
tried to unf*ck, ashamed rebarfing
William Morgan <bill@mrgn.org>
parents:
10
diff
changeset
|
112 #{ |
f28e465e9ee6
tried to unf*ck, ashamed rebarfing
William Morgan <bill@mrgn.org>
parents:
10
diff
changeset
|
113 |
f28e465e9ee6
tried to unf*ck, ashamed rebarfing
William Morgan <bill@mrgn.org>
parents:
10
diff
changeset
|
114 cellTypes <- makeCellTypes: |
5
be946b2a2cbc
initial barf into simulator file
William Morgan <bill@mrgn.org>
parents:
3
diff
changeset
|
115 |
be946b2a2cbc
initial barf into simulator file
William Morgan <bill@mrgn.org>
parents:
3
diff
changeset
|
116 state <- #{ |
6 | 117 new <- :in_grid in_width in_height { |
10 | 118 nextGrid <- #[] |
33
efa82c5e95c2
must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents:
32
diff
changeset
|
119 robot <- null |
13
c92633098f1d
simulator now properly parses map and accepts input until A is sent to it over stdin
Mike Pavone <pavone@retrodev.com>
parents:
12
diff
changeset
|
120 endreached <- false |
25
a224dc43877f
major progress! ...robot always moves down though
William Morgan <bill@mrgn.org>
parents:
24
diff
changeset
|
121 ret <- #{ |
8 | 122 grid <- in_grid |
5
be946b2a2cbc
initial barf into simulator file
William Morgan <bill@mrgn.org>
parents:
3
diff
changeset
|
123 width <- in_width |
be946b2a2cbc
initial barf into simulator file
William Morgan <bill@mrgn.org>
parents:
3
diff
changeset
|
124 height <- in_height |
23 | 125 calcIndex <- :x y { x + y * width } |
126 calcX <- :index {index % width} | |
127 calcY <- :index {index / width} | |
10 | 128 setCell <- :x y val { |
23 | 129 grid set: (calcIndex: x y) val |
5
be946b2a2cbc
initial barf into simulator file
William Morgan <bill@mrgn.org>
parents:
3
diff
changeset
|
130 } |
be946b2a2cbc
initial barf into simulator file
William Morgan <bill@mrgn.org>
parents:
3
diff
changeset
|
131 getCell <- :x y { |
23 | 132 grid get: (calcIndex: x y) |
133 } | |
134 updatePos <- :obj Index { | |
25
a224dc43877f
major progress! ...robot always moves down though
William Morgan <bill@mrgn.org>
parents:
24
diff
changeset
|
135 obj x!: (calcX: Index) |
a224dc43877f
major progress! ...robot always moves down though
William Morgan <bill@mrgn.org>
parents:
24
diff
changeset
|
136 obj y!: (calcY: Index) |
5
be946b2a2cbc
initial barf into simulator file
William Morgan <bill@mrgn.org>
parents:
3
diff
changeset
|
137 } |
7
1bd46f854dbb
progress on sim, celltypes as objects
William Morgan <bill@mrgn.org>
parents:
6
diff
changeset
|
138 water <- 0 |
1bd46f854dbb
progress on sim, celltypes as objects
William Morgan <bill@mrgn.org>
parents:
6
diff
changeset
|
139 flooding <- 0 |
1bd46f854dbb
progress on sim, celltypes as objects
William Morgan <bill@mrgn.org>
parents:
6
diff
changeset
|
140 waterproof <- 10 |
5
be946b2a2cbc
initial barf into simulator file
William Morgan <bill@mrgn.org>
parents:
3
diff
changeset
|
141 moves <- 0 |
13
c92633098f1d
simulator now properly parses map and accepts input until A is sent to it over stdin
Mike Pavone <pavone@retrodev.com>
parents:
12
diff
changeset
|
142 ended <- {endreached} |
33
efa82c5e95c2
must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents:
32
diff
changeset
|
143 succeeded <- false |
7
1bd46f854dbb
progress on sim, celltypes as objects
William Morgan <bill@mrgn.org>
parents:
6
diff
changeset
|
144 doUpdate <- { |
12 | 145 true |
7
1bd46f854dbb
progress on sim, celltypes as objects
William Morgan <bill@mrgn.org>
parents:
6
diff
changeset
|
146 } |
1bd46f854dbb
progress on sim, celltypes as objects
William Morgan <bill@mrgn.org>
parents:
6
diff
changeset
|
147 advance <- :roboCmd { |
13
c92633098f1d
simulator now properly parses map and accepts input until A is sent to it over stdin
Mike Pavone <pavone@retrodev.com>
parents:
12
diff
changeset
|
148 endreached <- roboCmd = "A" |
33
efa82c5e95c2
must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents:
32
diff
changeset
|
149 robot doCmd: roboCmd inMine: self |
6 | 150 moves <- moves + 1 |
7
1bd46f854dbb
progress on sim, celltypes as objects
William Morgan <bill@mrgn.org>
parents:
6
diff
changeset
|
151 doUpdate: |
25
a224dc43877f
major progress! ...robot always moves down though
William Morgan <bill@mrgn.org>
parents:
24
diff
changeset
|
152 self |
a224dc43877f
major progress! ...robot always moves down though
William Morgan <bill@mrgn.org>
parents:
24
diff
changeset
|
153 } |
a224dc43877f
major progress! ...robot always moves down though
William Morgan <bill@mrgn.org>
parents:
24
diff
changeset
|
154 printGrid <- { |
32 | 155 cur <- (grid length) - width |
156 col <- 0 | |
157 while: {cur >= 0} do: { | |
158 os write: 2 ((grid get: cur) str) | |
159 cur <- cur + 1 | |
160 col <- col + 1 | |
161 if: col = width { | |
162 col <- 0 | |
163 cur <- cur - (width + width) | |
25
a224dc43877f
major progress! ...robot always moves down though
William Morgan <bill@mrgn.org>
parents:
24
diff
changeset
|
164 os write: 2 "\n" |
23 | 165 } |
166 } | |
32 | 167 } |
5
be946b2a2cbc
initial barf into simulator file
William Morgan <bill@mrgn.org>
parents:
3
diff
changeset
|
168 } |
25
a224dc43877f
major progress! ...robot always moves down though
William Morgan <bill@mrgn.org>
parents:
24
diff
changeset
|
169 foreach: in_grid :index el{ |
a224dc43877f
major progress! ...robot always moves down though
William Morgan <bill@mrgn.org>
parents:
24
diff
changeset
|
170 nextGrid append: el |
33
efa82c5e95c2
must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents:
32
diff
changeset
|
171 if: (el isrobot) { |
25
a224dc43877f
major progress! ...robot always moves down though
William Morgan <bill@mrgn.org>
parents:
24
diff
changeset
|
172 robot <- el |
33
efa82c5e95c2
must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents:
32
diff
changeset
|
173 robot mine!: ret |
25
a224dc43877f
major progress! ...robot always moves down though
William Morgan <bill@mrgn.org>
parents:
24
diff
changeset
|
174 ret updatePos: robot index |
30
031d46ff76a9
minor clean up to use 'if' and 'not'
William Morgan <bill@mrgn.org>
parents:
29
diff
changeset
|
175 } |
33
efa82c5e95c2
must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents:
32
diff
changeset
|
176 |
efa82c5e95c2
must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents:
32
diff
changeset
|
177 |
efa82c5e95c2
must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents:
32
diff
changeset
|
178 // adding a 'new' method to robot and doing this instead |
efa82c5e95c2
must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents:
32
diff
changeset
|
179 // wolud allow me to treat robots and other cellTypes equaly |
efa82c5e95c2
must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents:
32
diff
changeset
|
180 // particularly for adding methods or state to other cellTypess. |
efa82c5e95c2
must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents:
32
diff
changeset
|
181 // |
efa82c5e95c2
must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents:
32
diff
changeset
|
182 // if: (el = (cellTypes robot)) { |
efa82c5e95c2
must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents:
32
diff
changeset
|
183 // robot <- el new: |
efa82c5e95c2
must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents:
32
diff
changeset
|
184 // (ret grid) set: index robot |
efa82c5e95c2
must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents:
32
diff
changeset
|
185 // robot mine!: ret |
efa82c5e95c2
must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents:
32
diff
changeset
|
186 // ret updatePos: robot index |
efa82c5e95c2
must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents:
32
diff
changeset
|
187 // nextGrid append: el |
efa82c5e95c2
must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents:
32
diff
changeset
|
188 // } else: { |
efa82c5e95c2
must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents:
32
diff
changeset
|
189 // nextGrid append: el |
efa82c5e95c2
must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents:
32
diff
changeset
|
190 // } |
efa82c5e95c2
must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents:
32
diff
changeset
|
191 |
25
a224dc43877f
major progress! ...robot always moves down though
William Morgan <bill@mrgn.org>
parents:
24
diff
changeset
|
192 } |
a224dc43877f
major progress! ...robot always moves down though
William Morgan <bill@mrgn.org>
parents:
24
diff
changeset
|
193 ret |
5
be946b2a2cbc
initial barf into simulator file
William Morgan <bill@mrgn.org>
parents:
3
diff
changeset
|
194 } |
32 | 195 |
5
be946b2a2cbc
initial barf into simulator file
William Morgan <bill@mrgn.org>
parents:
3
diff
changeset
|
196 fromStr <- :str { |
be946b2a2cbc
initial barf into simulator file
William Morgan <bill@mrgn.org>
parents:
3
diff
changeset
|
197 strLen <- str byte_length: |
13
c92633098f1d
simulator now properly parses map and accepts input until A is sent to it over stdin
Mike Pavone <pavone@retrodev.com>
parents:
12
diff
changeset
|
198 maxCol <- 0 |
c92633098f1d
simulator now properly parses map and accepts input until A is sent to it over stdin
Mike Pavone <pavone@retrodev.com>
parents:
12
diff
changeset
|
199 nl <- (cellTypes newline) id |
c92633098f1d
simulator now properly parses map and accepts input until A is sent to it over stdin
Mike Pavone <pavone@retrodev.com>
parents:
12
diff
changeset
|
200 blank <- cellTypes empty |
32 | 201 lines <- #[] |
202 curline <- #[] | |
12 | 203 eachbyte: str :index element { |
13
c92633098f1d
simulator now properly parses map and accepts input until A is sent to it over stdin
Mike Pavone <pavone@retrodev.com>
parents:
12
diff
changeset
|
204 if: element = nl { |
32 | 205 col <- curline length |
33
efa82c5e95c2
must commit, too late. does not compile.
William Morgan <bill@mrgn.org>
parents:
32
diff
changeset
|
206 maxCol <- if: col > maxCol {col} else: {maxCol} |
32 | 207 lines append: curline |
208 curline <- #[] | |
10 | 209 } else: { |
32 | 210 curline append: (cellTypes find: element) |
10 | 211 } |
212 } | |
13
c92633098f1d
simulator now properly parses map and accepts input until A is sent to it over stdin
Mike Pavone <pavone@retrodev.com>
parents:
12
diff
changeset
|
213 grid <- #[] |
32 | 214 cur <- (lines length) - 1 |
215 while: { cur >= 0 } do: { | |
216 curline <- (lines get: cur) | |
217 foreach: curline :idx el { | |
218 grid append: el | |
5
be946b2a2cbc
initial barf into simulator file
William Morgan <bill@mrgn.org>
parents:
3
diff
changeset
|
219 } |
32 | 220 extra <- maxCol - (curline length) |
221 while: { extra > 0 } do: { | |
222 grid append: blank | |
223 extra <- extra - 1 | |
224 } | |
225 cur <- cur - 1 | |
5
be946b2a2cbc
initial barf into simulator file
William Morgan <bill@mrgn.org>
parents:
3
diff
changeset
|
226 } |
32 | 227 new: grid maxCol (lines length) |
5
be946b2a2cbc
initial barf into simulator file
William Morgan <bill@mrgn.org>
parents:
3
diff
changeset
|
228 } |
be946b2a2cbc
initial barf into simulator file
William Morgan <bill@mrgn.org>
parents:
3
diff
changeset
|
229 } |
be946b2a2cbc
initial barf into simulator file
William Morgan <bill@mrgn.org>
parents:
3
diff
changeset
|
230 |
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:
14
diff
changeset
|
231 readFd <- :fd { |
8 | 232 if: fd < 0 { "" } else: { |
233 cur <- "" | |
234 part <- "" | |
235 while: { | |
236 part <- os read: fd 128 | |
237 part != "" | |
238 } do: { | |
239 cur <- cur . part | |
240 } | |
241 cur | |
242 } | |
243 } | |
244 | |
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:
14
diff
changeset
|
245 readFile <- :path { |
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:
14
diff
changeset
|
246 fd <- os open: path (os O_RDONLY) |
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:
14
diff
changeset
|
247 out <- readFd: fd |
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:
14
diff
changeset
|
248 os close: fd |
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:
14
diff
changeset
|
249 out |
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:
14
diff
changeset
|
250 } |
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:
14
diff
changeset
|
251 |
8 | 252 getMove <- { |
29 | 253 ret <- os read: 0 1 |
254 while: {ret = "\n"} do: { | |
255 ret <- os read: 0 1 | |
256 } | |
257 ret | |
3
bb29dcd46cbf
Put dummy code in placeholder source files. Create makefile.
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
258 } |
5
be946b2a2cbc
initial barf into simulator file
William Morgan <bill@mrgn.org>
parents:
3
diff
changeset
|
259 |
8 | 260 main <- :args { |
261 if: (args length) < 2 { | |
262 print: "usage: sim filename\n" | |
263 } else: { | |
25
a224dc43877f
major progress! ...robot always moves down though
William Morgan <bill@mrgn.org>
parents:
24
diff
changeset
|
264 verbose <- true |
8 | 265 text <- readFile: (args get: 1) |
14 | 266 print: text |
17 | 267 os close: 1 |
8 | 268 simState <- state fromStr: text |
30
031d46ff76a9
minor clean up to use 'if' and 'not'
William Morgan <bill@mrgn.org>
parents:
29
diff
changeset
|
269 while: { not: (simState ended: ) } do: { |
8 | 270 simState advance: (getMove: ) |
25
a224dc43877f
major progress! ...robot always moves down though
William Morgan <bill@mrgn.org>
parents:
24
diff
changeset
|
271 if: verbose { |
a224dc43877f
major progress! ...robot always moves down though
William Morgan <bill@mrgn.org>
parents:
24
diff
changeset
|
272 simState printGrid |
a224dc43877f
major progress! ...robot always moves down though
William Morgan <bill@mrgn.org>
parents:
24
diff
changeset
|
273 } |
8 | 274 } |
5
be946b2a2cbc
initial barf into simulator file
William Morgan <bill@mrgn.org>
parents:
3
diff
changeset
|
275 } |
be946b2a2cbc
initial barf into simulator file
William Morgan <bill@mrgn.org>
parents:
3
diff
changeset
|
276 } |
8 | 277 |
3
bb29dcd46cbf
Put dummy code in placeholder source files. Create makefile.
Mike Pavone <pavone@retrodev.com>
parents:
0
diff
changeset
|
278 } |
11
f28e465e9ee6
tried to unf*ck, ashamed rebarfing
William Morgan <bill@mrgn.org>
parents:
10
diff
changeset
|
279 } |