Available tutorials: |
Tutorial for new (and not only new) users
Tutorial for problem-setters
Tutorial for problem-setters (interactive problems)
Tutorial for contest-setters
Tutorial for problem-setters
This is tutorial for those who want to add new problems to SPOJ problemsets. It will get you through a little complex procedure of adding the problems.
Who is a problem-setter?
It's a person who adds new problems.
How to become a problem-setter?
If you are interested in helping us build our problem base, or if you would like to organize a contest of your own, please fill out the form (if you are a newcomer to the site, or have solved fewer than 20 problems, a little additional information about yourself is welcome but by no means obligatory). You will receive a reply with detailed instructions.
Please note that we reserve the right to correct, recategorise, modify or remove problems which are available for solving in one of main problemsets. This does not concern problems added specifically for use in private contests which are not visible in the archives of the online judge.
How to begin
You can start
here (problem list → My own problems)
There you can view all problems you have already added. To create a new problem click on Add problem link at the top of the page.
As mentioned before, to add a new problem click (of course first you should log in) on problem list link on the left side of the page and then click the Add problem link at the top of the page. To edit existing problem go to its page and click on the Edit problem link at the top of the page.
Adding a problem
Here is the screen shot with some sample data:
of the fields
(when you add or edit a problem, move pointer over green question marks to see the hints):
Unique problem code, consists of 3 up to 8 capital letters.
Just a problem name that will be displayed in the NAME column in the problem list.
Group of people
related to this problem.
The group must exist (you can create new one clicking "add group" menu position).
You should use this option if you want to grant access to your problems for the other co-authors.
Source code limit
Source code size limit of solutions sent by users, measured in bytes.
Origin of the problem (for example link).
Type of the problem:
- Binary - "accepted" or "wrong answer".
- Maximize score - higher score means better solution.
- Minimize score - lower score means better solution.
How the problem is judged:
- Pyramid (PIII733) - automatically.
- Manual - manually by problem setter.
Placement in main problem set
Choose in which
section your problem should appear.
If you are going to test your problem, it's incomplete or has no English version,
check none option - problem will be available only for you.
Check this option if you want to allow submitting solutions to this problem.
Available for use in 3rd party contests
Is it possible to use your problem in other contests?
This option is deprecated.
Source code of high
level judge - used for multiple test cases and for single data set as
You can write your own judge, if you need it.
Default judge (1000. Generic masterjudge) accepts solution only if all test cases are accepted.
If you want the score to be percentage of accepted test cases, choose judge no. 1001.
Mark languages in which users can upload solutions.
Include new languages
If this option is enabled, all languages added in the future will be automatically available for this problem.
Merge all languages in ranklist
If this option is disabled participant will appear in problem's score table as many times as he changes programming language. In other case he'll appear only once.
Continue editing after saving changes
If you check this option and click Modify, problem description (modified version) will appear in new window.
Create the problem.
Check how the problem page will look like.
After you fill all required fields, click Create button and the problem will be created. Then go back to problem's page, click on the Edit problem link and continue setting problem with new options now available.
Adding non-english problem
First, you have to set Placement in main problemset to none so that your problem
won't be visible in the main problemset (i.e. in the main contest that is accessible to everyone and can be viewed
right after entering www.spoj.com). This is enough for you to use your problem in your own private contest
(how to set up your own contest? - answers can be found in this tutorial).
If you want to allow other problem setters to use your problem in their contests, check the Available for use in 3rd party contests option. On the other hand, if you want your problem to appear in some contest (either private or public - www.spoj.com, br.spoj.com, pl.spoj.com, vn.spoj.com ...), contact with the contest setter.
Editing an existing problem
Example screen shot: (with DOUGHNUT problem data).
Meaning of the fields:
Problem test sequence
Define here which test cases use to judge solution (you can upload test cases below in
Test data upload section).
Test data upload
Here you can add, modify or delete test cases and choose judges for them. Usually one
data set suffices but if you wish you can add more.
Choose whether you
want to add new test case or to modify or delete existing one.
Input and output text files are uploaded from the specified file on your computer. The provided file may be zipped or gzipped; if so, make sure it has the correct extension (.gz and .zip respectively). The size of the uploaded file may not exceed 1MB.
Choose input data (if the problem has no input data you can leave this field empty).
Choose output file (if the problem has many correct answers you can leave this field empty
and use your own judge).
Test case judge
Add your own judge or choose between predetermined judges:
Ignores extra whitespaces - the standard judge for binary problems, i.e. problems of ACM-type: Accepted or Wrong Answer. Output generated by submitted program should be the same as test case output file (except whitespaces).
Ignores FP rounding UP tp 10-2 - the standard judge for binary problems, i.e. problems of ACM-type: Accepted or Wrong Answer. Use this judge for numerical problems. Output generated by submitted program should be the same as test case output (with accuracy 0.01).
Ignores FP rounding UP tp 10-6 - the standard judge for binary problems, i.e. problems of ACM-type: Accepted or Wrong Answer. Use this judge for numerical problems. Output generated by submitted program should be exactly the same as test case output (with accuracy 0.000001).
Score is source length - score for the solution equals to length of source code (only if test case was accepted).
Rejudge submission range
All submissions within specified range will be rejudged. Use this feature only in case of invalid data set, your own invalid judge, etc.
Remember: rejudging many solutions may take a lot of time - better check your test cases twice and try to avoid rejudging solutions.
Why my problem is not visible for other users? (Editorial board issue)
In case of any problems with data sets, wrong problem statements, etc., Editorial Board Members are allowed to hide the problem; after that the problem-setter will see the problem for his own purposes only - the problem will be invisible for others, and only EB Members can show it again.
Communicating with users solving your problem
To communicate with users post comments under the problem. You can use comments to publish information about test cases changes, reason of the re-judgment, etc. Please also check for new comments from users from time to time and answer their questions - comments are the main way of communication between users and problem-setters.
For now there is no comprehensive tutorial about judges but it will appear soon. You can find some useful information about writing judges here: https://www.spoj.com/forum/viewtopic.php?t=3388