normalize scenarios (#1711)

Closes #845

**All changes are non-significant whitespace.**  This can be verified with:

    git show --ignore-all-space --ignore-blank-lines

in which the remaining changes are only elimination of manual word-wrap in descriptions.

Normalization is accomplished with this command:

    scripts/normalize-all-scenarios.sh

This is an initial normalization pass that shall be a pre-requisite for #1713.
This commit is contained in:
Karl Ostmo 2024-01-05 11:32:26 -08:00 committed by GitHub
parent 3cfc3c4ee9
commit ab9f86ee70
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
145 changed files with 915 additions and 1154 deletions

View File

@ -4,13 +4,8 @@ author: Brent Yorgey
description: Make 2048!
objectives:
- goal:
- OK, OK, it's not really the same as the classic "2048" game.
However, your goal is still to make 2048! You start with a `1`{=entity}
which regrows immediately when
it is `harvest`ed, so if you plant it, you can get as many as you want. Your
job is to combine `1`{=entity}s in order to make a `2048`{=entity}
entity.
- "Hint: the `format` command can turn numbers into strings!"
- OK, OK, it's not really the same as the classic "2048" game. However, your goal is still to make 2048! You start with a `1`{=entity} which regrows immediately when it is `harvest`ed, so if you plant it, you can get as many as you want. Your job is to combine `1`{=entity}s in order to make a `2048`{=entity} entity.
- "Hint: the `format` command can turn numbers into strings!"
condition: |
try {
as base {has "2048"}
@ -29,132 +24,130 @@ entities:
attr: gold
char: "#"
description:
- This is a one. Maybe you can combine it with other ones
somehow.
- This is a one. Maybe you can combine it with other ones somehow.
properties: [growable, portable, infinite]
- name: "2"
display:
attr: gold
char: "#"
description:
- This is a two. Maybe you can combine it with other twos
somehow.
- This is a two. Maybe you can combine it with other twos somehow.
properties: [portable]
- name: "4"
display:
attr: gold
char: "#"
description:
- This is a four. You get the idea.
- This is a four. You get the idea.
properties: [portable]
- name: "8"
display:
attr: gold
char: "#"
description:
- An eight.
- An eight.
properties: [portable]
- name: "16"
display:
attr: gold
char: "#"
description:
- A 16.
- A 16.
properties: [portable]
- name: "32"
display:
attr: gold
char: "#"
description:
- A 32.
- A 32.
properties: [portable]
- name: "64"
display:
attr: gold
char: "#"
description:
- A 64.
- A 64.
properties: [portable]
- name: "128"
display:
attr: gold
char: "#"
description:
- A 128.
- A 128.
properties: [portable]
- name: "256"
display:
attr: gold
char: "#"
description:
- A 256.
- A 256.
properties: [portable]
- name: "512"
display:
attr: gold
char: "#"
description:
- A 512.
- A 512.
properties: [portable]
- name: "1024"
display:
attr: gold
char: "#"
description:
- A 1024.
- A 1024.
properties: [portable]
- name: "2048"
display:
attr: gold
char: "#"
description:
- A 2048.
- A 2048.
properties: [portable]
recipes:
- in:
- [2, "1"]
- [2, "1"]
out:
- [1, "2"]
- [1, "2"]
- in:
- [2, "2"]
- [2, "2"]
out:
- [1, "4"]
- [1, "4"]
- in:
- [2, "4"]
- [2, "4"]
out:
- [1, "8"]
- [1, "8"]
- in:
- [2, "8"]
- [2, "8"]
out:
- [1, "16"]
- [1, "16"]
- in:
- [2, "16"]
- [2, "16"]
out:
- [1, "32"]
- [1, "32"]
- in:
- [2, "32"]
- [2, "32"]
out:
- [1, "64"]
- [1, "64"]
- in:
- [2, "64"]
- [2, "64"]
out:
- [1, "128"]
- [1, "128"]
- in:
- [2, "128"]
- [2, "128"]
out:
- [1, "256"]
- [1, "256"]
- in:
- [2, "256"]
- [2, "256"]
out:
- [1, "512"]
- [1, "512"]
- in:
- [2, "512"]
- [2, "512"]
out:
- [1, "1024"]
- [1, "1024"]
- in:
- [2, "1024"]
- [2, "1024"]
out:
- [1, "2048"]
- [1, "2048"]
robots:
- name: base
dir: east

View File

@ -3,14 +3,14 @@ name: Cave shaped maze
author: Ondřej Šebek
description: A maze shaped like a cave. It only goes down or forward.
objectives:
- goal:
- You are at the top of a cave that gradually descends until reaching a dead end.
- At its bottom is a great treasure.
- Luckily, the cave does not branch out, so it is easy to find the path to the treasure.
- Send a robot to the the item marked as '**!**'. You win once the robot `grab`s it.
condition: |
j <- robotNamed "judge";
as j {has "goal"}
- goal:
- You are at the top of a cave that gradually descends until reaching a dead end.
- At its bottom is a great treasure.
- Luckily, the cave does not branch out, so it is easy to find the path to the treasure.
- Send a robot to the the item marked as '**!**'. You win once the robot `grab`s it.
condition: |
j <- robotNamed "judge";
as j {has "goal"}
solution: |
def until = \p. \c. b <- p; if b {} {c; until p c} end;
def fwd = until blocked move end;
@ -42,7 +42,7 @@ robots:
- [50, grabber]
- [0, goal]
- name: judge
dir: [0,0]
dir: [0, 0]
system: true
program: |
def until = \c. b <- c; if b {} {until c} end;
@ -55,14 +55,14 @@ entities:
char:
attr: rock
description:
- An impassable stone wall.
- An impassable stone wall.
properties: [unwalkable, known]
- name: goal
display:
char: '!'
attr: device
description:
- The place you're trying to reach! You win by executing `grab` on this item.
- The place you're trying to reach! You win by executing `grab` on this item.
properties: [known, portable]
world:
dsl: |
@ -73,7 +73,7 @@ world:
'~': [stone, water]
'█': [stone, wall]
'!': [stone, goal, judge]
upperleft: [0,0]
upperleft: [0, 0]
map: |
██████████████████████████████
█Ω ████████ █████████████████

View File

@ -3,15 +3,14 @@ name: Spiral shaped maze
author: Ondřej Šebek
description: A maze shaped like a spiral, with a twist!
objectives:
- goal:
- You find yourself in the middle of a large maze.
- It's straightforward to get out, but the path is long and dull.
- You need to send a robot to the goal square, labelled with an exclamation mark;
you win by `grab`bing the `goal`{=entity}.
- Beware! The winding corridors are wider then they look!
condition: |
j <- robotNamed "judge";
as j {has "goal"}
- goal:
- You find yourself in the middle of a large maze.
- It's straightforward to get out, but the path is long and dull.
- You need to send a robot to the goal square, labelled with an exclamation mark; you win by `grab`bing the `goal`{=entity}.
- Beware! The winding corridors are wider then they look!
condition: |
j <- robotNamed "judge";
as j {has "goal"}
solution: |
def until = \p. \c. b <- p; if b {} {c; until p c} end;
def fwd = until blocked move end;
@ -43,7 +42,7 @@ robots:
- [50, grabber]
- [0, goal]
- name: judge
dir: [0,0]
dir: [0, 0]
system: true
program: |
def until = \c. b <- c; if b {} {until c} end;
@ -55,14 +54,14 @@ entities:
char:
attr: rock
description:
- An impassable stone wall.
- An impassable stone wall.
properties: [unwalkable, known]
- name: goal
display:
char: '!'
attr: device
description:
- The place you're trying to reach! You win by executing `grab` on this item.
- The place you're trying to reach! You win by executing `grab` on this item.
properties: [known, portable]
world:
dsl: |
@ -72,7 +71,7 @@ world:
' ': [stone, null]
'█': [stone, wall]
'!': [stone, goal, judge]
upperleft: [0,0]
upperleft: [0, 0]
map: |
████████████████████████████████████
██ ██

View File

@ -1,22 +1,17 @@
version: 1
name: Invisible maze
author: Brent Yorgey
description: There is a maze, but it can't be seen, only sensed... can you
program a robot to navigate it successfully?
description: There is a maze, but it can't be seen, only sensed... can you program a robot to navigate it successfully?
objectives:
- goal:
- There is a maze, but it can't be seen, only sensed... can you
program a robot to navigate it successfully? You need to get a robot
to the goal square, labelled with an exclamation mark; you win by `grab`bing
the `goal`{=entity}.
- In this challenge, it is guaranteed that the maze is a tree, that is,
there are no loops within the maze.
condition: |
try {
teleport self (27, -17);
b <- ishere "goal";
return (not b)
} { return false }
- goal:
- There is a maze, but it can't be seen, only sensed... can you program a robot to navigate it successfully? You need to get a robot to the goal square, labelled with an exclamation mark; you win by `grab`bing the `goal`{=entity}.
- In this challenge, it is guaranteed that the maze is a tree, that is, there are no loops within the maze.
condition: |
try {
teleport self (27, -17);
b <- ishere "goal";
return (not b)
} { return false }
solution: |
def tL = turn left end;
def tR = turn right end;
@ -55,14 +50,14 @@ entities:
display:
invisible: true
description:
- An invisible wall.
- An invisible wall.
properties: [unwalkable, known]
- name: goal
display:
char: '!'
attr: device
description:
- The place you're trying to reach! You win by executing `grab` on this item.
- The place you're trying to reach! You win by executing `grab` on this item.
properties: [known, portable]
world:
dsl: |
@ -73,7 +68,7 @@ world:
'x': [grass, wall]
'@': [grass, boulder]
'!': [grass, goal]
upperleft: [-1,1]
upperleft: [-1, 1]
map: |
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@Ω........x...x..............@

View File

@ -1,22 +1,17 @@
version: 1
name: Invisible, loopy maze
author: Brent Yorgey
description: There is a maze, but it can't be seen, only sensed... can you
program a robot to navigate it successfully?
description: There is a maze, but it can't be seen, only sensed... can you program a robot to navigate it successfully?
objectives:
- goal:
- There is a maze, but it can't be seen, only sensed... can you
program a robot to navigate it successfully? You need to get a robot
to the goal square, labelled with an exclamation mark; you win by `grab`bing
the `goal`{=entity}.
- In this challenge, you are NOT guaranteed that the maze is a tree, that is,
the maze may contain loops.
condition: |
try {
teleport self (27, -17);
b <- ishere "goal";
return (not b)
} { return false }
- goal:
- There is a maze, but it can't be seen, only sensed... can you program a robot to navigate it successfully? You need to get a robot to the goal square, labelled with an exclamation mark; you win by `grab`bing the `goal`{=entity}.
- In this challenge, you are NOT guaranteed that the maze is a tree, that is, the maze may contain loops.
condition: |
try {
teleport self (27, -17);
b <- ishere "goal";
return (not b)
} { return false }
solution: |
run "scenarios/Challenges/Mazes/loopy_maze_sol.sw"
robots:
@ -48,14 +43,14 @@ entities:
display:
invisible: true
description:
- An invisible wall.
- An invisible wall.
properties: [unwalkable, known]
- name: goal
display:
char: '!'
attr: device
description:
- The place you're trying to reach! You win by executing `grab` on this item.
- The place you're trying to reach! You win by executing `grab` on this item.
properties: [known, portable]
world:
dsl: |
@ -66,7 +61,7 @@ world:
'x': [grass, wall]
'@': [grass, boulder]
'!': [grass, goal]
upperleft: [-1,1]
upperleft: [-1, 1]
map: |
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@.........x...x..............@

View File

@ -119,10 +119,10 @@ robots:
invisible: true
char: 'Q'
attr: bee
program:
program: |
run "scenarios/Challenges/Ranching/_beekeeping/queenbee.sw"
solution: |
run "scenarios/Challenges/Ranching/_beekeeping/solution.sw"
run "scenarios/Challenges/Ranching/_beekeeping/solution.sw"
structures:
- name: beehive
recognize: [north]
@ -161,8 +161,7 @@ entities:
attr: flower
char: '*'
description:
- A delicate flower that grows wild in local meadows.
Produces `nectar`{=entity} when `harvest`ed.
- A delicate flower that grows wild in local meadows. Produces `nectar`{=entity} when `harvest`ed.
properties: [known, growable]
yields: nectar
growth: [80, 120]
@ -171,28 +170,28 @@ entities:
attr: device
char: 'k'
description:
- All the essentials to equip your own "worker bee"
- All the essentials to equip your own "worker bee"
properties: [known, portable]
- name: reed
display:
attr: plant
char: 'r'
description:
- Reeds, grow near water
- Reeds, grow near water
properties: [known, portable, growable]
- name: honeycomb
display:
char: 'x'
attr: gold
description:
- Product of bees that have consumed nectar
- Product of bees that have consumed nectar
properties: [known, portable]
- name: proboscis
display:
char: 'p'
attr: device
description:
- Senses direction to nectar-producing flowers
- Senses direction to nectar-producing flowers
properties: [known, portable]
capabilities: [detectdirection, structure]
- name: honey
@ -200,123 +199,123 @@ entities:
char: 'h'
attr: gold
description:
- Pure liquid honey
- Pure liquid honey
properties: [known, portable]
- name: mead
display:
char: 'm'
description:
- Honey-based alcoholic beverage
- Honey-based alcoholic beverage
properties: [known, portable]
- name: honey extractor
display:
char: 'e'
attr: device
description:
- Device for extracting honey from the comb
- Device for extracting honey from the comb
properties: [known, portable]
- name: buzz
display:
char: 'z'
description:
- Result of discarding surplus honeycomb
- Result of discarding surplus honeycomb
properties: [known, portable]
- name: wax gland
display:
char: 'g'
description:
- Required to make honeycomb
- Required to make honeycomb
properties: [known]
- name: nectar
display:
char: 'n'
attr: gold
description:
- Obtained from wildflowers
- Obtained from wildflowers
properties: [known, portable]
- name: honey frame
display:
char: '-'
attr: iceblue
description:
- Internal component of a beehive
- Internal component of a beehive
properties: [known, portable]
- name: stave
display:
char: 'l'
attr: wood
description:
- Wooden plank comprising the sides of a cask
- Wooden plank comprising the sides of a cask
properties: [known, portable]
- name: cask
display:
char: 'c'
attr: wood
description:
- Wooden barrel for liquids
- Wooden barrel for liquids
properties: [known, portable]
- name: water cask
display:
char: 'c'
attr: water_cask
description:
- Water-filled cask
- Water-filled cask
properties: [known, portable]
- name: lakewater
display:
attr: water
char: ' '
description:
- Potable water from a lake
- Potable water from a lake
properties: [known, infinite, liquid]
- name: siphon
display:
char: 's'
attr: device
description:
- Used to fill a cask with water
- Used to fill a cask with water
properties: [known, portable]
- name: steel hoop
display:
char: 'o'
attr: iron
description:
- Binds staves into a cask
- Binds staves into a cask
properties: [known, portable]
- name: wall
display:
char: 'w'
attr: wood
description:
- Outer walls of the building
- Outer walls of the building
properties: [known, unwalkable]
- name: table
display:
char: 't'
attr: wood
description:
- A segment of banquet table
- A segment of banquet table
properties: [known, portable]
- name: hearth
display:
char: 'h'
attr: rock
description:
- Encloses a fire to warm the hall
- Encloses a fire to warm the hall
properties: [known, unwalkable]
- name: archway
display:
char: 'a'
attr: rock
description:
- Grand entrance
- Grand entrance
properties: [known, portable]
- name: stone tile
display:
char: '.'
attr: rock
description:
- Refined flooring
- Refined flooring
properties: [known, portable]
recipes:
- in:

View File

@ -122,13 +122,13 @@ robots:
program: |
run "scenarios/Challenges/Ranching/_capture/opponent.sw"
solution: |
run "scenarios/Challenges/Ranching/_capture/solution.sw"
run "scenarios/Challenges/Ranching/_capture/solution.sw"
entities:
- name: monolith
display:
char: '@'
description:
- Pushable rock
- Pushable rock
properties: [known, unwalkable, portable]
capabilities: [push]
- name: bacon
@ -136,7 +136,7 @@ entities:
attr: bacon
char: 'Z'
description:
- Odiferous constitution of pig
- Odiferous constitution of pig
properties: [known]
known: [flower, tree]
world:

View File

@ -35,7 +35,7 @@ objectives:
After you have done this, `place` the `bell`{=entity} anywhere, and then Bill will inspect
your work.
prerequisite:
not: wrong_anwser
not: wrong_anwser
condition: |
r <- robotnamed "setup";
as r {has "bit (1)"};
@ -90,14 +90,14 @@ robots:
program: |
run "scenarios/Challenges/Ranching/_powerset/setup.sw"
solution: |
run "scenarios/Challenges/Ranching/_powerset/solution.sw"
run "scenarios/Challenges/Ranching/_powerset/solution.sw"
entities:
- name: rocket skates
display:
attr: silver
char: 's'
description:
- Allows one to `stride` across multiple cells
- Allows one to `stride` across multiple cells
properties: [known, portable]
capabilities: [movemultiple]
- name: bell

View File

@ -151,7 +151,7 @@ robots:
program: |
run "scenarios/Challenges/Sliding Puzzles/_sliding-puzzle/setup.sw";
solution: |
run "scenarios/Challenges/Sliding Puzzles/_sliding-puzzle/solution.sw"
run "scenarios/Challenges/Sliding Puzzles/_sliding-puzzle/solution.sw"
entities:
- name: gradiator
display:
@ -184,7 +184,7 @@ entities:
attr: silver
char: '/'
description:
- Facilitates pushing
- Facilitates pushing
properties: [known, portable]
capabilities: [push]
- name: sliding-tile

View File

@ -62,7 +62,7 @@ entities:
display:
char: '@'
description:
- Pushable rock
- Pushable rock
properties: [known, unwalkable, portable]
known: [mountain, water, flower]
world:

View File

@ -45,7 +45,7 @@ entities:
display:
char: '@'
description:
- Pushable rock
- Pushable rock
properties: [known, unwalkable, portable]
known: [mountain, water, flower]
world:

View File

@ -97,7 +97,7 @@ entities:
display:
char: '@'
description:
- Pushable rock
- Pushable rock
properties: [known, unwalkable, portable]
known: [mountain, water, flower]
world:

View File

@ -70,28 +70,28 @@ robots:
- [5, strange loop]
- [5, treads]
solution: |
run "scenarios/Challenges/Sokoban/_foresight/solution.sw"
run "scenarios/Challenges/Sokoban/_foresight/solution.sw"
entities:
- name: monolith
display:
char: '@'
attr: gold
description:
- Pushable rock
- Pushable rock
properties: [known, unwalkable, portable]
- name: crate
display:
attr: wood
char: '▪'
description:
- Pushable crate
- Pushable crate
properties: [known, portable, unwalkable]
- name: wall
display:
attr: barrier
char: '#'
description:
- Unmovable barrier
- Unmovable barrier
properties: [known, unwalkable]
known: [mountain, water, 3D printer, flower]
world:

View File

@ -78,7 +78,7 @@ robots:
inventory:
- [5, paperclip]
solution: |
run "scenarios/Challenges/_arbitrage/solution.sw"
run "scenarios/Challenges/_arbitrage/solution.sw"
entities:
- name: paperclip
display:

View File

@ -87,13 +87,8 @@ objectives:
- id: get_map
teaser: Get the map
goal:
- As a humble `peat`{=entity} farmer, you subsist in a simple cabin by the `bog`{=entity}.
Though long content with this ascetic lifestyle, recently the barren walls have
left you restless. Something is missing...
- "The majestic landscape that is your back yard is insufficient to distract you---not
even the ferocious, `lava`{=entity}-spewing volcano little more than a stone's throw from
your porch.
You are preoccupied by one task: to find the perfect household decoration."
- As a humble `peat`{=entity} farmer, you subsist in a simple cabin by the `bog`{=entity}. Though long content with this ascetic lifestyle, recently the barren walls have left you restless. Something is missing...
- "The majestic landscape that is your back yard is insufficient to distract you---not even the ferocious, `lava`{=entity}-spewing volcano little more than a stone's throw from your porch. You are preoccupied by one task: to find the perfect household decoration."
- First, grab a `map`{=entity} to orient yourself.
condition: |
as base {
@ -104,19 +99,11 @@ objectives:
prerequisite: get_map
goal:
- You study the `map`{=entity}.
- Glacier-bound mountains tower in the `east`,
a volcano oozes a river of `lava`{=entity} to the `north`, and beyond that lies a mountain lake, punctuated with islands
in the northwest.
Iron mines penetrate the base of the volcano. They could be useful, but how will you get there?
- A `jungle`{=entity} abuts the volcano, ensconcing an ancient ruin.
The map notes that bygone travelers have stashed tools among the northeasterly mountains to
blaze a path through the jungle.
- Glacier-bound mountains tower in the `east`, a volcano oozes a river of `lava`{=entity} to the `north`, and beyond that lies a mountain lake, punctuated with islands in the northwest. Iron mines penetrate the base of the volcano. They could be useful, but how will you get there?
- A `jungle`{=entity} abuts the volcano, ensconcing an ancient ruin. The map notes that bygone travelers have stashed tools among the northeasterly mountains to blaze a path through the jungle.
- Your only neighbor, a `hemp`{=entity} farmer to the northwest, has evacuated since the sudden volcanic eruption.
- A disused quarry and clay pit flanks your cabin to the `west`, as does the familiar, swampy `bog`{=entity} to the `east`.
A highly-prized `flower`{=entity} is said to grow in the caves beyond the bog.
- Your mind is made up. You will pillage the ruins for treasure! Head to the ruins and `scan` them.
Ingenuity and endurance are your allies as you forge paths through varied obstacles.
Study your "recipes" for clues!
- A disused quarry and clay pit flanks your cabin to the `west`, as does the familiar, swampy `bog`{=entity} to the `east`. A highly-prized `flower`{=entity} is said to grow in the caves beyond the bog.
- Your mind is made up. You will pillage the ruins for treasure! Head to the ruins and `scan` them. Ingenuity and endurance are your allies as you forge paths through varied obstacles. Study your "recipes" for clues!
condition: |
as base {
knows "temple";
@ -126,8 +113,7 @@ objectives:
prerequisite: find_temple
goal:
- "A note on the door says:"
- '"Greetings, intrepid traveler. Encircle this temple with the rare `flower`{=entity} of the southeastern
caves, and the treasure of this `temple`{=entity} shall be revealed."'
- '"Greetings, intrepid traveler. Encircle this temple with the rare `flower`{=entity} of the southeastern caves, and the treasure of this `temple`{=entity} shall be revealed."'
- Plant a ring of flowers around the jungle temple.
condition: |
as base {

View File

@ -70,10 +70,8 @@ objectives:
as base {has "coal lump"}
- goal:
- Your base got some coal!
- Now fashion more of it into a "coal briquette", and place it
so that the hauler (=) can pick it up.
- The hauler will periodically stop at the base
to check if a load is available.
- Now fashion more of it into a "coal briquette", and place it so that the hauler (=) can pick it up.
- The hauler will periodically stop at the base to check if a load is available.
condition: |
hauler <- robotnamed "hauler";
as hauler {has "coal briquette"}
@ -174,8 +172,6 @@ recipes:
- [1, energy]
required:
- [1, furnace]
known: [boulder, lignite mine]
seed: 0
world:

View File

@ -4,8 +4,7 @@ author: Ondřej Šebek
description: In this quirky challenge, you move as the chess knight piece. Can you capture the enemy king?
objectives:
- goal:
- Robots can use the `move` command to move.
But they only `turn` in cardinal directions.
- Robots can use the `move` command to move. But they only `turn` in cardinal directions.
- You are special. You are a knight.
- Go forth and capture the King!
condition: |
@ -19,8 +18,8 @@ solution: |
move; move; move; turn right; move; turn left; move;
robots:
- name: horse
loc: [0,0]
dir: [2,-1]
loc: [0, 0]
dir: [2, -1]
devices:
- treads
- logger
@ -28,8 +27,8 @@ robots:
display:
char: '♘'
- name: king
loc: [7,-6]
dir: [0,0]
loc: [7, -6]
dir: [0, 0]
display:
char: '♚'
known: [water]

View File

@ -50,7 +50,7 @@ robots:
program: |
run "scenarios/Challenges/_combo-lock/setup.sw"
solution: |
run "scenarios/Challenges/_combo-lock/solution.sw"
run "scenarios/Challenges/_combo-lock/solution.sw"
entities:
- name: gate
display:
@ -81,25 +81,25 @@ entities:
properties: [known]
recipes:
- in:
- [1, "dial (R)"]
- [1, "dial (R)"]
out:
- [1, "dial (G)"]
- [1, "dial (G)"]
required:
- [1, drill]
- [1, drill]
time: 0
- in:
- [1, "dial (G)"]
- [1, "dial (G)"]
out:
- [1, "dial (B)"]
- [1, "dial (B)"]
required:
- [1, drill]
- [1, drill]
time: 0
- in:
- [1, "dial (B)"]
- [1, "dial (B)"]
out:
- [1, "dial (R)"]
- [1, "dial (R)"]
required:
- [1, drill]
- [1, drill]
time: 0
known: [boulder, water, bitcoin]
world:

View File

@ -4,15 +4,10 @@ creative: false
description: Serve restaurant patrons with the dim sum cart.
objectives:
- goal:
- It is the grand opening of Sigma (Σ), the hot new
dim sum restaurant in town.
You are the solitary wait staff.
- It seems that the manager went a bit overboard on furniture;
there are dozens of `table`{=entity}s,
but hardly any room to walk!
- It is the grand opening of Sigma (Σ), the hot new dim sum restaurant in town. You are the solitary wait staff.
- It seems that the manager went a bit overboard on furniture; there are dozens of `table`{=entity}s, but hardly any room to walk!
- Serve the blue patron with a `full cart`{=entity} (f) of food, twice.
- The `empty cart`{=entity} (e) must be `push`ed to the
northwest corner for the cook to load it with food.
- The `empty cart`{=entity} (e) must be `push`ed to the northwest corner for the cook to load it with food.
condition: |
p <- robotnamed "patron";
as p {
@ -78,59 +73,59 @@ robots:
program: |
run "scenarios/Challenges/_dimsum/patron.sw"
entities:
- name: table
display:
attr: wood
char: 't'
description:
- Pushable table
properties: [known, pushable]
- name: spatula
display:
char: 's'
description:
- Serving utensil for the cart
properties: [known, portable]
- name: fork
display:
char: 'k'
description:
- Eating utensil for patron
properties: [known, portable]
- name: food
display:
char: 'f'
description:
- Food from the cart
properties: [known, portable]
- name: empty cart
display:
attr: copper
char: 'e'
description:
- Food cart
properties: [known, pushable]
- name: full cart
display:
attr: gold
char: 'f'
description:
- Food cart
properties: [known, pushable]
- name: table
display:
attr: wood
char: 't'
description:
- Pushable table
properties: [known, pushable]
- name: spatula
display:
char: 's'
description:
- Serving utensil for the cart
properties: [known, portable]
- name: fork
display:
char: 'k'
description:
- Eating utensil for patron
properties: [known, portable]
- name: food
display:
char: 'f'
description:
- Food from the cart
properties: [known, portable]
- name: empty cart
display:
attr: copper
char: 'e'
description:
- Food cart
properties: [known, pushable]
- name: full cart
display:
attr: gold
char: 'f'
description:
- Food cart
properties: [known, pushable]
recipes:
- in:
- [1, empty cart]
- [1, empty cart]
out:
- [1, full cart]
- [1, full cart]
required:
- [1, spatula]
- [1, spatula]
- in:
- [1, full cart]
- [1, full cart]
out:
- [1, empty cart]
- [1, food]
- [1, empty cart]
- [1, food]
required:
- [1, fork]
- [1, fork]
known: [boulder, bitcoin]
world:
dsl: |

View File

@ -58,9 +58,7 @@ robots:
run "scenarios/Challenges/_friend/cat.sw"
objectives:
- goal:
- There's a cat wandering around in the field. Bring it back to
your base. If you give it something it likes, perhaps you can
get it to follow you.
- There's a cat wandering around in the field. Bring it back to your base. If you give it something it likes, perhaps you can get it to follow you.
condition: |
c <- robotNamed "cat";
catLoc <- as c {whereami};
@ -75,7 +73,6 @@ entities:
description:
- A smelly fish. Rather unappetizing to a robot.
properties: [known, portable]
known: [fish]
seed: 0
world:

View File

@ -126,7 +126,7 @@ recipes:
required:
- [1, drill]
solution: |
run "scenarios/Challenges/_gopher/solution.sw"
run "scenarios/Challenges/_gopher/solution.sw"
known: []
world:
dsl: |

View File

@ -249,17 +249,17 @@ entities:
properties: [known, unwalkable]
recipes:
- in:
- [181, "pellet"]
- [181, "pellet"]
out:
- [1, "den key"]
- [1, "den key"]
- in:
- [1, "den key"]
- [1, "gate"]
- [1, "den key"]
- [1, "gate"]
out:
- [1, "den key"]
- [1, "den key"]
required:
- [1, drill]
solution:
- [1, drill]
solution: |
run "scenarios/Challenges/_hackman/solution.sw"
known: []
seed: 0

View File

@ -4,10 +4,8 @@ author: Ondřej Šebek and Brent Yorgey
description: The classic Towers of Hanoi puzzle with three disks.
objectives:
- goal:
- Move all the numbers (traditionally, "disks") from the
left column to the right column.
- You may only pick up one disk at a time, and you may never
place a larger disk on top of a smaller one.
- Move all the numbers (traditionally, "disks") from the left column to the right column.
- You may only pick up one disk at a time, and you may never place a larger disk on top of a smaller one.
condition: |
teleport self (2,-1);
x <- ishere "one";
@ -35,17 +33,17 @@ robots:
- scanner
- ADT calculator
- name: invariant
dir: [0,0]
dir: [0, 0]
system: true
devices:
- logger
- logger
inventory:
- [1, one]
- [1, two]
- [1, three]
- [1, blocked one]
- [1, blocked two]
- [1, blocked three]
- [1, one]
- [1, two]
- [1, three]
- [1, blocked one]
- [1, blocked two]
- [1, blocked three]
program: |
// if
// 0. I stand on locked X
@ -62,12 +60,12 @@ robots:
// - lock X
run "scenarios/Challenges/_hanoi/hanoi-invariant.sw"
- name: increasing
dir: [0,0]
dir: [0, 0]
system: true
inventory:
- [1, OK]
- [1, OK]
devices:
- logger
- logger
program: |
// if
// 0. all (but max 3) disks in my column are sorted
@ -77,13 +75,13 @@ robots:
// - try to grab "OK"
run "scenarios/Challenges/_hanoi/hanoi-increasing.sw"
- name: count
dir: [0,0]
dir: [0, 0]
system: true
inventory:
- [1, two]
- [0, three]
- [1, two]
- [0, three]
devices:
- logger
- logger
program: |
// count all entities placed in columns
// the final count should be either 2 or 3
@ -95,49 +93,49 @@ entities:
char: '┴'
attr: entity
description:
- A bottom tee wall.
- A bottom tee wall.
properties: [unwalkable]
- name: three
display:
char: '3'
attr: gold
description:
- A disk of radius 3.
- A disk of radius 3.
properties: [portable]
- name: two
display:
char: '2'
attr: gold
description:
- A disk of radius 2.
- A disk of radius 2.
properties: [portable]
- name: one
display:
char: '1'
attr: gold
description:
- A disk of radius 1.
- A disk of radius 1.
properties: [portable]
- name: blocked one
display:
char: '1'
attr: entity
description:
- A disk of radius 1.
- A disk of radius 1.
properties: [unwalkable]
- name: blocked two
display:
char: '2'
attr: entity
description:
- A disk of radius 2.
- A disk of radius 2.
properties: [unwalkable]
- name: blocked three
display:
char: '3'
attr: entity
description:
- A disk of radius 3.
- A disk of radius 3.
properties: [unwalkable]
- name: OK
display:
@ -174,7 +172,6 @@ world:
'.': [stone, null, invariant]
'^': [grass, null, increasing]
'X': [grass, three, count]
upperleft: [-3, 1]
map: |
┌─────┐

View File

@ -70,7 +70,7 @@ robots:
program: |
run "scenarios/Challenges/_ice-cream/customer.sw"
solution: |
run "scenarios/Challenges/_ice-cream/solution.sw"
run "scenarios/Challenges/_ice-cream/solution.sw"
entities:
- name: scoop
display:

View File

@ -96,7 +96,7 @@ robots:
program: |
run "scenarios/Challenges/_lights-out/assistant.sw";
solution: |
run "scenarios/Challenges/_lights-out/solution.sw"
run "scenarios/Challenges/_lights-out/solution.sw"
entities:
- name: pending-off
display:
@ -159,4 +159,3 @@ world:
.xxxxx.
.xxxxx.
z......

View File

@ -56,7 +56,7 @@ robots:
program: |
run "scenarios/Challenges/_maypole/monitor.sw"
solution: |
run "scenarios/Challenges/_maypole/solution.sw"
run "scenarios/Challenges/_maypole/solution.sw"
entities:
- name: dizzy
display:

View File

@ -18,7 +18,7 @@ solution: |
turn back; move;move;move; w10; move;move;move; grab
robots:
- name: base
loc: [3,0]
loc: [3, 0]
dir: east
devices:
- treads
@ -29,8 +29,8 @@ robots:
- [0, lambda]
- name: portkey1
system: true
loc: [0,0]
dir: [0,0]
loc: [0, 0]
dir: [0, 0]
program: |
def forever = \prog. wait 10; prog; forever prog; end;
destRob <- robotNamed "portkey2";
@ -42,8 +42,8 @@ robots:
);
- name: portkey2
system: true
loc: [16,0]
dir: [0,0]
loc: [16, 0]
dir: [0, 0]
program: |
def forever = \prog. wait 10; prog; forever prog; end;
wait 5;

View File

@ -61,7 +61,7 @@ robots:
end;
start;
solution: |
run "scenarios/Challenges/_wave/solution.sw"
run "scenarios/Challenges/_wave/solution.sw"
entities: []
known: [wavy water, water, bitcoin]
world:

View File

@ -7,9 +7,7 @@ seed: 2
creative: false
objectives:
- goal:
- Use the `drill` command (e.g. `drill down` when on top of the
intended letter) to mark the sequence of letters that
spells `C`{=entity}`O`{=entity}`W`{=entity} within the designated playfield.
- Use the `drill` command (e.g. `drill down` when on top of the intended letter) to mark the sequence of letters that spells `C`{=entity}`O`{=entity}`W`{=entity} within the designated playfield.
- |
The sequence may appear horizontally in either the
leftward or rightward direction,
@ -199,7 +197,6 @@ objectives:
end;
as base {checkSoln};
robots:
- name: base
display:

View File

@ -7,7 +7,7 @@ robots:
display:
attr: robot
char: 'Ω'
loc: [0,0]
loc: [0, 0]
dir: east
devices:
- treads
@ -63,7 +63,7 @@ world:
palette:
'o': [ice, rock, cell]
'.': [ice, null, cell]
upperleft: [1,-1]
upperleft: [1, -1]
map: |
..............................
..............................

View File

@ -53,7 +53,6 @@ robots:
- [1, bit (0)]
program: |
run "scenarios/Fun/_logo-burst/coordinator.sw"
known: [boulder, tree, water, wavy water]
world:
upperleft: [0, 0]

View File

@ -1,15 +1,14 @@
version: 1
name: Curry
author: Brent Yorgey
description: Race to make a bowl of `curry`{=entity} as quickly as possible.
See the Swarm wiki for more information on Swarm speedrunning.
description: Race to make a bowl of `curry`{=entity} as quickly as possible. See the Swarm wiki for more information on Swarm speedrunning.
objectives:
- goal:
- Make a bowl of curry as quickly as possible!
condition: as base {has "curry"}
robots:
- name: base
loc: [0,0]
loc: [0, 0]
dir: north
heavy: true
display:

View File

@ -1,15 +1,14 @@
version: 1
name: Forester
author: Brent Yorgey
description: Race to harvest 1024 `tree`{=entity}s as quickly as possible.
See the Swarm wiki for more information on Swarm speedrunning.
description: Race to harvest 1024 `tree`{=entity}s as quickly as possible. See the Swarm wiki for more information on Swarm speedrunning.
objectives:
- goal:
- Harvest 1024 `tree`{=entity}s as quickly as possible!
condition: as base {n <- count "tree"; return (n >= 1024)}
robots:
- name: base
loc: [0,0]
loc: [0, 0]
dir: north
heavy: true
display:

View File

@ -1,15 +1,14 @@
version: 1
name: Mithril
author: Brent Yorgey
description: Race to mine some `mithril`{=entity}.
See the Swarm wiki for more information on Swarm speedrunning.
description: Race to mine some `mithril`{=entity}. See the Swarm wiki for more information on Swarm speedrunning.
objectives:
- goal:
- Mine some `mithril`{=entity} as quickly as possible!
condition: as base {has "mithril"}
robots:
- name: base
loc: [0,0]
loc: [0, 0]
dir: north
heavy: true
display:

View File

@ -28,34 +28,34 @@ robots:
- treads
- welder
entities:
- name: fence
display:
attr: wood
char: '#'
description:
- Impassable barrier
properties: [known, unwalkable]
- name: gate key
display:
attr: iron
char: 'k'
description:
- Can open a closed gate
properties: [known, portable]
- name: closed gate
display:
attr: wood
char: '|'
description:
- Cannot pass through this
properties: [known, unwalkable]
- name: open gate
display:
attr: wood
char: '/'
description:
- Can pass through this
properties: [known]
- name: fence
display:
attr: wood
char: '#'
description:
- Impassable barrier
properties: [known, unwalkable]
- name: gate key
display:
attr: iron
char: 'k'
description:
- Can open a closed gate
properties: [known, portable]
- name: closed gate
display:
attr: wood
char: '|'
description:
- Cannot pass through this
properties: [known, unwalkable]
- name: open gate
display:
attr: wood
char: '/'
description:
- Can pass through this
properties: [known]
recipes:
- in:
- [1, closed gate]
@ -74,8 +74,8 @@ world:
'k': [grass, gate key]
upperleft: [0, 0]
map: |
......
..###.
Ωk|*#.
..###.
......
......
..###.
Ωk|*#.
..###.
......

View File

@ -40,6 +40,6 @@ world:
palette:
'>': [grass, null, base]
'Å': [stone, copper mine]
upperleft: [0,0]
upperleft: [0, 0]
map: |

View File

@ -8,7 +8,6 @@ creative: false
attrs:
- name: robotWithBackground
bg: "#880088"
- name: rainbow1
fg: "#ffadad"
- name: rainbow2
@ -23,7 +22,6 @@ attrs:
fg: "#a0c4ff"
- name: rainbow7
fg: "#bdb2ff"
- name: rainbow1bg
bg: "#ffadad"
- name: rainbow2bg
@ -38,7 +36,6 @@ attrs:
bg: "#a0c4ff"
- name: rainbow7bg
bg: "#bdb2ff"
- name: redOnYellow
fg: "#ff0000"
bg: "#ffff00"
@ -115,7 +112,6 @@ entities:
description:
- c7
properties: [known]
- name: color1bg
display:
char: ' '
@ -165,7 +161,6 @@ entities:
description:
- c7bg
properties: [known]
- name: color1f
display:
char: '█'
@ -286,7 +281,6 @@ world:
'Ω': [blank, null, base]
'α': [blank, null, companion]
'β': [blank, null, companion2]
'.': [blank]
'1': [blank, color1]
'2': [blank, color2]
@ -295,7 +289,6 @@ world:
'5': [blank, color5]
'6': [blank, color6]
'7': [blank, color7]
'T': [blank, color1bg]
'U': [blank, color2bg]
'V': [blank, color3bg]
@ -303,7 +296,6 @@ world:
'X': [blank, color5bg]
'Y': [blank, color6bg]
'Z': [blank, color7bg]
'a': [blank, color1f]
'b': [blank, color2f]
'c': [blank, color3f]
@ -311,7 +303,6 @@ world:
'e': [blank, color5f]
'f': [blank, color6f]
'g': [blank, color7f]
'y': [blank, blueBackround]
'z': [blank, greenForeground]
'R': [blank, redYellow]

View File

@ -41,12 +41,12 @@ world:
'T': [grass, tree]
upperleft: [-4, 4]
map: |
.........
.........
.........
.........
......T..
.........
.........
.Ω.......
.........
.........
.........
.........
.........
......T..
.........
.........
.Ω.......
.........

View File

@ -28,31 +28,31 @@ world:
'x': [grass, gumball machine]
upperleft: [-1, 2]
map: |
...
.x.
.Ω.
...
...
.x.
.Ω.
...
entities:
- name: gumball machine
display:
attr: red
char: 'G'
description:
- Yields a gumball when drilled
- Yields a gumball when drilled
properties: [unwalkable, known]
- name: gumball
display:
attr: blue
char: 'o'
description:
- Dispensed from a gumball machine
- Dispensed from a gumball machine
properties: [portable]
recipes:
- in:
- [1, gumball machine]
- [1, gumball machine]
out:
- [1, gumball machine]
- [1, gumball]
- [1, gumball machine]
- [1, gumball]
required:
- [1, drill]
- [1, drill]
time: 1

View File

@ -39,9 +39,9 @@ world:
'T': [grass, tree]
upperleft: [0, 0]
map: |
.........
......T..
.........
.........
.Ω.......
.........
.........
......T..
.........
.........
.Ω.......
.........

View File

@ -45,6 +45,6 @@ world:
'.': [grass, erase]
upperleft: [4, -1]
map: |
J........
.Ω.......
.........
J........
.Ω.......
.........

View File

@ -48,9 +48,9 @@ world:
'T': [grass, tree]
upperleft: [0, 0]
map: |
.........
......T..
.........
.........
.Ω.......
.........
.........
......T..
.........
.........
.Ω.......
.........

View File

@ -80,10 +80,10 @@ world:
'T': [grass, tree]
upperleft: [0, 0]
map: |
.........
..o.i.b..
.........
..T...*..
.........
Ω.......@
.........
.........
..o.i.b..
.........
..T...*..
.........
Ω.......@
.........

View File

@ -8,9 +8,9 @@ objectives:
condition: |
as base {has "tree"}
prerequisite:
logic:
not:
id: grab_flower
logic:
not:
id: grab_flower
- id: grab_flower
teaser: Grab flower
goal:
@ -68,14 +68,14 @@ robots:
- treads
- turbocharger
entities:
- name: turbocharger
display:
attr: silver
char: 't'
description:
- Allows one to "stride" across multiple cells
properties: [known, portable]
capabilities: [movemultiple]
- name: turbocharger
display:
attr: silver
char: 't'
description:
- Allows one to "stride" across multiple cells
properties: [known, portable]
capabilities: [movemultiple]
known: [tree, flower, boulder, water]
world:
palette:
@ -87,16 +87,16 @@ world:
'w': [grass, water]
upperleft: [0, 0]
map: |
..............
......*.......
..............
......w.......
..............
...www........
.*.wwwΩ....T..
...www@.......
..............
..............
..............
......*.......
..............
..............
......*.......
..............
......w.......
..............
...www........
.*.wwwΩ....T..
...www@.......
..............
..............
..............
......*.......
..............

View File

@ -42,13 +42,13 @@ robots:
attr: robot
invisible: true
entities:
- name: crate
display:
attr: wood
char: '▪'
description:
- Pushable crate
properties: [known, portable, unwalkable]
- name: crate
display:
attr: wood
char: '▪'
description:
- Pushable crate
properties: [known, portable, unwalkable]
known: [tree, flower, boulder, water]
world:
palette:
@ -61,8 +61,8 @@ world:
'x': [grass, crate]
upperleft: [0, 0]
map: |
..............
......w.......
.....@Ωx.x....
......*..j....
......*.......
..............
......w.......
.....@Ωx.x....
......*..j....
......*.......

View File

@ -4,8 +4,7 @@ creative: false
description: Stop a robot using halt
objectives:
- goal:
- The robot next to you is holding a flower, but is stuck in an
infinite loop. Get the flower!
- The robot next to you is holding a flower, but is stuck in an infinite loop. Get the flower!
condition: |
as base {has "flower"}
solution: |
@ -47,10 +46,10 @@ world:
'.': [grass]
upperleft: [0, 0]
map: |
.........
.........
.........
...^Ω....
.........
.........
.........
.........
.........
.........
...^Ω....
.........
.........
.........

View File

@ -44,7 +44,7 @@ world:
'*': [grass, flower]
upperleft: [76, -89]
map: |
*.*.
Ω*.*
*.*.
J*.*
*.*.
Ω*.*
*.*.
J*.*

View File

@ -7,12 +7,12 @@ objectives:
- condition: |
as base { n <- count "tree"; return (n >= 4) }
goal:
- Get 4 trees
- Get 4 trees
solution: |
grab; move; grab; move; grab; move; grab
robots:
- name: base
loc: [0,0]
loc: [0, 0]
dir: east
devices:
- logger

View File

@ -6,7 +6,7 @@ objectives:
- condition: |
as base { n <- count "tree"; return (n == 0) }
goal:
- Get rid of your trees.
- Get rid of your trees.
solution: |
place "tree"; move; move;
place "tree"; move; move;
@ -14,7 +14,7 @@ solution: |
place "tree"
robots:
- name: base
loc: [0,0]
loc: [0, 0]
dir: east
devices:
- logger

View File

@ -6,12 +6,12 @@ objectives:
- condition: |
as base { n <- count "tree"; return (n == 1) }
goal:
- Get a tree.
- Get a tree.
solution: |
grab
robots:
- name: base
loc: [0,0]
loc: [0, 0]
dir: east
devices:
- logger

View File

@ -8,22 +8,22 @@ description: |
of ticks that they `wait`.
objectives:
- goal:
- |
`grab` the "tree".
- |
`grab` the "tree".
condition: |
as base {has "tree"}
solution: |
move;
move;
wait 10;
x <- harvest;
if (x == "flower") {
turn right;
move;
move;
wait 10;
x <- harvest;
if (x == "flower") {
turn right;
move;
grab;
} {
return "";
};
grab;
} {
return "";
};
robots:
- name: base
dir: east

View File

@ -56,43 +56,43 @@ robots:
invisible: true
char: J
entities:
- name: torch
display:
attr: wood
char: 't'
description:
- Can set things on fire
properties: [known, portable]
capabilities: [ignite]
- name: fuse
display:
attr: wood
char: '~'
description:
- Reliably combustible
combustion:
ignition: 1
duration: [8, 8]
product: null
properties: [known, portable, combustible]
- name: dynamite
display:
attr: red
char: '!'
description:
- Explosive material
combustion:
ignition: 1
duration: [2, 2]
product: crater
properties: [known, portable, combustible]
- name: crater
display:
attr: rock
char: '@'
description:
- Result of explosive excavation
properties: [known]
- name: torch
display:
attr: wood
char: 't'
description:
- Can set things on fire
properties: [known, portable]
capabilities: [ignite]
- name: fuse
display:
attr: wood
char: '~'
description:
- Reliably combustible
combustion:
ignition: 1
duration: [8, 8]
product: null
properties: [known, portable, combustible]
- name: dynamite
display:
attr: red
char: '!'
description:
- Explosive material
combustion:
ignition: 1
duration: [2, 2]
product: crater
properties: [known, portable, combustible]
- name: crater
display:
attr: rock
char: '@'
description:
- Result of explosive excavation
properties: [known]
known: [ash, tree, log, board, paper, cotton]
world:
palette:
@ -107,27 +107,27 @@ world:
'.': [grass]
upperleft: [0, 0]
map: |
..iiii....bbbb..TT..llll....iiii.....
..iiii....bbbb..TT..llll....iiii.....
..iiii....bbbb..TT..llll....iiii.....
..iiii....bbbb..TT..llll....iiii.....
..iiii....bbbb..TT..llll....iiii.....
..iiii....bbbb..TT..llll....iiii.....
..TTTT....TTTT..TT..TTTT....TTTT.....
..TTTT....TTTT..TT..TTTT....TTTT.....
................TT...................
................TT...................
iiiiiiiiiii.....TT....FFFFF...FFFFF..
......iiiiii....TT....F...F...F...F..
iiiiiiiiiiiii...TT....F...F...F...F..
......iiiiiiii........F...F...F...F..
iiiiiiiiiiiiiii..Ω.FFFF...FFFFF...d..
......iiiiiiii.......................
iiiiiiiiiiiii.....qqqqqqqqqqqqqqqq...
......iiiiii......qqqqqqqqqqqqqqqq...
iiiiiiiiiii.......qqqqqqqqqqqqqqqq...
..................qqqqqqqqqqqqqqqq...
..................qqqqqqqqqqqqqqqq...
..................qqqqqqqqqqqqqqqq...
..................qqqqqqqqqqqqqqqq...
..................qqqqqqqqqqqqqqqq...
..iiii....bbbb..TT..llll....iiii.....
..iiii....bbbb..TT..llll....iiii.....
..iiii....bbbb..TT..llll....iiii.....
..iiii....bbbb..TT..llll....iiii.....
..iiii....bbbb..TT..llll....iiii.....
..iiii....bbbb..TT..llll....iiii.....
..TTTT....TTTT..TT..TTTT....TTTT.....
..TTTT....TTTT..TT..TTTT....TTTT.....
................TT...................
................TT...................
iiiiiiiiiii.....TT....FFFFF...FFFFF..
......iiiiii....TT....F...F...F...F..
iiiiiiiiiiiii...TT....F...F...F...F..
......iiiiiiii........F...F...F...F..
iiiiiiiiiiiiiii..Ω.FFFF...FFFFF...d..
......iiiiiiii.......................
iiiiiiiiiiiii.....qqqqqqqqqqqqqqqq...
......iiiiii......qqqqqqqqqqqqqqqq...
iiiiiiiiiii.......qqqqqqqqqqqqqqqq...
..................qqqqqqqqqqqqqqqq...
..................qqqqqqqqqqqqqqqq...
..................qqqqqqqqqqqqqqqq...
..................qqqqqqqqqqqqqqqq...
..................qqqqqqqqqqqqqqqq...

View File

@ -16,14 +16,14 @@ entities:
attr: portal_in
char: "o"
description:
- Portal entrance
- Portal entrance
properties: [known]
- name: telepad exit
display:
attr: portal_out
char: "o"
description:
- Portal exit
- Portal exit
properties: [known]
robots:
- name: base

View File

@ -4,8 +4,8 @@ description: |
Validate proper flip/rotate of portal waypoints
objectives:
- goal:
- |
`grab` the "bitcoin"
- |
`grab` the "bitcoin"
condition: |
as base {has "bitcoin"}
solution: |
@ -23,14 +23,14 @@ entities:
attr: portal_in
char: "o"
description:
- Portal entrance
- Portal entrance
properties: [known]
- name: telepad exit
display:
attr: portal_out
char: "o"
description:
- Portal exit
- Portal exit
properties: [known]
robots:
- name: base

View File

@ -8,24 +8,24 @@ attrs:
bg: "#ff5d00"
objectives:
- goal:
- |
`place` the "flower" on the white cell.
- |
`place` the "flower" on the white cell.
condition: |
j <- robotnamed "judge";
as j {ishere "flower"}
solution: |
def doN = \n. \f. if (n > 0) {f; doN (n - 1) f} {}; end;
doN 23 move;
f <- grab;
doN 23 move;
place f;
def doN = \n. \f. if (n > 0) {f; doN (n - 1) f} {}; end;
doN 23 move;
f <- grab;
doN 23 move;
place f;
entities:
- name: telepad entrance
display:
attr: portal_in
char: "o"
description:
- Portal entrance
- Portal entrance
properties: [known]
robots:
- name: base

View File

@ -4,12 +4,12 @@ description: |
Locomote backwards without access to the turn command
objectives:
- goal:
- |
`grab` the "flower".
- |
`grab` the "flower".
condition: |
as base {has "flower"}
solution: |
backup; backup; grab;
backup; backup; grab;
robots:
- name: base
dir: north

View File

@ -40,11 +40,11 @@ robots:
program: |
build {move; say (format parent)}
solution: |
listen; build {move; say (format parent)}
listen; build {move; say (format parent)}
objectives:
- goal:
- Check that system robots build system robots and normal robots do not.
- This check is performed in integration tests.
- Check that system robots build system robots and normal robots do not.
- This check is performed in integration tests.
condition: |
r2 <- robotNumbered 2;
r3 <- robotNumbered 3;
@ -57,8 +57,8 @@ world:
'.': [grass]
upperleft: [0, 0]
map: |
.........
.........
...Ω..r..
.........
.........
.........
.........
...Ω..r..
.........
.........

View File

@ -4,8 +4,8 @@ description: |
Surface and underground with portals.
objectives:
- goal:
- |
`place` the "flower" on the white cell.
- |
`place` the "flower" on the white cell.
condition: |
j <- robotnamed "judge";
as j {ishere "flower"}
@ -24,14 +24,14 @@ entities:
attr: portal_in
char: "o"
description:
- Portal entrance
- Portal entrance
properties: [known]
- name: telepad exit
display:
attr: portal_out
char: "o"
description:
- Portal exit
- Portal exit
properties: [known]
robots:
- name: base

View File

@ -15,14 +15,14 @@ entities:
attr: portal_in
char: "o"
description:
- Portal entrance
- Portal entrance
properties: [known]
- name: telepad exit
display:
attr: portal_out
char: "o"
description:
- Portal exit
- Portal exit
properties: [known]
robots:
- name: base

View File

@ -4,8 +4,8 @@ description: |
Demonstrate that system robots can be placed in any subworld.
objectives:
- goal:
- |
`give` the "flower" to the robot underground.
- |
`give` the "flower" to the robot underground.
condition: |
j <- robotnamed "judge";
as j {has "flower"}
@ -24,14 +24,14 @@ entities:
attr: portal_in
char: "o"
description:
- Portal entrance
- Portal entrance
properties: [known]
- name: telepad exit
display:
attr: portal_out
char: "o"
description:
- Portal exit
- Portal exit
properties: [known]
robots:
- name: base

View File

@ -7,10 +7,10 @@ description: |
on subworld.
objectives:
- goal:
- |
`give` the "bitcoin" to the robot in the "root" world.
- |
First obtain it from the robot living underground.
- |
`give` the "bitcoin" to the robot in the "root" world.
- |
First obtain it from the robot living underground.
condition: |
j <- robotnumbered 1;
as j {has "bitcoin"}
@ -29,14 +29,14 @@ entities:
attr: portal_in
char: "o"
description:
- Portal entrance
- Portal entrance
properties: [known]
- name: telepad exit
display:
attr: portal_out
char: "o"
description:
- Portal exit
- Portal exit
properties: [known]
robots:
- name: base

View File

@ -15,14 +15,14 @@ entities:
attr: portal_in
char: "o"
description:
- Portal entrance
- Portal entrance
properties: [known]
- name: telepad exit
display:
attr: portal_out
char: "o"
description:
- Portal exit
- Portal exit
properties: [known]
robots:
- name: base

View File

@ -47,7 +47,7 @@ robots:
- transponder
inventory:
- [1, treads]
program:
program: |
give base "treads";
known: []
world:

View File

@ -1,9 +1,6 @@
version: 1
name: Custom unwalkability
description: The base robot cannot walk through trees.
The scenario shall be failed if the robot
manages to walk through the tree by moving
three cells to the east.
description: The base robot cannot walk through trees. The scenario shall be failed if the robot manages to walk through the tree by moving three cells to the east.
objectives:
- goal:
- Get the flower
@ -35,7 +32,7 @@ robots:
- dictionary
- net
unwalkable:
- tree
- tree
known: [tree, flower, bitcoin]
world:
palette:
@ -47,4 +44,3 @@ world:
upperleft: [0, 0]
map: |
BfTb

View File

@ -74,21 +74,21 @@ entities:
char: '@'
attr: rock
description:
- Pushable rock
- Pushable rock
properties: [known, unwalkable, portable]
- name: lemon
display:
char: 'o'
attr: gold
description:
- Sour fruit
- Sour fruit
properties: [known, portable]
- name: lemonade
display:
char: 'c'
attr: gold
description:
- Sweet drink
- Sweet drink
properties: [known, portable]
recipes:
- in:

View File

@ -116,21 +116,21 @@ entities:
char: '@'
attr: rock
description:
- Pushable rock
- Pushable rock
properties: [known, unwalkable, portable]
- name: lemon
display:
char: 'o'
attr: gold
description:
- Sour fruit
- Sour fruit
properties: [known, portable]
- name: lemonade
display:
char: 'c'
attr: gold
description:
- Sweet drink
- Sweet drink
properties: [known, portable]
recipes:
- in:

View File

@ -59,9 +59,9 @@ structures:
'g': [stone, boulder]
mask: '.'
map: |
..g
..g
ggg
..g
..g
ggg
known: [boulder, mountain, water]
world:
name: root

View File

@ -34,12 +34,12 @@ robots:
- [50, mithril]
- [50, cotton]
solution: |
move;
place "quartz";
move;
place "quartz";
move;
place "mithril";
move;
place "quartz";
move;
place "quartz";
move;
place "mithril";
structures:
- name: donut
structure:
@ -78,10 +78,10 @@ structures:
'l': [stone, copper pipe]
'g': [stone, iron gear]
map: |
rllllr
lIIIIl
lIIIgg
rlllgg
rllllr
lIIIIl
lIIIgg
rlllgg
- name: precious
recognize: [north]
structure:
@ -92,9 +92,9 @@ structures:
's': [stone, silver]
'm': [stone, mithril]
map: |
qgs
gsq
qqm
qgs
gsq
qqm
- name: smallish
recognize: [north]
structure:
@ -104,8 +104,8 @@ structures:
'm': [stone, mithril]
'c': [stone, cotton]
map: |
qqm
cqq
qqm
cqq
known: [flower, log, rock, copper pipe, iron plate]
world:
name: root

View File

@ -42,9 +42,9 @@ structures:
palette:
'g': [stone, pixel (G)]
map: |
ggg
ggg
ggg
ggg
ggg
ggg
known: [pixel (G)]
world:
name: root

View File

@ -45,13 +45,13 @@ robots:
inventory:
- [3, silver]
solution: |
move;
turn left;
place "silver";
move; move;
place "silver";
move; move;
place "silver";
move;
turn left;
place "silver";
move; move;
place "silver";
move; move;
place "silver";
structures:
- name: chessboard
recognize: [north]
@ -61,10 +61,10 @@ structures:
'g': [stone, gold]
's': [stone, silver]
map: |
gsgs
sgsg
gsgs
sgsg
gsgs
sgsg
gsgs
sgsg
known: [water, gold, silver]
world:
name: root

View File

@ -43,12 +43,12 @@ robots:
- [1, gold]
- [1, silver]
solution: |
move;
place "silver";
move; move; move;
turn left;
move; move; move; move;
place "gold";
move;
place "silver";
move; move; move;
turn left;
move; move; move; move;
place "gold";
structures:
- name: chessboard
recognize: [north]
@ -58,10 +58,10 @@ structures:
'g': [stone, gold]
's': [stone, silver]
map: |
gsgs
sgsg
gsgs
sgsg
gsgs
sgsg
gsgs
sgsg
world:
name: root
dsl: |

View File

@ -52,11 +52,11 @@ structures:
palette:
'b': [stone, board]
map: |
bbbbbbb
bbbbbbb
bbbbbbb
bbbbbbb
bbbbbbb
bbbbbbb
bbbbbbb
bbbbbbb
bbbbbbb
bbbbbbb
known: [board]
world:
dsl: |

View File

@ -25,12 +25,12 @@ robots:
- [50, mithril]
- [50, cotton]
solution: |
move;
place "quartz";
move;
place "quartz";
move;
place "mithril";
move;
place "quartz";
move;
place "quartz";
move;
place "mithril";
structures:
- name: precious
recognize: [north]
@ -42,9 +42,9 @@ structures:
's': [stone, silver]
'm': [stone, mithril]
map: |
qgs
gsq
qqm
qgs
gsq
qqm
- name: smallish
recognize: [north]
structure:
@ -54,8 +54,8 @@ structures:
'm': [stone, mithril]
'c': [stone, cotton]
map: |
qqm
cqq
qqm
cqq
world:
name: root
dsl: |

View File

@ -82,10 +82,10 @@ structures:
'b': [stone, board]
mask: '.'
map: |
bbbb
b..b
b..b
bbbb
bbbb
b..b
b..b
bbbb
known: [board, rock]
world:
dsl: |
@ -107,5 +107,3 @@ world:
B.r...
......
......

View File

@ -32,8 +32,8 @@ robots:
- [1, gold]
- [1, silver]
solution: |
move;
place "gold";
move;
place "gold";
structures:
- name: large
recognize: [north]
@ -43,9 +43,9 @@ structures:
'g': [stone, gold]
's': [stone, silver]
map: |
sss
ggs
ggs
sss
ggs
ggs
- name: small
recognize: [north]
structure:
@ -53,8 +53,8 @@ structures:
palette:
'g': [stone, gold]
map: |
gg
gg
gg
gg
world:
name: root
dsl: |
@ -66,6 +66,6 @@ world:
'B': [grass, null, base]
upperleft: [0, 0]
map: |
.sss
.ggs
B.gs
.sss
.ggs
B.gs

View File

@ -33,8 +33,8 @@ robots:
- [1, gold]
- [1, silver]
solution: |
move; move; move;
place "gold";
move; move; move;
place "gold";
structures:
- name: topleft
recognize: [north]
@ -44,9 +44,9 @@ structures:
'g': [stone, gold]
's': [stone, silver]
map: |
ss
gg
gg
ss
gg
gg
- name: bottomright
recognize: [north]
structure:
@ -55,9 +55,9 @@ structures:
'g': [stone, gold]
's': [stone, silver]
map: |
gg
gg
ss
gg
gg
ss
world:
name: root
dsl: |
@ -69,8 +69,8 @@ world:
'B': [grass, null, base]
upperleft: [0, 0]
map: |
..ss.
..gg.
B.g.g
...gg
...ss
..ss.
..gg.
B.g.g
...gg
...ss

View File

@ -37,7 +37,7 @@ robots:
inventory:
- [1, pixel (R)]
solution: |
noop;
noop;
structures:
- name: red_jewel
recognize: [north]
@ -45,18 +45,18 @@ structures:
palette:
'r': [stone, pixel (R)]
map: |
rrr
rrr
rrr
rrr
rrr
rrr
- name: green_jewel
recognize: [north]
structure:
palette:
'g': [stone, pixel (G)]
map: |
ggg
ggg
ggg
ggg
ggg
ggg
known: [pixel (R), pixel (G)]
world:
name: root

View File

@ -31,9 +31,9 @@ robots:
- [1, gold]
- [1, silver]
solution: |
move;
place "silver";
grab;
move;
place "silver";
grab;
structures:
- name: chessboard
recognize: [north]
@ -43,10 +43,10 @@ structures:
'g': [stone, gold]
's': [stone, silver]
map: |
gsgs
sgsg
gsgs
sgsg
gsgs
sgsg
gsgs
sgsg
world:
name: root
dsl: |

View File

@ -49,9 +49,9 @@ robots:
- [1, pixel (G)]
- [1, pixel (B)]
solution: |
move; move; move;
swap "pixel (G)";
swap "pixel (B)";
move; move; move;
swap "pixel (G)";
swap "pixel (B)";
structures:
- name: red_jewel
recognize: [north]
@ -62,11 +62,11 @@ structures:
's': [stone, silver]
'j': [stone, pixel (R)]
map: |
ggggg
gsssg
gsjsg
gsssg
ggggg
ggggg
gsssg
gsjsg
gsssg
ggggg
- name: green_jewel
recognize: [north]
structure:
@ -76,11 +76,11 @@ structures:
's': [stone, silver]
'j': [stone, pixel (G)]
map: |
ggggg
gsssg
gsjsg
gsssg
ggggg
ggggg
gsssg
gsjsg
gsssg
ggggg
- name: blue_jewel
recognize: [north]
structure:
@ -90,11 +90,11 @@ structures:
's': [stone, silver]
'j': [stone, pixel (B)]
map: |
ggggg
gsssg
gsjsg
gsssg
ggggg
ggggg
gsssg
gsjsg
gsssg
ggggg
known: [gold, silver, pixel (R), pixel (G), pixel (B)]
world:
name: root

View File

@ -15,7 +15,7 @@ robots:
- name: base
dir: east
solution: |
noop;
noop;
structures:
- name: tee
recognize: [north, south, east, west]

View File

@ -20,10 +20,10 @@ robots:
inventory:
- [4, flower]
solution: |
move; move;
turn right;
move; move;
place "flower";
move; move;
turn right;
move; move;
place "flower";
structures:
- name: tee
recognize: [north, south, east, west]

View File

@ -78,40 +78,40 @@ entities:
attr: red
char: 'S'
description:
- Reads the 'tag' of an item
- Reads the 'tag' of an item
properties: [portable]
capabilities: [hastag, tagmembers]
- name: canteloupe
display:
char: 'c'
description:
- Melon
- Melon
tags: [edible, fruit]
properties: [portable]
- name: mushroom
display:
char: 'm'
description:
- Nature's tiny umbrella.
- Nature's tiny umbrella.
tags: [edible, fungus]
properties: [portable]
- name: gravel
display:
char: 'g'
description:
- Crushed rock
- Crushed rock
properties: [portable]
- name: strawberry
display:
char: 's'
description:
- Just ripe
- Just ripe
tags: [edible, fruit]
- name: peach
display:
char: 'g'
description:
- Just ripe
- Just ripe
tags: [edible, fruit]
properties: [portable]
world:

View File

@ -36,13 +36,13 @@ robots:
attr: robot
invisible: true
entities:
- name: crate
display:
attr: wood
char: 'c'
description:
- Pushable crate
properties: [known, pushable]
- name: crate
display:
attr: wood
char: 'c'
description:
- Pushable crate
properties: [known, pushable]
known: [water]
world:
dsl: |
@ -54,4 +54,4 @@ world:
'x': [grass, crate]
upperleft: [0, 0]
map: |
Ωxxj
Ωxxj

View File

@ -18,7 +18,7 @@ solution: |
build {require "boat"; move; move}
robots:
- name: base
loc: [0,0]
loc: [0, 0]
dir: east
devices:
- 3D printer

View File

@ -18,7 +18,7 @@ solution: |
build {require "boat"; move; move}
robots:
- name: base
loc: [0,0]
loc: [0, 0]
dir: east
devices:
- logger
@ -46,7 +46,7 @@ entities:
attr: water
char: ' '
description:
- An infinite ocean of water.
- An infinite ocean of water.
properties: [known, portable, growable, liquid]
growth: [0,0]
growth: [0, 0]
yields: water

View File

@ -17,7 +17,7 @@ solution: |
build {require "boat"; move; require "boat"; move}
robots:
- name: base
loc: [0,0]
loc: [0, 0]
dir: east
devices:
- 3D printer

View File

@ -17,7 +17,7 @@ solution: |
build { log "hi"; require 5 "rock"; mp; mp; mp; mp }
robots:
- name: base
loc: [0,0]
loc: [0, 0]
dir: east
devices:
- 3D printer

View File

@ -15,7 +15,7 @@ solution: |
build { require 5 "rock"; move; place "rock"; move; place "rock" }
robots:
- name: base
loc: [0,0]
loc: [0, 0]
dir: east
devices:
- 3D printer

View File

@ -31,7 +31,7 @@ solution: |
reprogram fred {require "boat"; require "metal drill"; move; move}
robots:
- name: base
loc: [0,0]
loc: [0, 0]
dir: east
devices:
- 3D printer

View File

@ -31,7 +31,7 @@ solution: |
reprogram fred {require "boat"; require "metal drill"; move; require 3 "rock"; move; require 5 "rock"}
robots:
- name: base
loc: [0,0]
loc: [0, 0]
dir: east
devices:
- 3D printer

View File

@ -72,56 +72,47 @@ entities:
attr: copper'
char: 'A'
description:
- A place in the mountains where raw copper ore can be mined.
As it is hidden inside a mountain, a tunnel needs to be
first drilled through, so that the vein becomes accessible.
- A place in the mountains where raw copper ore can be mined. As it is hidden inside a mountain, a tunnel needs to be first drilled through, so that the vein becomes accessible.
properties: [unwalkable]
- name: iron vein
display:
attr: iron'
char: 'A'
description:
- A place in the mountains where raw iron ore can be mined.
As it is hidden inside a mountain, a tunnel needs to be
first drilled through, so that the vein becomes accessible.
- A place in the mountains where raw iron ore can be mined. As it is hidden inside a mountain, a tunnel needs to be first drilled through, so that the vein becomes accessible.
properties: [unwalkable]
recipes:
## TOY DRILL
- in:
- [1, copper vein]
- [1, copper vein]
out:
- [1, copper mine]
- [1, copper ore]
- [1, copper mine]
- [1, copper ore]
required:
- [1, drill]
- [1, drill]
time: 42
- in:
- [1, iron vein]
- [1, iron vein]
out:
- [1, iron mine]
- [1, iron ore]
- [1, iron mine]
- [1, iron ore]
required:
- [1, drill]
- [1, drill]
time: 64
## METAL DRILL
- in:
- [1, copper vein]
- [1, copper vein]
out:
- [1, copper mine]
- [1, copper ore]
- [1, copper mine]
- [1, copper ore]
required:
- [1, metal drill]
- [1, metal drill]
time: 6
- in:
- [1, iron vein]
- [1, iron vein]
out:
- [1, iron mine]
- [1, iron ore]
- [1, iron mine]
- [1, iron ore]
required:
- [1, metal drill]
- [1, metal drill]
time: 7

View File

@ -30,7 +30,7 @@ solution: |
place "detonator";
robots:
- name: base
loc: [0,0]
loc: [0, 0]
dir: east
devices:
- treads

View File

@ -10,12 +10,12 @@ objectives:
- condition: |
t <- time; return (t == 2)
goal:
- |
This is a dummy condition that just ensures the base has had
time to run the problematic `build` command. The scenario
*should* generate an error message; what we really care about is
whether the generated error message is correct, which is checked
in test/integration/Main.hs .
- |
This is a dummy condition that just ensures the base has had
time to run the problematic `build` command. The scenario
*should* generate an error message; what we really care about is
whether the generated error message is correct, which is checked
in test/integration/Main.hs .
solution: |
build {move; turn right; loc <- whereami}
robots:
@ -31,7 +31,7 @@ world:
palette:
'Ω': [grass, null, base]
'.': [grass]
upperleft: [0,1]
upperleft: [0, 1]
map: |
.
Ω

View File

@ -15,20 +15,19 @@ objectives:
botAlive <- isAlive "bot";
return (baseAlive && not botAlive);
} { return false; }
solution: |
log "start";
wait 5;
robots:
- name: base
loc: [0,0]
loc: [0, 0]
dir: east
devices:
- treads
- logger
program: "move"
- name: bot
loc: [0,-1]
loc: [0, -1]
dir: east
devices:
- treads

View File

@ -16,7 +16,7 @@ solution: |
log "I will win next tick!"; place "lambda";
robots:
- name: base
loc: [0,0]
loc: [0, 0]
dir: east
devices:
- logger
@ -24,7 +24,7 @@ robots:
inventory:
- [1, lambda]
- name: sleeper
loc: [0,-1]
loc: [0, -1]
dir: east
devices:
- logger

View File

@ -38,7 +38,7 @@ solution: |
forever {tryharvest}
robots:
- name: base
loc: [0,0]
loc: [0, 0]
dir: east
devices:
- logger
@ -46,7 +46,7 @@ robots:
inventory:
- [1, lambda]
- name: planter
loc: [0,0]
loc: [0, 0]
dir: east
devices:
- logger
@ -66,9 +66,9 @@ entities:
attr: plant
char: 'W'
description:
- A fast-growing weed.
- A fast-growing weed.
properties: [known, portable, growable]
growth: [1,2]
growth: [1, 2]
- name: Win
display:
attr: device
@ -79,6 +79,6 @@ entities:
world:
palette:
'.': [grass]
upperleft: [0,0]
upperleft: [0, 0]
map: |
.

View File

@ -25,7 +25,7 @@ solution: |
forever {tryharvest}
robots:
- name: base
loc: [0,0]
loc: [0, 0]
dir: east
devices:
- logger
@ -33,7 +33,7 @@ robots:
inventory:
- [1, lambda]
- name: planter
loc: [0,0]
loc: [0, 0]
dir: east
devices:
- logger
@ -55,12 +55,12 @@ entities:
attr: plant
char: 'W'
description:
- A fast-growing weed.
- A fast-growing weed.
properties: [known, portable, growable]
growth: [1,2]
growth: [1, 2]
world:
palette:
'.': [grass]
upperleft: [0,0]
upperleft: [0, 0]
map: |
.

View File

@ -18,7 +18,7 @@ solution: |
move; harvest; move; grab; turn right; move; grab; grab; harvest; grab
robots:
- name: base
loc: [0,0]
loc: [0, 0]
dir: east
devices:
- treads

View File

@ -14,14 +14,14 @@ solution: |
place "tree"
robots:
- name: base
loc: [5,0]
loc: [5, 0]
dir: east
devices:
- treads
- logger
- grabber
inventory:
- [1, tree]
- [1, tree]
world:
palette:
'.': [grass]

View File

@ -21,7 +21,7 @@ solution: |
}
robots:
- name: base
loc: [0,0]
loc: [0, 0]
dir: east
devices:
- logger
@ -59,7 +59,7 @@ entities:
attr: water
char: 'G'
description:
- A satellite navigation device.
- A satellite navigation device.
properties: [known, portable]
capabilities: [senseloc]
- name: Tardis
@ -67,6 +67,6 @@ entities:
attr: water
char: '█'
description:
- Bigger on the inside.
- Bigger on the inside.
properties: [known, portable]
capabilities: [senseloc, teleport]

Some files were not shown because too many files have changed in this diff Show More