{ "info": { "author": "Dwayne Crooks", "author_email": "me@dwaynecrooks.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Environment :: Console", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: POSIX :: Linux", "Programming Language :: Python", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: Implementation :: CPython" ], "description": "Herbert\n=======\n\nHerbert is a game I first saw in the `Imagine Cup 2008 Algorithm Invitational `_.\n\nThe game requires you to solve a series of levels by writing small programs to\ncontrol a robot named Herbert. The simpler and more elegant your solution, the\nmore points you get.\n\nIt challenges your ability to see patterns and create algorithms to produce\nthose patterns.\n\nHere's my clone of Herbert.\n\n.. image:: https://raw.githubusercontent.com/dwayne/herbert-python/master/data/images/herbert.png\n\nEnjoy!\n\nInstallation\n------------\n\nTo install, simply use pip (or `pipenv`_):\n\n.. code-block:: bash\n\n $ pip install herbert\n\nUsage\n-----\n\nTo run :code:`herbert` you need a **level** to solve and a **program**, that you\nwrite, that attempts to solve the level.\n\nSuppose the level is stored in :code:`level.txt` and that you wrote and saved\nyour solution in :code:`sol.h`. Then, you'd run :code:`herbert` as follows:\n\n.. code-block:: bash\n\n $ herbert level.txt sol.h\n\nIt will open a `curses `_\nbased text user interface that allows you to run your program against the level\nto determine if it solves the level and how many points your solution is worth.\n\n**N.B.** The `data/example `_\ndirectory contains an example level along with 3 attempted solutions to the\nlevel. You can use it to help you understand how the game works.\n\n**An overview of the game**\n\nA level consists of empty spaces (:code:`.`), walls (:code:`*`), white\n(:code:`w`) and gray (:code:`g`) buttons, and a robot (:code:`u` means the robot\nis facing upwards, :code:`r` means the robot is facing towards the right,\n:code:`d` means the robot is facing downwards, or :code:`l` means the robot is\nfacing towards the left).\n\n**N.B.** You can find an example level `here `__.\n\nOn each level there are some white buttons. To solve a level you must press all\nthe white buttons. Your goal then is to program Herbert, in a language called\n\"h\", to press all the white buttons while avoiding obstacles such as walls and\ngray buttons (walls block Herbert's path and gray buttons reset any previously\npressed white buttons to their unpressed state).\n\nYou are only allotted a certain number of \"bytes\" (a unit of program size) per\nlevel. Your program must use no more than this number of bytes.\n\nPoints are awarded for each white button pressed, a bonus is awarded for solving\nthe level, and extra points are awarded for solutions that use less than the\nallotted maximum number of bytes.\n\n**The \"h\" language**\n\nIt is a simple language that contains statements, procedures with zero or more\nparameters and recursion. Check out the tutorial `here `__\nto get a better understanding of the language.\n\nYou can find examples of the language in use `here `__,\n`here `__\nand `here `__.\n\n**Challenge**\n\nTry to solve the following levels (see `data/levels `_):\n\n- `Level 1 `_\n- `Level 2 `_\n- `Level 3 `_\n- `Level 4 `_\n- `Level 5 `_\n\nDevelopment\n-----------\n\nRecommended tools:\n\n - `pyenv `_\n - `pipenv`_\n\nClone the repository and install the dependencies:\n\n.. code-block:: bash\n\n $ git clone git@github.com:dwayne/herbert-python.git\n $ cd herbert-python\n $ pipenv shell\n $ pipenv install --dev\n\nYou're now all set to begin development.\n\nTesting\n-------\n\nTests are written using the built-in unit testing framework, `unittest `_.\n\nRun all tests.\n\n.. code-block:: bash\n\n $ python -m unittest\n\nRun a specific test module.\n\n.. code-block:: bash\n\n $ python -m unittest tests.test_interpreter\n\nRun a specific test case.\n\n.. code-block:: bash\n\n $ python -m unittest tests.test_interpreter.ExamplesTestCase.test_example10\n\nResources\n---------\n\n- `Herbert Programming Challenge `_ by `Wild Noodle `_\n- `Herbert Online Judge `_\n- `uHerbert `_\n\n.. _pipenv: https://github.com/pypa/pipenv\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/dwayne/herbert-python", "keywords": "herbert,imaginecup,game", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "herbert-python", "package_url": "https://pypi.org/project/herbert-python/", "platform": "", "project_url": "https://pypi.org/project/herbert-python/", "project_urls": { "Homepage": "https://github.com/dwayne/herbert-python" }, "release_url": "https://pypi.org/project/herbert-python/0.0.1a3/", "requires_dist": [ "lark-parser (==0.6.4)" ], "requires_python": "", "summary": "A CLI version of the Herbert game from Imagine Cup.", "version": "0.0.1a3" }, "last_serial": 4332679, "releases": { "0.0.1a1": [ { "comment_text": "", "digests": { "md5": "b170aa91cd0ae4855a4c0fe3f371ff89", "sha256": "1a39b7b17b58858277579fd9e864a9dc471dafa8edb750f82c8964aa6e8746a4" }, "downloads": -1, "filename": "herbert_python-0.0.1a1-py3-none-any.whl", "has_sig": false, "md5_digest": "b170aa91cd0ae4855a4c0fe3f371ff89", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 13871, "upload_time": "2018-10-02T13:26:24", "url": "https://files.pythonhosted.org/packages/76/87/fd8e573625a1b8461890ba7fc7f0b766e2815258e1906aff31f7247a4e21/herbert_python-0.0.1a1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d3216af4981e0c2481ea08a5c30615ae", "sha256": "b50f7c0e51e19d653cca9873768ef94ccc92a2961e0932ee6b64c53a86c2b852" }, "downloads": -1, "filename": "herbert-python-0.0.1a1.tar.gz", "has_sig": false, "md5_digest": "d3216af4981e0c2481ea08a5c30615ae", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13902, "upload_time": "2018-10-02T13:26:26", "url": "https://files.pythonhosted.org/packages/b3/a7/a296974b495a9cf510d98e66a06509171349532193dde8ad51bc34835602/herbert-python-0.0.1a1.tar.gz" } ], "0.0.1a2": [ { "comment_text": "", "digests": { "md5": "f4ec71c6fbabe722ddaeaf95361851bc", "sha256": "f1262e33173f99650ba8607eb7d86aceda326cfef3256020a6952b3a9932d399" }, "downloads": -1, "filename": "herbert_python-0.0.1a2-py3-none-any.whl", "has_sig": false, "md5_digest": "f4ec71c6fbabe722ddaeaf95361851bc", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 13870, "upload_time": "2018-10-02T13:43:03", "url": "https://files.pythonhosted.org/packages/62/b3/a94ead893db11d65f2f2f3b63cf40c4525d2d03d0fdee9f56adad6fe57a7/herbert_python-0.0.1a2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "fa7b8c86ddaa6947cb1184323b601108", "sha256": "fcc3f70649bff10444e909f24a3838f650afabbde1d6b975071f4e07ebce1984" }, "downloads": -1, "filename": "herbert-python-0.0.1a2.tar.gz", "has_sig": false, "md5_digest": "fa7b8c86ddaa6947cb1184323b601108", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13939, "upload_time": "2018-10-02T13:43:05", "url": "https://files.pythonhosted.org/packages/1a/07/5f6ae9f691a9319c5b1cedcafdbfafcd8ac808d4adf6539afeb861d3c4ae/herbert-python-0.0.1a2.tar.gz" } ], "0.0.1a3": [ { "comment_text": "", "digests": { "md5": "b9554f1cdd3a6152e749e7013441972d", "sha256": "11a8611eb68fe243b5c668fe43ef6b7ae7d919b99a5fee2625fc33f4382302c0" }, "downloads": -1, "filename": "herbert_python-0.0.1a3-py3-none-any.whl", "has_sig": false, "md5_digest": "b9554f1cdd3a6152e749e7013441972d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 13873, "upload_time": "2018-10-02T14:09:35", "url": "https://files.pythonhosted.org/packages/fc/6d/72e1267572fb3a0a867b696fbc12155af79b67dedb0b4c839731db5e7be5/herbert_python-0.0.1a3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c5fcef621c7001a814bc2a0440de8212", "sha256": "ea72d55c29995c6bd484da7054f41aa095dc24e6324f53b9481a92e7cee1a08c" }, "downloads": -1, "filename": "herbert-python-0.0.1a3.tar.gz", "has_sig": false, "md5_digest": "c5fcef621c7001a814bc2a0440de8212", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14006, "upload_time": "2018-10-02T14:09:37", "url": "https://files.pythonhosted.org/packages/a8/dd/f7909cf102186bd798bd06bda1512d2c80da5bfe5a06f4cf2dab3e1119b0/herbert-python-0.0.1a3.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "b9554f1cdd3a6152e749e7013441972d", "sha256": "11a8611eb68fe243b5c668fe43ef6b7ae7d919b99a5fee2625fc33f4382302c0" }, "downloads": -1, "filename": "herbert_python-0.0.1a3-py3-none-any.whl", "has_sig": false, "md5_digest": "b9554f1cdd3a6152e749e7013441972d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 13873, "upload_time": "2018-10-02T14:09:35", "url": "https://files.pythonhosted.org/packages/fc/6d/72e1267572fb3a0a867b696fbc12155af79b67dedb0b4c839731db5e7be5/herbert_python-0.0.1a3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c5fcef621c7001a814bc2a0440de8212", "sha256": "ea72d55c29995c6bd484da7054f41aa095dc24e6324f53b9481a92e7cee1a08c" }, "downloads": -1, "filename": "herbert-python-0.0.1a3.tar.gz", "has_sig": false, "md5_digest": "c5fcef621c7001a814bc2a0440de8212", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14006, "upload_time": "2018-10-02T14:09:37", "url": "https://files.pythonhosted.org/packages/a8/dd/f7909cf102186bd798bd06bda1512d2c80da5bfe5a06f4cf2dab3e1119b0/herbert-python-0.0.1a3.tar.gz" } ] }