This is a command-line program for getting, testing, and submitting Kattis problem attempts!
Credit goes to Kattis and their python script for submitting files found here. Our submission script is heavily inspired by theirs.
Logo provided by @CptF1nn
You need to ensure Python 3 is installed on your system before installing.
At the end of the install, you are prompted to download a credentials/config file from Kattis.
You can get this file ahead of time at https://open.kattis.com/download/kattisrc.
You need to save it either in your home directory (C:\Users\<user>\.kattisrc
on Windows, /home/<user>/.kattisrc
on Mac/Linux), or in the directory you keep all of your problems.
To easily download and link the program, use the following command:
curl -sSLf https://raw.githubusercontent.com/Duckapple/Kat/master/install.sh | sh
This assumes you have git
and curl
installed.
Alternatively, open the file and execute the individual statements inside, if you don't want to run it directly from the internet.
Download and run our install script here, or from the latest release in the release tab.
You don't need to run as admin or anything, as it is installed for the current user only. You don't even need git
.
To get a list of commands and usage, use kattis --help
and kattis [command] --help
once installed.
kattis get problem [problem ...]
This downloads the sample input-output files for the problem and creates a directory for the problem. Inside, the test files are put in the subfolder test
, and an initial script file is waiting for your solution. To specify your language of choice for a single problem, use the command -l LANGUAGE
. Happy hacking!
kattis test/watch problem [file]
test
pipes every .in
-file into the corresponding script, while recording the output. The output is compared to the corresponding .ans
-files and supplied to a report, which tells you which tests failed and displaying failed output.
If multiple supported source files are present within the problem directory, you are prompted to choose one. Alternatively, you can supply the path to your chosen script as a second argument
If you use watch
instead of test
, then a file watcher is used on the primary script file, making the tests run when you save the file.
kattis submit problem [file]
This submits a given script to kattis for final judgement. Remember to get your configuration file from here.
If multiple supported source files are present within the problem directory, you are prompted to choose one. Alternatively, you can supply the path to your chosen script as a second argument.
kattis archive/unarchive problem [problem ...]
Move a problem (or several) between a ./.archive
folder and the current folder.
kattis list [-p PAGE] [-l LIMIT] [-c] [sorting/filter [sorting/filter ...]]
List problems from the Kattis instance.
--compact
shows only the names of the problems.
Possible sortings:
- Leaving it out sorts problems alphabetically by display name
easiest
sorts easiest problem first, by pointshardest
sorts hardest problem first
If you add several filters, then they are used in a union style (unsolved solved
would allow every problem again)
Possible filters:
unsolved
allows any problem not solved, same astried untried
solved
allows any solved problemtried
allows problems tried beforeuntried
allows problem never even tried before
kattis contest [-c CONTEST_URL] get [-s] [-o] [-l LANGUAGE]
Get all problems from a contest, optionally submitting already completed problems.
You can provide only the ID of a contest if you have the hostname in the config, otherwise the whole URL should be provided.
kattis read [-c] problem [problem ...]
Read the problem descriptions in your browser.
--console
prints the description in the console, but test cases and embedded LaTeX takes up a lot of space, making it hard to use.
kattis work [-h] [-oafs] [sorting/filter [sorting/filter ...]]
This command initiates a loop where you can run commands by just typing their command, and where problems are automatically opened according to filters and sorting for the list
command. You can specify arguments for submit
and get
to this command, which will be applied when running them in the loop.
If you add a script file for your favourite language to the boilerplate
folder, it is copied into every new problem you initialize with the get
command. That way, you can quickly get started on solving problems.
Once you have used almost any command once, configurations have appeared in your .kattisrc
.
The great part about them is that they are very extensible, allowing you to register additional languages and the like.
You probably wouldn't want to change the username or token fields manually, but here you can. These fields are the primary reason for getting the .kattisrc
from the Kattis instance.
This section contains information about which kattis instance you are currenctly using. If you want to change the hostname, you should either remove the other options (relying on known fallback-routes shared among Kattis instances) or replace the hostname in each.
The primary config options for the Kat tool, and the ones you would like to change the most often.
language
designates the language used for creating the initial script file in the get
command.
openfilecommand
(WIP) designates a way to open a file after get
or unarchive
, letting you work just a bit faster on problems.
workcommand
specifies which arguments you would want to call the work
command with, since there are an awful lot of arguments possible.
Here, you can associate a file type with a specific language. This is used as the sole source of truth when determining language, so make sure it works with your Kattis instance before editing this config.
These commands are used to initialize problem folders for languages which cannot use only script files. If you use a build system you would like to use for a language in Kattis, then here is where that command goes.
These commands tell Kat how to run and test your submission attempt.
Without a command for your language, the test
and run
commands do not work.
There are some indicators which are replaced when running the command:
@f
is replaced with the file name@c
is replaced with the problem name
These commands tell Kat that script files should be compiled before being run.
See the section on Run commands above for info on indicators.
For C++ support it is required that a C++ compiler exists in PATH and is specified under [Compile commands]
in your .kattisrc
.
By default the compiler used is g++
.
Some languages, like Java, enforce a naming convention for their files. If any other language enforces capital first letter, then add it here.
Currently, only PascalCase is supported, create an issue or edit the namingSchemeConverters
in helpers/fileUtils.py
to add more cases.