packages feed

swarm-0.4: data/scenarios/Challenges/2048.yaml

version: 1
name: "2048"
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`
      which regrows immediately when
      it is harvested, so if you plant it, you can get as many as you want.  Your
      job is to combine `1`s in order to make a `2048`
      entity.
    - "Hint: the `format` command can turn numbers into strings!"
    condition: |
      try {
        as base {has "2048"}
      } { return false }
solution: |
  def makeN : int -> cmd unit = \n.
    if (n == 1)
      {harvest; return ()}
      {makeN (n/2); makeN (n/2); make (format n)}
  end;
  place "1";
  makeN 2048
entities:
  - name: "1"
    display:
      attr: gold
      char: "#"
    description:
    - 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.
    properties: [portable]
  - name: "4"
    display:
      attr: gold
      char: "#"
    description:
    - This is a four.  You get the idea.
    properties: [portable]
  - name: "8"
    display:
      attr: gold
      char: "#"
    description:
    - An eight.
    properties: [portable]
  - name: "16"
    display:
      attr: gold
      char: "#"
    description:
    - A 16.
    properties: [portable]
  - name: "32"
    display:
      attr: gold
      char: "#"
    description:
    - A 32.
    properties: [portable]
  - name: "64"
    display:
      attr: gold
      char: "#"
    description:
    - A 64.
    properties: [portable]
  - name: "128"
    display:
      attr: gold
      char: "#"
    description:
    - A 128.
    properties: [portable]
  - name: "256"
    display:
      attr: gold
      char: "#"
    description:
    - A 256.
    properties: [portable]
  - name: "512"
    display:
      attr: gold
      char: "#"
    description:
    - A 512.
    properties: [portable]
  - name: "1024"
    display:
      attr: gold
      char: "#"
    description:
    - A 1024.
    properties: [portable]
  - name: "2048"
    display:
      attr: gold
      char: "#"
    description:
    - A 2048.
    properties: [portable]
recipes:
  - in:
    - [2, "1"]
    out:
    - [1, "2"]
  - in:
    - [2, "2"]
    out:
    - [1, "4"]
  - in:
    - [2, "4"]
    out:
    - [1, "8"]
  - in:
    - [2, "8"]
    out:
    - [1, "16"]
  - in:
    - [2, "16"]
    out:
    - [1, "32"]
  - in:
    - [2, "32"]
    out:
    - [1, "64"]
  - in:
    - [2, "64"]
    out:
    - [1, "128"]
  - in:
    - [2, "128"]
    out:
    - [1, "256"]
  - in:
    - [2, "256"]
    out:
    - [1, "512"]
  - in:
    - [2, "512"]
    out:
    - [1, "1024"]
  - in:
    - [2, "1024"]
    out:
    - [1, "2048"]
robots:
  - name: base
    dir: [1,0]
    display:
      attr: robot
      char: "Ω"
    devices:
      - logger
      - harvester
      - dictionary
      - clock
      - workbench
      - solar panel
      - comparator
      - calculator
      - string
      - life support system
      - branch predictor
      - strange loop
      - lambda
    inventory:
      - [1, "1"]
known: [water, wavy water, flower, tree]
world:
  dsl: |
    {stone}
  palette:
    "Ω": [grass, null, base]
    "┌": [stone, upper left corner]
    "┐": [stone, upper right corner]
    "└": [stone, lower left corner]
    "┘": [stone, lower right corner]
    "─": [stone, horizontal wall]
    "│": [stone, vertical wall]
  upperleft: [-1, 3]
  map: |
    ┌─┐
    │Ω│
    └─┘