Hi,
Apparently that question has not been asked before, so I dare to.
I’m wondering why we only have access to the solutions of the other players that use the same language we chose to solve a problem (for example if I solve a problem in C, then I will only see the code of other players that solved it in C, and not those that solved it in C++ or Java or …).
I think it could actually be a good idea have access to all other solutions. When you solve a problem, it means that you have understood it and have found an algorithm that gives a correct solution in all cases. Having the opportunity to see how others have done this in other languages could be useful to learn other languages.
What do you think?
Probably because of the achievements for the different programming languages.
Well of course you can always cheat and copy-paste an existing solution, but that would be easy to detect…
I don’t think so. If you want to cheat it’s very easy to alter the code a little bit and avoid detection.
The point of this site is to have fun and to learn, hence my question: “… could be useful to learn other languages.” Those who really want to cheat can always do it.
To address your objection however, I do think that copy-pasting would quickly be discovered. There are even tools that do this automatically, see for example http://www.drdobbs.com/architecture-and-design/detecting-source-code-plagiarism/184405734 .
Actually, that was the case before. However this was a problem for the achievements.
Then I would (respectfully ;-)) suggest to either use a plagiarism detection algorithm (I’m surprised to see how different the solutions are for the few problems I solved so far, so I guess it would not return too many false positives), or perhaps to adapt the way achievements work…
Also, a rule like “if you are found cheating, your will loose half of your coding points; if you are found cheating a second time, your account will be closed” would be dissuasive enough I think.
I think it will be tricky to avoid false positive and it would be awful to send messages to honest coders saying we think they are cheaters. And if it’s too easy to be not detected people will complain about meaningless achievements…
And it’s also a matter of priority. We are currently working on the improvement of other features and we can’t do everything ;).
Okay, thank you for your answers, now at least I know the reason…
One possible solution that would be relatively easy to implement (I guess) would be to add a possibility for a player to “unlock” the solutions for a given problem in a given language and at the same time to “lock” the possibility of submitting a solution for that problem in that language (of course, only when she has already submitted a correct solution for that problem).
The “easy” improve to do when CG will have the time is just to let the people with the “15 puzzles in a language” see the solutions for this languages (when they have a puzzle at 100% of course). You can’t gain anything from copy/pasting because you already have the 15 puzzles achievement.
Yes, but this is useless to learn a new language and its idiosyncrasies, which was the point of my original question.
We thought about a similar mechanism (impossible to unlock the achievement when the solution has been seen), however, a cheater would only need to create a second account…
@Magus, interesting idea, we’ll keep that idea in mind in case we decide to improve that feature.
I think I’m definitely too honest I didn’t even think about using another account…
But the cheater would then submit a solution in language L1 on his account A1, unlock language L2, and copy a solution in language L2 in his account A2. He would then have an achievement for L1 in A1 and for L2 in A2, which isn’t really interesting as far as progress / coding points are concerned. Or am I again too honest?
The second account would be used only to unlock solutions for the first account. L1 on A1, copy L1 on A2 to unlock L2, copy L2 on A1 to get second achievement on A1.
Okay, it’s now clear I’m too honest
The “easy” improve to do when CG will have the time is just
to let the people with the “15 puzzles in a language” see the solutions
for this languages (when they have a puzzle at 100% of course). You
can’t gain anything from copy/pasting because you already have the 15
puzzles achievement.
I like that. Add in a protection against problem/languages with a specific achievement (bash horses and rollerclojure, you shouldn’t see those until you did them yourself, even with 15 other puzzles) and we might have something consistent.
Another little thing that can be improved is:
- actually, for a puzzle that we have not solved, we can see who published a solution in any language (but it is greyed and we cannot see the solution, and that’s ok)
- once we have solved the puzzle, we can only see the solutions in the same languages that we used. The full solution list is lost.
For exampe, if we solved some puzzle in C++, we are unable to see if anybody posted a solution in Java or Perl.
It would be great to have the possibility to see the list for all the solutions, still without seeing the actual solution if we have not solved the puzzle in the given language.
I’ve been thinking about this over the night.
It seems to me that it is anyway impossible to perfectly protect against cheating, and that the benefit of an unlock/lock mechanism (honest players can learn new languages) outweighs its risk (dishonest players will get a few more coding points).
With the current situation, there are at least two ways to cheat:
- Share a single account between multiple players, each one proficient in a different language.
- Even “better”, players P1 and P2, proficient in languages L1 and L2, could agree that once they solve a given problem in their own language, they send another solution to that problem to each other. This way both players get achievements in two languages, although they solve the problems in one language only. Of course this becomes even more “interesting” between three or four or… players.
By the way, I’m personally pretty sure I will never solve a problem in, say, Dart, Rust or VB.NET, yet I would be interested in seeing how a solution to a problem I already understand and solved can be implemented in these languages.
I understand the issue with achievements and agree it should be limited to language of coder solution only.
What about the community puzzles? These are quite good, but do not increase any points. Maybe multi-languages here could allow coders to learn another language. Just a thought …
The main problem with “cheating” is when does the cheating start ?
Does it start when you use an algorithm that you did not devise by yourself
(one learned at school for instance…) or when you use other people solutions ?
The point i’m trying to make is that most things we know comes from other people.
If I agree that it’s a lot easier to copy paste some code than to understand an algorithm,
copy pasting is still the first step toward understanding and using things.
I would even say that as a professional programmer you have to start from where some other people left on a problem and avoid starting from scratch at all cost. For if it is good for learning to start from scratch, it will cost a lot more time and therefore money to your company than using a working solution and eventually improving it.
I reckon it’s an issue regarding static puzzle problems. For once you have a working solution, you’re indeed done.
However whenever there is a real challenge, good luck finding publicly available top notch solutions…