Skip to main content

A CLI version of the Herbert game from Imagine Cup.

Project description

Herbert is a game I first saw in the Imagine Cup 2008 Algorithm Invitational.

The game requires you to solve a series of levels by writing small programs to control a robot named Herbert. The simpler and more elegant your solution, the more points you get.

It challenges your ability to see patterns and create algorithms to produce those patterns.

Here’s my clone of Herbert.

https://raw.githubusercontent.com/dwayne/herbert-python/master/data/images/herbert.png

Enjoy!

Installation

To install, simply use pip (or pipenv):

$ pip install herbert

Usage

To run herbert you need a level to solve and a program, that you write, that attempts to solve the level.

Suppose the level is stored in level.txt and that you wrote and saved your solution in sol.h. Then, you’d run herbert as follows:

$ herbert level.txt sol.h

It will open a curses based text user interface that allows you to run your program against the level to determine if it solves the level and how many points your solution is worth.

N.B. The data/example directory contains an example level along with 3 attempted solutions to the level. You can use it to help you understand how the game works.

An overview of the game

A level consists of empty spaces (.), walls (*), white (w) and gray (g) buttons, and a robot (u means the robot is facing upwards, r means the robot is facing towards the right, d means the robot is facing downwards, or l means the robot is facing towards the left).

N.B. You can find an example level here.

On each level there are some white buttons. To solve a level you must press all the white buttons. Your goal then is to program Herbert, in a language called “h”, to press all the white buttons while avoiding obstacles such as walls and gray buttons (walls block Herbert’s path and gray buttons reset any previously pressed white buttons to their unpressed state).

You are only allotted a certain number of “bytes” (a unit of program size) per level. Your program must use no more than this number of bytes.

Points are awarded for each white button pressed, a bonus is awarded for solving the level, and extra points are awarded for solutions that use less than the allotted maximum number of bytes.

The “h” language

It is a simple language that contains statements, procedures with zero or more parameters and recursion. Check out the tutorial here to get a better understanding of the language.

You can find examples of the language in use here, here and here.

Challenge

Try to solve the following levels (see data/levels):

Development

Recommended tools:

Clone the repository and install the dependencies:

$ git clone git@github.com:dwayne/herbert-python.git
$ cd herbert-python
$ pipenv shell
$ pipenv install --dev

You’re now all set to begin development.

Testing

Tests are written using the built-in unit testing framework, unittest.

Run all tests.

$ python -m unittest

Run a specific test module.

$ python -m unittest tests.test_interpreter

Run a specific test case.

$ python -m unittest tests.test_interpreter.ExamplesTestCase.test_example10

Resources

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

herbert-python-0.0.1a3.tar.gz (14.0 kB view details)

Uploaded Source

Built Distribution

herbert_python-0.0.1a3-py3-none-any.whl (13.9 kB view details)

Uploaded Python 3

File details

Details for the file herbert-python-0.0.1a3.tar.gz.

File metadata

  • Download URL: herbert-python-0.0.1a3.tar.gz
  • Upload date:
  • Size: 14.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.19.1 setuptools/40.2.0 requests-toolbelt/0.8.0 tqdm/4.26.0 CPython/3.7.0

File hashes

Hashes for herbert-python-0.0.1a3.tar.gz
Algorithm Hash digest
SHA256 ea72d55c29995c6bd484da7054f41aa095dc24e6324f53b9481a92e7cee1a08c
MD5 c5fcef621c7001a814bc2a0440de8212
BLAKE2b-256 a8ddf7909cf102186bd798bd06bda1512d2c80da5bfe5a06f4cf2dab3e1119b0

See more details on using hashes here.

File details

Details for the file herbert_python-0.0.1a3-py3-none-any.whl.

File metadata

  • Download URL: herbert_python-0.0.1a3-py3-none-any.whl
  • Upload date:
  • Size: 13.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.19.1 setuptools/40.2.0 requests-toolbelt/0.8.0 tqdm/4.26.0 CPython/3.7.0

File hashes

Hashes for herbert_python-0.0.1a3-py3-none-any.whl
Algorithm Hash digest
SHA256 11a8611eb68fe243b5c668fe43ef6b7ae7d919b99a5fee2625fc33f4382302c0
MD5 b9554f1cdd3a6152e749e7013441972d
BLAKE2b-256 fc6d72e1267572fb3a0a867b696fbc12155af79b67dedb0b4c839731db5e7be5

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page