swarm-0.6.0.0: data/scenarios/Testing/699-movement-fail/699-teleport-blocked.yaml
version: 1
name: Teleport to blocked
description: |
Teleporting self or another robot to blocked location results in destruction of that robot.
https://github.com/swarm-game/swarm/issues/699
creative: true
objectives:
- condition: |
def isAliveOn = \name.\loc. try {r <- robotNamed name; l <- as r {whereami}; return $ l == loc} {return false} end;
def isDead = \name. try {robotNamed name; return false} {return true} end;
d1 <- isDead "one";
d2 <- isDead "two";
a3 <- isAliveOn "three" (3,0);
a4 <- isAliveOn "four" (3,0);
b <- isAliveOn "base" (5,0);
return (d1 && d2 && a3 && a4 && b)
solution: |
o <- robotNamed "one"; reprogram o {t <- robotNamed "two"; teleport t (3,0); teleport self (3,0)};
try {teleport self (3,0)} {teleport self (5,0)}
robots:
- name: base
dir: [0, 0]
- name: one
dir: east
- name: two
dir: west
- name: three
dir: north
system: true
program: |
t <- robotNamed "four"; teleport t (3,0); teleport self (3,0)
- name: four
dir: south
system: true
world:
palette:
'@': [stone, boulder]
'B': [grass, null, base]
'1': [grass, null, one]
'2': [grass, null, two]
'3': [grass, null, three]
'4': [grass, null, four]
'┌': [stone, upper left corner]
'┐': [stone, upper right corner]
'└': [stone, lower left corner]
'┘': [stone, lower right corner]
'─': [stone, horizontal wall]
'│': [stone, vertical wall]
upperleft: [-1, 1]
map: |
┌──────┐
│B12@34│
└──────┘