swarm-0.4: data/scenarios/Testing/684-swap.yaml
version: 1
name: Swap in one tick
description: |
Swapping an entity should be done in one tick.
https://github.com/swarm-game/swarm/issues/684
objectives:
- condition: |
try {
as base {
l <- has "lambda";
b <- has "bitcoin";
return $ l && b
}
} {
return false
}
solution: |
swap "bitcoin"; swap "gold coin";
robots:
- name: base
loc: [0,0]
dir: [1,0]
devices:
- logger
- scanner
- grabber
- fast grabber
inventory:
- [1, gold coin]
- [1, bitcoin]
- name: watcher
loc: [0,0]
dir: [1,0]
system: true
devices:
- logger
program: |
def repeat = \c. c; repeat c end;
repeat (
d <- scan down;
case d (\_.
say "Fatal error: swap does not work atomically!"
) (\_.
return ()
)
)
world:
palette:
'┌': [stone, upper left corner]
'┐': [stone, upper right corner]
'└': [stone, lower left corner]
'┘': [stone, lower right corner]
'─': [stone, horizontal wall]
'│': [stone, vertical wall]
'λ': [grass, lambda]
upperleft: [-1, 1]
map: |
┌─┐
│λ│
└─┘