This repo contains working solutions, in hopes of exchanging ideas to collaboratively come up with the most/size.speed optimized solutions (or simply to help those out there who are stuck). Even though the programs are created through a drag-and-drop interface within the game, copy/paste from/to the clipboard works as assembly source code seen in this repo.
The file naming convention used is:
Under the solutions folder, inside a subfolder called <level>-<level name>-<size par>.<speed par>, <size>.<speed>[.<type>]-<author>.asm
Where size and speed are the number of commands and steps of the solution, which is deemed by the game as size and speed optimized if they are equal to or less than the par numbers in its folder's name.
The optional type field is a descriptor for the type of solution (e.g. the algorithm used, whether it's an exploit etc.)
author is the GitHub username of the author of the solution.
For example, solutions/07-Zero-Exterminator-4.23/4.23-atesgoral.asm means the solution is both size and speed optimized and is by user atesgoral.
Please issue a pull request while keeping in mind:
- The file naming convention is met
- If you're a new contributor, edit the contributors.yml file to add yourself
- Make sure your new solution passes tests (see below)
You need Node.js 18+ and Yarn to be installed.
yarn to install all dependencies
yarn test to run tests.
The tests involve the static/runtime analysis and benchmarking of each solution by utilizing:
- hrm-parser by @nrkn for static analysis of programs
- hrm-cpu by @nrkn for running programs and runtime analytics
- hrm-level-data by @atesgoral for level metadata for providing level constraints
- hrm-level-inbox-generator by @atesgoral for randomly generating level-appropriate inboxes for benchmarking
- hrm-level-outbox-generator by @atesgoral for determining the expected outboxes for given level + inbox for benchmarking