Skip to main content
This is a pre-production deployment of Warehouse. Changes made here affect the production instance of PyPI (
Help us improve Python packaging - Donate today!

hac - Helper for Algorithm Competitions

Project Description

hac is extensible and configurable command-line tool for algorithm competitions. It:

  • prepares directory structures and source files,
  • prepares runner files (scripts used to test solutions),
  • downloads test-cases.


Recommended to install as non-root:

$ pip install --upgrade --user hac


Example 1

A) For problems “A”, “B” and “C” from Codeforces contest #527 prepare:

  • source file from cpp highest priority template (has lowest X among cpp.X language templates),
  • runner from sh.5 template (interpolated for cpp language template),
  • test-cases downloaded from Codeforces.
$ hac -lcpp -rsh.5 codeforces/527 a b c

With default configuration all of the next lines do same as the one above:

$ hac -lcpp.5 -rsh.5 prep B C
$ hac prep B 1 c
$ hac -d2 CODEFORCES/527 1 2 3
$ hac forc/527 a b c

B) Write solution for problem “B” and test it on test-cases:

$ cd 527/B
$ # ... modify B.cpp
$ ./ -e  # test solution on test-cases
$ ./ -c  # clean generated outputs

C) Debug solution for problem “B” on 2nd test-case:

$ ./ -d 2

Example 2

Display general information about hac:

$ hac --help
$ hac --version

Display information about hac and selected site/problems:

$ hac -v show codeforces/527     # verbose
$ hac -V show codeforces/527     # terse



Site \ Fetching problems from Contest Archive YES NO
Rosalind   YES
Sphere online judge   PARTIAL
Codechef NO NO

Runner/language combinations:

  C C++ Python Java Pascal
POSIX shell sh.5 / c.5 sh.5 / cpp.5 sh.5 / py.5 sh.5 / java.5 sh.5 / pas.5


User specific configuration should be placed in ~/.config/hac directory by default (to change configuration directory you need to set HAC_CONFIG_DIR environment variable).

In order to configure hac according to your preferences:

  1. copy default configuration files in a temporary directory,
$ HAC_CONFIG_DIR=~/temp_config hac --copy-config
  1. customize interesting files in ~/temp_config,
  2. move only customized files to ~/.config/hac, e.g.
$ mkdir -p ~/.config/hac
$ cp ~/temp_config/hacrc ~/.config/hacrc
  1. remove temporary directory.
$ rm -r ~/temp_config

This approach is desirable because only configuration files that differ from the default ones should be present in configuration directory, thereby effectively overshadowing the default configuration.


For more information about hac please see User manual

For information about contributions please check Contributing chapter from User manual.

Change Log

Please see CHANGELOG.


Please see LICENSE.

Release History

This version
History Node


History Node


History Node


History Node


History Node


History Node


Download Files

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

Filename, Size & Hash SHA256 Hash Help File Type Python Version Upload Date
(42.3 kB) Copy SHA256 Hash SHA256
Wheel py2.py3 Oct 16, 2015
(33.7 kB) Copy SHA256 Hash SHA256
Source None Oct 16, 2015

Supported By

Elastic Elastic Search Pingdom Pingdom Monitoring Dyn Dyn DNS Sentry Sentry Error Logging CloudAMQP CloudAMQP RabbitMQ Heroku Heroku PaaS Kabu Creative Kabu Creative UX & Design Fastly Fastly CDN DigiCert DigiCert EV Certificate Google Google Cloud Servers