The binary that you install is called mapm by default.

When running view or find, the program will look for the PAGER environment variable and pipe the output through it, and if none is found, it will just print the contents in your terminal. It also respects NO_COLOR (a description of NO_COLOR).

If you are using less as your pager, you will also want to set LESS='-R' to interpret color codes (unless you also have NO_COLOR set).


Usage: mapm -h for short help and mapm --help for long help

Displays the help page.

If the --help flag is passed for a subcommand, it will display the help page for that specific subcommand.


Usage: mapm --problem-dir PROBLEM_DIR ... or mapm --problem-dir=PROBLEM_DIR

For the current command, ignore the value of profile and fetch problems from the given directory. (This makes it easier to compile past contests, since there is no need to change the active profile or symlink the problems directory to ~/.config/mapm/problems.)


Usage: mapm profile <set PROFILENAME/get>

Gets or sets the active profile. Under the hood, mapm is just working with the file $CONFIG/profile.


Usage: mapm profile list

Lists all profiles in the mapm directory.


Usage: mapm profile get

Prints the active profile.


Usage: mapm profile set [PROFILENAME]

Sets the active profile to PROFILENAME, if one is passed in. If not, then one is


Usage: mapm build [FILES...]

Builds the contest associated with FILE, which should be a .yml. Multiple contest directories can be passed in, but this is not recommended.

mapm will throw an error if the problem count is wrong or some problem or its solution has undefined variables.


Usage: mapm view [PROBLEM_NAMES...] --hide/show [KEYS...]

An example is

$ mapm view alexander-balls

By default, view will show every attribute of the problem. To modify this, you can either use the hide or show subcommand.

The hide and show subcommands are mutually exclusive.

You may pass in multiple problems.


If you want to show certain attributes, you should use the show subcommand. For instance, to show the difficulty attribute of a problem, you could run

$ mapm view alexander-balls --show difficulty


Perhaps you want to view every attribute of the problem besides the solutions. You could run

$ mapm view alexander-balls --hide solutions


Usage: mapm find [KEY<OPERATOR>VALUE...] --hide/show [KEYS...]

Returns all problems that satisfy every KEY<OPERATOR>VALUE argument. Valid values of <OPERATOR> are =, <, >, <=, >=.

If no KEY<OPERATOR>VALUE arguments are passed, then every problem is returned.

An example is

$ mapm find difficulty=3

which will return the name of every problem with difficulty 3.

To check for existence of a key, you can just use mapm find --KEY. So to look for every problem with the solutions key (which implies they have a solution), run

$ mapm find solutions

You can check for non-equality or non-existence of a key by prepending it with an ! character. For instance,

$ mapm find !difficulty=3

returns all problems without difficulty 3. If you specifically want a difficulty to exist but want it not to be 3, then you can try

$ mapm find difficulty !difficulty=3

If your valid difficulties are 1-5, then you can get all problems with difficulties 1 and 2 by running

$ mapm find difficulty !difficulty=3 !difficulty=4 !difficulty=5

Since all your difficulties are integers (which is necessary in order to use any comparison operator besides =), you may also run

$ mapm find difficulty<=2


$ mapm find difficulty<3

If you want to check for problems that don't have solutions (so you can write them), run

$ mapm find !solutions

Each flag with a comparison operator implicitly requires the key to exist in the problem file. Thus, to get all problems with a difficulty not set to 3, run

$ mapm find difficulty !difficulty=3


The functionality is identical to show from view.


The functionality is identical to hide from view.


Usage: mapm edit [PROBLEM_NAMES]...

For example, to edit the problem alexander-balls, run

mapm edit alexander-balls

On Windows the command opens Notepad, and for Unix the EDITOR environment variable is used.

You can edit multiple problems at once by passing in multiple problem names. For instance,

mapm edit alexander-balls alien-ages


Usage: mapm rename <TARGET> <DESTINATION>

Does exactly what it sounds like. You do not need to, and should not, pass in the .yml extension at the end.


Usage: mapm delete <PROBLEM_NAMES>...

Same instructions as rename.


Usage: mapm preview <PROBLEMS>...

Compiles a preview PDF of the problem passed in. This is based on the preview template.


Usage: mapm preview-all [KEY<OPERATOR>VALUE]... --hide/show [KEYS]...

The usage is identical to mapm find. Note that the code that generates the preview-all PDF, which you are strongly encouraged to modify for your own use, requires all problems to have the problem and author keys, and requires all solutions to have the text and author keys. The hide and show commands also must show the problem and author keys, and mapm does not automatically show them for you (so if for whatever reason you want to hide the author, you can).