swarm-0.7.0.0: data/scenarios/Challenges/teleport.yaml
version: 1
name: Portal room
author: Ondřej Šebek
description: An impossible challenge - can you magically jump across the water?
objectives:
- goal:
- Get to the other room and grab the `lambda`{=entity}.
- Oh wait.
- The tunnel is flooded.
- Just give up then. It is impossible to get there.
condition: |
try {
as base {has "lambda"}
} { pure false }
solution: |
def w2 = turn back; turn back end;
def w10 = w2; w2; w2; w2; w2 end;
turn back; move;move;move; w10; move;move;move; grab
robots:
- name: base
loc: [3, 0]
dir: east
devices:
- treads
- logger
- grabber
- dictionary
inventory:
- [0, lambda]
- name: portkey1
system: true
loc: [0, 0]
dir: [0, 0]
program: |
def forever = \prog. wait 10; prog; forever prog; end;
destRob <- robotNamed "portkey2";
destPos <- as destRob {whereami};
myPos <- whereami;
forever (
basePos <- as base {whereami};
if (myPos == basePos) {teleport base destPos} {};
);
- name: portkey2
system: true
loc: [16, 0]
dir: [0, 0]
program: |
def forever = \prog. wait 10; prog; forever prog; end;
wait 5;
destRob <- robotNamed "portkey1";
destPos <- as destRob {whereami};
myPos <- whereami;
forever (
basePos <- as base {whereami};
if (myPos == basePos) {teleport base destPos} {};
);
entities:
- name: wall
display:
char: '#'
description:
- Unmovable barrier
properties: [known, unwalkable, boundary]
known: [water, wavy water, flower, tree]
world:
dsl: |
{ice, water}
palette:
',': [ice, water]
' ': [ice, water]
'~': [ice, wavy water]
'*': [grass, flower]
'T': [grass, tree]
'.': [grass, erase]
'_': [stone, erase]
'λ': [grass, lambda]
'x': [stone, wall]
upperleft: [-1, 3]
map: |
~~ ~ ~ ~
~xxxxxxx~ xxxxxxx~ ,
xx.....xxxxxT...*xx ~
x_....._ _..λ.._x ,
xx.....xxxxx*...Txx ~
~xxxxxxx ~~xxxxxxx~ ,
~~~ ~ ~ ~