Minimalist Human Resource Machine interpreter
Project description
Human Resource Machine interpreter
This is a Python interpreter for programs from the Human Resource Machine game from Tomorrow Corporation. Within the game, one may copy/paste the source code that is edited visually. This library features a parser for this code, and CLI/TUI interpreters.
>>> from hrm import HRM
>>> hrm = HRM.parse('level-2.hrm')
>>> hrm([1, 0, -2, 'D', 0, 0, 8, 9])
1 0 -2 D 0 0 8 9
Installation
Just run pip install hrm-interpreter
or clone the git repository and run pip install
.
Language
If not copied from the game, a program may be written from scratch:
- each command is given on a single line
- empty line and spacing are non-significant
- comments start with
--
and extend up to the end of the line - code is case insensitive (in the implementation at least)
- available commands are:
inbox
grab a value from the INBOXoutbox
put the value at hand to the OUTBOXcopyfrom N
put a copy of the value at hand onto floor tileN
copyto N
grab a copy of the value stored on floor tileN
.add N
add the value stored on tileN
to that at hand, the result goes to handssub N
substract the value stored on tileN
from that at hand, the result goes to hands. This operation is valid on letters in which case it computes the distance between two letters in the alphabetbumpup N
increments the value stored on tileN
and copies to result to handsbumpdn N
decrements the value stored on tileN
and copies to result to handsjump L
jump to labelL
that should be defined somewhere asL:
alone on its linejumpz L
jump to labelL
if the value at hand is zerojumpn L
jump to labelL
if the value at hand is less that zero
- if a tile number
N
is[A]
, the tile from which the value is copied is that whose number is stored on tileA
- labels are defined using
NAME:
Copying code from the game may yield other elements (like drawn tiles labels and comments), but they are ignored in this implementation.
API
Class hrm.HRM
is the interpreter itself, it is initialised as either:
HRM(prog)
creates an instance to run an already parsed programprog
HRM.parse(source)
creates an instance by parsing source codesource
, it can be a file path, an opened file, or source code given as astr
HRM.from_level(number)
load a level from the game and returns the corresponding instance, together with a valid inbox and tiles initial state to run it
An HRM
instance hrm
can execute the program for various inputs using method hrm(inbox, floor=[], verbose=False)
which runs the program with inbox
(list
of integers or uppercase characters).
If floor
is provided, it initialised the tiles on the floor.
If verbose
is True
, program execution is traced.
Limitations
- the parser is not very robust
Differences with the game:
- the number of available tiles is not limited
- indirection
[A]
is not limited tocopyfrom
- a label may be jumped to from several locations in the program, which is never the case in code copied from the game as each jump is attached to exactly one target
Borrowed files
- the content of directory
solutions
is from atesgoral.github.io/hrm-solutions - file
hrm/levels.json
is from github.com/atesgoral/hrm-level-data
Licence
Appart from the borrowed files above, this package is (C) 2023 Franck Pommereau franck.pommereau@univ-evry.fr and released under the MIT Licence, see LICENCE
for details.
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
File details
Details for the file hrm-interpreter-1.5.tar.gz
.
File metadata
- Download URL: hrm-interpreter-1.5.tar.gz
- Upload date:
- Size: 191.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.0.0 CPython/3.9.2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | b5c2b3f4528eef527d713160b8d8830adde344218810f3774d2244ed7a2e736c |
|
MD5 | 496df0a21e4b6a32d7be10c453f13bc1 |
|
BLAKE2b-256 | 2aff6ced57d07547b1b625b5f7c9761eebeeda7d8f045a84c1335265827ca80e |