DMOJ / online-judge

A modern open-source online judge and contest platform system.
https://dmoj.ca
GNU Affero General Public License v3.0
951 stars 364 forks source link

Multiple files (classes) submission #691

Open sokol-kosta opened 6 years ago

sokol-kosta commented 6 years ago

First of all, thanks for the great tool you have implemented. I finally managed to install it and it looks great.

One thing that I am not quite sure how to fix is the ability to upload multiple files. In Java programs this would be a nice feature to have. Is that on purpose? If yes, do you have plans to extend the tool with this feature supported?

Thanks.

Xyene commented 6 years ago

Thanks for the interest 😄

Problems which require multiple files to be submitted are a rarity in contests, and I can only think of one such problem off the top of my head... typically, if a contestant wishes to split up their code into multiple class files, they can do so in the same submission -- by making the non-entry-point classes package-local:

public class Solution {
    public static void main(String[] argv) {
        IOHelper io = new IOHelper();
        ...
    }
}

class IOHelper {
    ...
}

The times when separate source files are really needed are for example problems which have some sort of "encode" and "decode" stages where the user's solution is ran twice. We don't support these sorts of problems, since they're too few and far between.

If you need this sort of functionality for use case, you'd probably need to modify the bridge to send extra source files, and the judge's executors to accept them. It wouldn't be a huge undertaking, but it's not something that's used often enough in OI contests to have been implemented.

sokol-kosta commented 6 years ago

Thanks a lot for your quick and exhaustive answer. As a matter of fact, these tools are being used quite a lot in educations, allowing beginners to learn programming. As such, it is important for them to first work with separate files, before moving to local or inner classes. However, I understand that this is a minor utilization of the platform.

Thanks.