packages feed

swarm-0.4: data/scenarios/Challenges/wolf-goat-cabbage.yaml

version: 1
name: Lake crossing
author: Karl Ostmo
description: |
  Deposit all three items on the eastern shore of the lake.
creative: false
robots:
  - name: base
    display:
      char: 'U'
      attr: wood
    dir: [0, 1]
    devices:
      - ADT calculator
      - branch predictor
      - treads
      - lodestone
      - compass
      - comparator
      - counter
      - dictionary
      - grabber
      - lambda
      - logger
      - mirror
      - net
      - scanner
      - strange loop
      - boat
  - name: east_detector
    system: true
    dir: [0, 1]
    display:
      invisible: true
  - name: west_detector
    system: true
    dir: [0, 1]
    display:
      invisible: true
objectives:
  - goal:
      - |
        Ferry all three of the wolf, goat, and cabbage across the lake.
        However, only one of these can be carried at a time.
      - |
        Furthermore, if left unattended together, the wolf will eat the goat,
        or the goat will eat the cabbage.
    condition: |
      run "data/scenarios/Challenges/_wolf-goat-cabbage/together-on-east-bank.sw";
    prerequisite:
      previewable: true
      logic:
        not:
          or: 
            - id: unattended_disaster
            - id: carrying_two_items
  - goal:
      - Carrying two items at once is not allowed!
    condition: |
      as base {
        run "data/scenarios/Challenges/_wolf-goat-cabbage/multi-item-possession.sw";
      };
    id: carrying_two_items
    optional: true
    hidden: true
  - id: unattended_disaster
    teaser: Something was eaten
    goal:
      - Leaving an animal alone with its food is not allowed!
    condition: |
      run "data/scenarios/Challenges/_wolf-goat-cabbage/unattended-together.sw";
    optional: true
    hidden: true    
solution: |
  run "scenarios/Challenges/_wolf-goat-cabbage/cross.sw"
entities:
  - name: wolf
    display:
      char: 'w'
      attr: silver
    description:
      - A wolf. Likes to eat goats.
    properties: [known, portable]
  - name: goat
    display:
      char: 'g'
      attr: sand
    description:
      - A goat. Likes to eat cabbage.
    properties: [known, portable]
  - name: cabbage
    display:
      char: 'c'
      attr: green
    description:
      - A cabbage.
    properties: [known, portable]
known: [water, boulder]
seed: 0
world:
  palette:
    'A': [stone, boulder]
    'B': [stone, boulder, base]
    '.': [grass]
    'e': [grass, null, east_detector]
    '~': [dirt, water]
    'w': [grass, wolf]
    'g': [grass, goat]
    'c': [grass, cabbage, west_detector]
  upperleft: [0, 0]
  map: |-
    AAAAAAAAAAAAAAAAAAAAA
    AAAAAAAA~~~~~AAAAAAAA
    AAAAA~~~~~~~~~~~AAAAA
    AAA~~~~~~~~~~~~~~~AAA
    AA~~~~~~~~~~~~~~~~~AA
    Aw~~~~~~~~~~~~~~~~~.A
    Ag~~~~~~~~~~~~~~~~~.A
    Ac~~~~~~~~~~~~~~~~~eA
    AB~~~~~~~~~~~~~~~~~AA
    AAA~~~~~~~~~~~~~~~AAA
    AAAAA~~~~~~~~~~~AAAAA
    AAAAAAAA~~~~~AAAAAAAA
    AAAAAAAAAAAAAAAAAAAAA