21 / 27
Aug 2014

It's been a quite a long time, I doubt that there will be any action over the issue, They have surely forgotten the issue and gone past that. I am also pretty sure that nobody is making sure that clone problems of the contests don't get added in the classical sets. It was only an exception for our contest problems. In my understanding of the issue, one of the editorial board members felt insulted when the author decided to not to tell him a test case. You can see the conversation in the IOPC_14A problems thread. Ideally in my opinion, author should have given the test case, but the decision of taking the problems down was really silly. I have already stated my opinions in this forum and problem page already.

Finally, I have little expectations from spoj admins. The issue in my humble opinion, was not that what editorial board members has made it. Nevertheless due to the incidence, at least I am not that motivated or in a mood of putting up any more problems on spoj regardless of the outcome of the issue. So for me, at least the things are settled. Thank you editorial members for all your replies, I really like to thank Mitch Schwartz for all his replies and fruitful discussions. I would like to say sorry to him if some error has been done on our side.

1 month later

Problems with public solutions:

  • problems from other contests (like CodeChef, TopCoder, etc.)
  • problems described on blogs
  • codes available on e.g. GitHub, Ideone

Possible solutions that have been mentioned here and my own:
  • leaving these problems in classical problemset
    Cons:
    [list][*]people can copy solutions from the web and get points which will decrease points and ranks of honest users

Pros:
  • leaving valueable and profesionally made problems
