Skip to content

Commit 2d12f82

Browse files
committed
geological battery scenario
1 parent 44c2e60 commit 2d12f82

File tree

2 files changed

+290
-0
lines changed

2 files changed

+290
-0
lines changed
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
2+
def doN = \n. \f. if (n > 0) {f; doN (n - 1) f} {}; end;
3+
4+
def moveUntilBlocked =
5+
b <- blocked;
6+
if b {} {move; moveUntilBlocked}
7+
end;
8+
9+
def drillUntilStuck : cmd (unit + text) =
10+
try {
11+
maybeRetrieved <- drill forward;
12+
case maybeRetrieved (\_. return $ inL ()) (\_.
13+
move;
14+
drillUntilStuck;
15+
);
16+
return maybeRetrieved;
17+
} {
18+
return $ inL ();
19+
}
20+
end;
21+
22+
def go =
23+
turn west;
24+
doN 47 move;
25+
turn right;
26+
27+
doN 6 (
28+
moveUntilBlocked;
29+
maybeItem <- drillUntilStuck;
30+
31+
case maybeItem return (\x.
32+
iCount <- count x;
33+
if (iCount < 3) {
34+
turn left; drill forward; turn left
35+
} {
36+
turn back;
37+
}
38+
);
39+
40+
41+
);
42+
end;
43+
44+
go;
Lines changed: 246 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,246 @@
1+
version: 1
2+
name: Geo-battery
3+
author: Karl Ostmo
4+
description: |
5+
Harness resources from polar opposite regions
6+
creative: false
7+
seed: 4
8+
attrs:
9+
- name: anode
10+
fg: "#dddddd"
11+
bg: "#333333"
12+
- name: cathode
13+
fg: "#333333"
14+
bg: "#dddddd"
15+
- name: layer1a
16+
fg: "#a6cee3"
17+
bg: "#1f78b4"
18+
- name: layer2a
19+
fg: "#fb9a99"
20+
bg: "#e31a1c"
21+
- name: layer3a
22+
fg: "#b2df8a"
23+
bg: "#33a02c"
24+
- name: layer1b
25+
fg: "#fdbf6f"
26+
bg: "#ff7f00"
27+
- name: layer2b
28+
fg: "#ffff99"
29+
bg: "#b15928"
30+
- name: layer3b
31+
fg: "#cab2d6"
32+
bg: "#6a3d9a"
33+
objectives:
34+
- teaser: Something
35+
goal:
36+
- |
37+
Something
38+
condition: |
39+
return false
40+
robots:
41+
- name: base
42+
dir: [1, 0]
43+
devices:
44+
- 3D printer
45+
- blueprint
46+
- branch predictor
47+
- ADT calculator
48+
- clock
49+
- comparator
50+
- compass
51+
- counter
52+
- dictionary
53+
- drill
54+
- fast grabber
55+
- GPS receiver
56+
- harvester
57+
- hearing aid
58+
- keyboard
59+
- lambda
60+
- logger
61+
- net
62+
- rolex
63+
- scanner
64+
- strange loop
65+
- toolkit
66+
- treads
67+
- welder
68+
- workbench
69+
inventory:
70+
- [3, bell jar]
71+
solution: |
72+
run "scenarios/Challenges/_polar/solution.sw"
73+
entities:
74+
- name: bell jar
75+
display:
76+
attr: device
77+
char: 'J'
78+
description:
79+
- Can store one unit of substance
80+
properties: [known, portable]
81+
- name: anode
82+
display:
83+
attr: anode
84+
char: 'A'
85+
description:
86+
- anode
87+
properties: [known]
88+
- name: cathode
89+
display:
90+
attr: cathode
91+
char: 'C'
92+
description:
93+
- cathode
94+
properties: [known]
95+
- name: layer1a
96+
display:
97+
attr: layer1a
98+
char: '*'
99+
description:
100+
- layer1a
101+
properties: [known, unwalkable, portable]
102+
- name: layer2a
103+
display:
104+
attr: layer2a
105+
char: '*'
106+
description:
107+
- layer2a
108+
properties: [known, unwalkable, portable]
109+
- name: layer3a
110+
display:
111+
attr: layer3a
112+
char: '*'
113+
description:
114+
- layer3a
115+
properties: [known, unwalkable, portable]
116+
- name: layer1b
117+
display:
118+
attr: layer1b
119+
char: '*'
120+
description:
121+
- layer1b
122+
properties: [known, unwalkable, portable]
123+
- name: layer2b
124+
display:
125+
attr: layer2b
126+
char: '*'
127+
description:
128+
- layer2b
129+
properties: [known, unwalkable, portable]
130+
- name: layer3b
131+
display:
132+
attr: layer3b
133+
char: '*'
134+
description:
135+
- layer3b
136+
properties: [known, unwalkable, portable]
137+
- name: layer1a unit
138+
display:
139+
attr: layer1a
140+
char: '*'
141+
description:
142+
- layer1a unit
143+
properties: [known, unwalkable, portable]
144+
- name: layer2a unit
145+
display:
146+
attr: layer2a
147+
char: '*'
148+
description:
149+
- layer2a unit
150+
properties: [known, unwalkable, portable]
151+
- name: layer3a unit
152+
display:
153+
attr: layer3a
154+
char: '*'
155+
description:
156+
- layer3a unit
157+
properties: [known, unwalkable, portable]
158+
- name: layer1b unit
159+
display:
160+
attr: layer1b
161+
char: '*'
162+
description:
163+
- layer1b unit
164+
properties: [known, unwalkable, portable]
165+
- name: layer2b unit
166+
display:
167+
attr: layer2b
168+
char: '*'
169+
description:
170+
- layer2b unit
171+
properties: [known, unwalkable, portable]
172+
- name: layer3b unit
173+
display:
174+
attr: layer3b
175+
char: '*'
176+
description:
177+
- layer3b unit
178+
properties: [known, unwalkable, portable]
179+
recipes:
180+
- in:
181+
- [1, "bell jar"]
182+
- [1, "layer1a"]
183+
out:
184+
- [1, "layer1a unit"]
185+
required:
186+
- [1, drill]
187+
- in:
188+
- [1, "layer1a unit"]
189+
- [1, "layer1b"]
190+
out:
191+
- [1, "layer1b unit"]
192+
required:
193+
- [1, drill]
194+
- in:
195+
- [1, "layer1b unit"]
196+
- [1, "layer2a"]
197+
out:
198+
- [1, "layer2a unit"]
199+
required:
200+
- [1, drill]
201+
- in:
202+
- [1, "layer2a unit"]
203+
- [1, "layer2b"]
204+
out:
205+
- [1, "layer2b unit"]
206+
required:
207+
- [1, drill]
208+
- in:
209+
- [1, "layer2b unit"]
210+
- [1, "layer3a"]
211+
out:
212+
- [1, "layer3a unit"]
213+
required:
214+
- [1, drill]
215+
- in:
216+
- [1, "layer3a unit"]
217+
- [1, "layer3b"]
218+
out:
219+
- [1, "layer3b unit"]
220+
required:
221+
- [1, drill]
222+
known: [tree, rock, flower, boulder]
223+
world:
224+
dsl: |
225+
let
226+
lakeNoise = perlin seed 1 0.04 0.0
227+
in
228+
overlay
229+
[ {grass}
230+
, mask (lakeNoise < -0.60) {layer1a}
231+
, mask (lakeNoise < -0.70) {layer2a}
232+
, mask (lakeNoise < -0.80) {layer3a}
233+
, mask (lakeNoise < -0.90) {cathode}
234+
, mask (lakeNoise > 0.60) {layer1b}
235+
, mask (lakeNoise > 0.70) {layer2b}
236+
, mask (lakeNoise > 0.80) {layer3b}
237+
, mask (lakeNoise > 0.90) {anode}
238+
]
239+
upperleft: [0, 0]
240+
offset: false
241+
palette:
242+
'B': [grass, erase, base]
243+
'.': [grass, erase]
244+
map: |
245+
B..
246+
...

0 commit comments

Comments
 (0)