Coders Strike Back: Your ideas!

It will be opened again in a multiplayer game, or something else. [CG]Julien Poulton hinted that he may be trying something new with this puzzle, explaining the delay.

Yes, we were gonna make it available as a puzzle but we decided to postpone it. The reason is that the multiplayer puzzles are not currently played enough and we are currently trying to find a solution to make them more popular and addictive. Coders Strike Back was a great game and we want to use it to test our new system. We canā€™t tell you when it will be opened again nor if it will be the exact same rules.

2 Likes

You could just add some achievements for the multiplayer games.

At the moment there is little reward for beginning to work on one. Right from the start you are competing with all the users that did the contest. And the top users from the contest probably invested a lot of time to win the contest.

For example, I tried out a very basic heuristic for Poker Chip Race and got place 714/1241. That got me 21 CP. Thatā€™s even less than the one if/else statement for the Onboarding puzzle got me.

It would help a lot if there were two or three reference AIā€™s and I could earn an achievement for beating each of them.

I recently did a crappy AI for poker chip too (around 5h of work) and went 150/1241, thatā€™s 500CP == one very hard puzzle. Itā€™s still isnā€™t much, and that is because the formula is the following:

min(2500, N)^((N-C+1)/N)

which means whoever is first at this puzzle only get 1241 points currently.

So to get more points easily (around 1000CP each is doable) you should focus on the puzzle with more than 2500 contestants, example again from my score:

Back to the Code - 952/3148 = 235 CG

235 CG for such a crappy ranking :wink:

TL;DR: Multi games are much more rewarding than any other system for now, look at the points of top contestants and youā€™ll see half is the multi game, half is the achievements. So 7 multis == dozens of solo games.

I think you are missing my point. I was talking about the beginning and not the end result.

Let me put it another way. There are no reasonable and worthwhile short term goals to achieve when you start to work on a multiplayer game. I think thatā€™s the reason why they are not played enough.

1 Like

And thatā€™s exactly what we are trying to improve ;).

5 Likes

i wrote a document explaining many parts of my code here : http://files.magusgeek.com/csb/csb.html
Iā€™m sorry this document is in french. Agade is translating it in english so iā€™ll post it when iā€™ll have it.

If you want the markdown sources of the document, you can find it here : http://files.magusgeek.com/csb/csb.md

15 Likes

Thanks to Agade, you now have an english version: http://files.magusgeek.com/csb/csb_en.html
If you prefer the markdown sources, just look here: http://files.magusgeek.com/csb/csb_en.md

4 Likes

For me split contest on several rounds looks as great idea.

First round - single player - just race two of your pods without enemy pods. This is just good puzzle. Since I have time only for race part - was very interesting how fast my pods in single race.

Second round - multiplayer, race with enemy and so on. Can be added to AI bots.

Some ideas of achievements :

  • Finish the race
  • Win the race with one of our pods
  • Win the race with our 2 pods in 1st and 2nd positions
  • Timeout an opponent pod
  • Do a turn in a minimal time
  • Do the race in a minimal time

Thatā€™s only examples

u can reduce acceleration when uā€™re near to the current cp and when the next cp is behind u; u can subtract your velocity from cp pos to make your pod more accurate; u can reduce your speed when the current cp is behind your pod;
and a lot more of small improvements that could make your pod a way more accurate

and now about defender: the best of the easiest ways is to wait for the enemyā€™s leader pod on the nearest cp, or even between cps, and then attack him when heā€™s near it; and u can use your movement algo to move to your defend position

u donā€™t have any vector class?

I wish i could. But with the compilation options of the C++ in CodinGame, using a class for vectors just drop the performances. As i said in my article, i just need vector operations in 2 or 3 parts of my code. So i prefer keep better performances and have 3 uglies code parts.

u could do all their functions inline, even distance2
and such small optimizations are good only if this code runs a million times in a turn, otherwise itā€™ll give very imperceptible performance growth

Even with inline and avoiding value copy, you lose performances. As explained in this topic: https://www.codingame.com/forum/t/optimisation-options/506/15

This is because of the compilations options used by CodinGame. I agree with you that in a C++ real world code, you can do a vector class and use inline functions and youā€™ll lose absolutely no performances. But that is not the case on CodinGame.

Magnus,

After reading your document, really interesting, i have a question regarding simulation of futur turns. At the instant t, you compute the next round with 5 differents combinations of parameters (genes) but you also compute the next 6 turns. Do you also apply a set of 5 combinations for each of your 6 turns simulated ? This would make 5^6 solutions to generate and evaluate. Then you mutate a set of your best scores to generate new combinations and your limit is the timeout of a game turn ?

I donā€™t test all turns with all combinations. It would be too slow. I just play the next 6 turns with each solutions to get my score at the turn 6 for this particular solution.

Ok im pulling my hair out at this point the instructions its giving me are super vague in doing this in C++ and the mine output statment by default is

cout << nextCheckPointX << " " << nextCheckPointY << " 50" << endl;

its asking me to add trust but will only let me work in the out put area so cant add trust variable it just keeps saying ops needs to be in ā€œx y thrustā€ format WTF is this thing asking me for i tried every thing from plain text to just trying to use thrust with out a variable maybe Iā€™m missing something.

Using plain text is the way to go. Something like 80 is enough to be faster than the boss.

cout << nextCheckPointX << " " << nextCheckPointY << " 50" << endl;
                      ^                         ^       ^  
                      X                         Y     Trust

I donā€™t understand what you are trying to prove with the Taylor expansion at the end :confused: