Suggestion to improve language diversity


#1

Hi Guys,

I have two addiction at my life, develop new things and play games.
When I started at Codingame, it was an instant love.

BUT, there is a problem. I just play for fun, I'm not a developer at work, I know only JAVA, and I'm not interesting in learn C++.
I learned a lot about a bunch of thing, and every time that I learn new things, my code request more process, more memory, and a thing that a can't control in JAVA, I need Garbage Collector.

It is very sad, when you have to reserve 50% of your turn time, as a security margin for GC to run, In other words, every turn I lose 50% of my turn time, because in one or two turns, maybe the GC will run and timeout me.

Reading any Strategy Forum, you can see that any people are proud to be the first place using a GC language. Because GC language is naturally, slower than C++, and when you have to reserve so much time to GC, the performance difference is so large, that you can't expect to get the first positions. And it is not good if you expect to have any kind of developer competing here.

I did my complaint, and I have 2 suggestion to improve the experience for JAVA player:

Lets use the MeanMax game as example:
You have 1000ms at the first turn, and 50ms at others turn, most of the users, do not need so much time at the first turn.

First Suggestion:
- Instead of give the 1000ms to waste at the first turn, give this 1000ms to waste any time. So you can set your timeout to 50ms, and each time that the GC run, you know how much time the GC is taking, how much extra time left, and you can in some level, control it. Languages that do not have this problem, can use this time in different ways.

Second Suggestion:
- Any time not used at one turn, will pass to next turn (with a cap), for example, if I use only 45ms per turn, I will increase 5ms at my extra time that I can use when the GC run.

One of this 2 suggestion is enough to increase the experience for JAVA players.

Why to do this?
- This will improve the experience for who is using Java and .Net.
- This will not add any benefits to any kind of language.
- Who is using C++, can use this time to do different types of strategy, like using more process time during key turns. But it will not give a large advantage for then, like today.


#2

As far as i know, first turn is 1000ms because some language use 1000ms just to read inputs (yep it's sad but well ...). So it would be a big nerf for theses languages :smiley:

As i said on another topic, you can code in Java and prevent the GC cycle. And in fact, in C/C++ you have to code in the same way or you'll have a very slow code.

But, when creating MeanMax, we (contest creators) learned a few things. If you take any action to increase a turn duration, you can just break all the arena. I suppose some players remember Hypersonic and the 12 hours submits (yep, 12 hours ...).

I don't think it's a good idea to increase the turns durations to handle the GC of some languages. Since this GC can be avoided by using the same tricks that top players use in C/C++.


#3

Hi Magus,

I'm nothing propose increase the time duration for one language, neither the total game duration. The turn duration will be the same as today for all languages. What I'm proposing is just transform the first turn duration into a time bank...

Keep in mind, that actually, this site is for high skilled developers. What I'm proposing is a simple change to improve the experience for low skilled developer, or for the one that is just playing for fun, timeout is really disappointing.

This change will not change the total game time, and the rules and timeouts will be the same for everyone. You still have 50ms per turn plus 1000ms (or other lower value) to distribute as you want... GC languages will use to prevent GC timeout, high skilled developers can use for increase a little the turn time.

High skilled dev will still doing better, low skilled dev will have a better experience, and the servers will not be overloaded, everyone wins.


#4

Actually it will. Many players in C++ does not use the 1000ms at the first turn (in some puzzle the first turn is even hardcoded :smiley: ). So they'ill use the remaining time in the next turns.


#5

Right, it will, but the time bank do not need to be 1000ms, it could be 100ms.

300ms more time per game, will not have a high overloaded at the server (1% more time at MM), and if it is a problem, instead of 200 turn, just change it to 198...

I'm just sharing the reason because I'm near to quit the platform. Probably, others players already quit, and others will because of this behavior that is easy to manage, and will not unbalance the games.

Most of "human" games are based in time bank, or a mixed between turn time and time bank (Take a look at the chess time rules for example)...This is just a game design decision ...

CG admin can verify the developers behavior to check if what I'm saying is a real problem or not... What I can say, is that the forum have a lot of complaint about this...


#6

I think your solution is really complicated while if you optimize correctly your code it is possible for java language to challenge c/c++!

(Not true since some times but I hope they will fix that quickly!)


#7

It is not about be possible or not. The thing is that no one code Java without any "new" object (It's easier tune the GC, than do not use the GC). This is about the platform to be fun for everyone, and less annoying for this language new players.

And your concept about complicated things is very different than my. Do you think that to control a time bank is more complicated than write a entire code without any "new" object after first turn?

So, everyone have 1s at first turn to make one language viable, and you cannot consider a time bank to make Java and .Net, that have a lot of devs, better?

And why you consider it is a nerf? They are already nerfed, they cant use this 1s anyway, and will not be able to use it after the change... And, 1s time bank, can be a lot of time, the time bank could be 100ms... 0.5ms per turn, is not a real advantage, and it is able to prevent this and others kind of timeouts...


#8

Retrospectively, you are probably right! It's much complicated to optimize allocation but it is necessary in all languages.

Currently, it is not necessary to have all this knowledges to reach top 50 of each contest. Code optimization is a waste of time if your strategy is not good enough or your evaluation funtion not perfect and is useless for heuristics.

So why not, it could be interesting to manage that bank and they could test that on a future contest to see the effect. However I'm not sure beginners are the target and that it will help them.


#9

Well, we can argue that no one code in C++ like we code on CodinGame. Because in real life we have the O3 flag. Do you think we have fun recoding the STL everytime ? :smiley:

But as i always said, the problem is that we don't have hand on the command lines used for compilation and runtime. I know it would be a major change for codingame, but it would allow everyone to use optimization like O3 or differents GC configuration for Java.