[/*:m]
[li]making new, equivalent problems with new descriptions, titles and codes
Cons:
    [*]big amount of work needed[/li]
    [li]need of many Problem Setters or Editorial Board involvement[/li]
    [li]users who post those codes can easily modify their codes or articles with little effort[/li]
    [li]users may resubmit their codes when they realize that it's the same task as the one that has been deleted[/li]

Pros:
  • problems of good quality are still available
  • honest users will probably remember they have solved new problems and just resubmit their codes
[/*:m]
[li]changing problem constraints so that public solutions won't pass
Cons:
    [*]it is very probable that user who posted their solution online has made a better code than 50% of users who solved the problem – that means that if we make his problem get WA/TLE/RE many honest users will loose points[/li]
    [li]many problems already require a very good algorithm and making constraints won't be possible (without making optimal solutions get TLE/RE)[/li]
    [li]users who solved such a problem in language like Python, Java, C# or Jostner will probably get TLE[/li]

Pros:
  • problems will be of better quality (assuming that the more difficult problem is, the better it is)
  • some solutions will become invalid
[/*:m]
[li]moving such problems to the tutorial problemset
Cons:
    [*]these problems will attract less users as they won't get any points for them (and they might be interesting and Problem Setters who made them deserve to have them in classical problemset)[/li]
    [li]honest users will loose even more points and indirectly loose time spent on these problems[/li]
    [li]if users continue to upload their valid solutions to the internet, more and more good problems will end in tutorial problemset[/li]
    [li]spam in the tutorial problemset - there will be easy problems (which is good) but also hard problems but with public solution; so if a user feel that a problem is too hard he'll assume there is a public solution and look for it instead of leaving the problem (the problemset will loose it's purpose)[/li]

Pros:
  • dishonest users won't get points for copying codes for these problems
[/*:m]
[li]change them to challenge problems
Cons:
    [*]huge amount of work needed[/li]
    [li]need of many Problem Setters involved (Editorial Board can't modify tests)[/li]
    [li]spam in the challenge problemset (not all problems suit to be a challenge)[/li]
    [li]if users continue to upload their valid solutions to the internet, more and more good problems will end in challenge problemset[/li]
    [li]if user with top solution published his code, making the problem a challenge won't change a thing[/li]

Pros:
  • good problems will stay
  • honest users will get more points than dishonest ones
[/*:m]
[li]ban users who copy published codes
Cons:
    [*]assuming that users will report suspicious ones, admins will have to check their codes and look for them online (to make sure they ban for a reason)[/li]
    [li]some users might have benefited from published articles and copied the code knowing what it does (and I talk about ones that first try to solve a problem on their own)[/li]

Pros:
  • some cheaters will be banned
  • users might be afraid to copy someone else's code as they can be banned
  • problems will be left as they are
[/*:m]
[li]new section whit public solutions - solving a problem in this section would have to result in getting 0 points, as with tutorial problemset so this solution is equivalent to moving all problems in the tutorial section (except for the last con)[/li][/list:u]
The solution in my opinion should be:
  • users should inform authors of problems if they think that some user pasted a code in their problem – then Problem Setter (if he's active and has time) can check suspect's code and look for it online; if he finds it – notify an admin in a special thread and the user will be banned
  • leaving all past problems as they are (grandfather clauses, as cyclops mentioned)
  • making a problemset „contests” or „from_contests” or even not making a problemset but entire contest in which there would be problems from other competitions
    [list][*]if separate contest – problemsets would be names of the competitions (e.g. IOPC 2013)
  • if another problemset – problems would have prefixed in the titles with competition names (e.g. [IOPC2013] Title)
[/*:m]
[li]these problems would give no points[/li]
[li]this solution won't solve the problem of cheaters, though (except for maybe decreasing the number of problems in which one can cheat)[/li]
[li]perhaps, in the distant future, there can be an option „allow others to see your codes in problemset XXX” and users who tick this checkbox will be able to see codes of others in problems they got AC but others will also be able to see their codes[/li][/list:u]
But regarding the solution I agree with – I'm also a user on Polish SPOJ and there was a time that somebody made a new problemset with a title of some contest and moved all problems from this contest to this problemset (with 0 points for each problem). And I was (and am) against that. Because I and many users spend some time solving these problems and we thought that we earned the points. And even implementing cyclops's idea with leaving past problems as they are and adding only new ones to this problemset would not satisfy me if we were talking about SPOJPL. The reason I find this solution okay on main SPOJ is that there are already enough problems there and it won't hurt to give 0 points for some if they come from other contests. I'm saying it just for the sake of SPOJPL (we don't want any changes there, in my opinion).

I really hope this can be done easily.
Many thanks for this great answer.

2 months later

I have another solution, in my opinion, how about leaving all clone problems in classical but making all clone problem worth 0 points for only those who copy other solution?

This can be checked after judging process using byte-by-byte (basic) comparation with every another user's accepted solution, if it match with another user's code, then he will get no points from this problem (considered unsolved problem) but only he will see that his (cheat) code get accepted. For example codeforces.com already implemented this "basic" code comparation technique, if there are two or more users submit exactly same code, they will get "skipped" verdict.

Of course this "basic" detector isn't perfect, user can still cheat by just renaming some variable, this detection can be perfected using edit-distance (advanced) comparation, if two code having edit-distance

Although "basic" detection still not perfect (it still have chance to cheat), it has been proven to reduce the many cheater on codeforces.com site (I've seen many "skipped" verdict there). If this "basic" detection is not enough it still possible to calculate the O(45 Billion) complexity in less than 1 second using parallel algorithm and enough processor available. Another option is to check similarity of two code using heuristic edit-distance with is much faster than general edit-distance but less strict detection (still better than "basic" detection). This solution need some SPOJ system change, but it's one of many possible solutions (solutions that has been described by francky and others above).

What do you think about this Solution?

I'm not sure if this is really a good solution for several reasons.
Reason 1:
In many languages you can change every return character (chr 10) or chr(13) with a random string of whitespace without affecting the code's working.
So it shouldn't be too difficult to change the downloaded code by changing every return in a lenghty string of whitespace.
In fact this can also be done with spaces but you have to be careful not to change spaces inside output strings.
You can also add numerous comments into the code.
Combine this with some clever variable renaming, et voila.
Reason 2:
For some problems you can precompute the answers and store them hardcoded in your submission.
If several members did this chances are high that your edit distance thingy will unjustified flag their submission as cheating. (I think you will lose your pole position for several problems).

Reason 3)
For some challenge problems where shortest code is asked chances are also high that your code resembles other's code too much even if you're not cheating.
(e.g. KAMIL)

In fact I think that problem setters simply must make a choice:
design a problem for a contest or design a problem for SPOJ. If they want both they should make the decision not to publish solutions on the contest's site.
Is that asked too much?

Those recent days I saw very good comments, mails, and ideas. All very different solutions ; well justified.
I didn't see majority rising.

It's a shame to see good problems not to be placed in classical ; and I had to move some : it was hard to do.
We saw some clones will almost 100% of cheat on them ; it's a non sens to be in classical in those conditions.
I think it's a real problem ; we can't do nothing imho ; but if majority wants that, it'll be that.

Create a new problem set for clones : I no more think it's the best idea : it would promote more the copy/paste, and kill more the problem. Who really wants that ?

I really think psetter (only original psetter) should change description, title, problem_CODE, no more provide reference, to such clone,
so that they can't be easily tagged and linked to an official solution.
I know it's a bit more work, but not too much.

In addition, and independently, I think some scripts should run to prevent deviant psolvers.
wisfaq pointed the risk of false positive : we can easily avoid most of them (eg skip comments and special chars ; skip some problems, ...); it's better not to publicly publish the ways to make simple and quite efficient scripts ; but we can debate in private for that. I think some basic checks could be enough to prevent most of problems ; even if stop all is impossible.
Moreover users with rather bad attitude should be hidden (and really hidden) from rank list, points... and their AC shouldn't decrease points of regular users as it does. They will silently continue their misfit without consequences on other users.

my 2c, as always, hope to be constructive.

Hi all,

I was not aware of this discussion. I recently added the problems of SWERC 2014 and they were moved to tutorial due to this discussion. I asked permission of the other judges to publish these problems on SPOJ, so I won't modify them nor remove the SWERC reference.

I was surprised with this. When I was more active on SPOJ, I don't recall seeing such a tight control and cheater hunt. It may be that I didn't follow the relevant threads on this forum, but I've always seen SPOJ as a training/learning platform. There are no prizes here, besides maybe bragging rights.

I'm not saying cheating is ok, I'm just saying that unlike sites like Topcoder, I don't see the need to invest the scarce time SPOJ staff have to x-ray user submissions (which I believe will involve a lot of manual work).

One thing I think you should be careful about is that people train for team contests and solve problems together, later submitting the same code. I don't think this should be considered cheating.

As everyone agrees, problems from contests like ICPC regionals do not belong to tutorial. As soon as SWERC problems were moved to tutorial, people essentially stopped trying to solve them.
A new section dedicated to contest practice and separate ranking would be ok. Otherwise I think these problems belong to classical.

I believe there is great value in reading other people's code. I suggested a long time ago in this forum to introduce this in SPOJ:
- Allow a user to lock a problem after successfully solving it.
- After locking, no further submissions will affect the ranking of that problem.
- After locking, the user can read other's submissions.

I fail to see any difference, besides, perhaps, 5min of googling time?
It is virtually impossible to remove a good % of the problems with publicly available solutions, so the grandfather clauses are the only way to go.

While a decision is not made (I see it's been months in discussion), I think problems should stay in classical.