Home - CodeCraft 2020                             var _gaq = _gaq || []; console.log("_setAccount: " + _gaq.push(['_setAccount', 'UA-35926951-1'])); console.log("_setDomainName: " + _gaq.push(['_setDomainName', 'russianaicup.ru'])); console.log("_trackPageview: " + _gaq.push(['_trackPageview'])); (function () { var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; ga.src = (document.location.protocol == 'https:' ? 'https://webcf.waybackmachine.org/web/20211020122220/https://ssl' : 'https://webcf.waybackmachine.org/web/20211020122220/http://www') + '.google-analytics.com/ga.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); })();       $.ajaxSetup({ scriptCharset: "utf-8" ,contentType: "application/x-www-form-urlencoded; charset=UTF-8" }); function getCsrfToken() { var meta = $("meta[name='X-Csrf-Token']").attr("content"); if (meta && meta.length === 32) { return meta; } var span = $("span.csrf-token").attr("data-csrf"); if (span && span.length === 32) { return span; } return undefined; } $.ajaxPrefilter(function(options, originalOptions, xhr) { var csrf = getCsrfToken(); if (csrf) { var data = originalOptions.data; if (originalOptions.data !== undefined) { if (Object.prototype.toString.call(originalOptions.data) === '[object String]') { data = $.deparam(originalOptions.data); } } else { data = {}; } options.data = $.param($.extend(data, { csrf_token: csrf })); } });   $(function () { setSmartFocus(); $(".addCaption").click(function() { $.post("/data/addCaption", { action: "addCaption", shortcut: $(this).attr("data-caption-prefix") + "::" + $(this).text(), value: $(this).text() }); return false; }); });          Open AI Championship 

                          Enter to the site or Register         Main page  Sandbox   Games   Ranklist   Description     Championship  Round 1  Games   Ranklist   Description    Round 2  Games   Ranklist   Description    Finals  Games   Ranklist   Description     Documentation   Rules   Quick start     Language packages   App   GitHub    Play    Search          $(document).ready(function () { function redirectToProfilePage() { $.post("/data/suggestUser", { action: "findLinkToProfileByUser", userLogin: $("#searchUsersInput").val() }, function (response) { var result = response["result"]; if (result) { document.location.replace(response["linkToProfile"]); } }, "json"); return false; } $("#searchUsersForm").attr("autocomplete", "off").submit(function () { redirectToProfilePage(); return false; }); $("#searchUsersLink").click(function () { redirectToProfilePage(); return false; }); $("#searchUsersInput").autocomplete("/data/suggestUser?action=findUsersBySubstring", { minChars: 2, delay: 150, width: 129, selectFirst: false, matchContains: true }); });     $(function () { $(".follow-us a").click(function () { var href = $(this).attr("href"); window.open(href, '', 'directories=no,titlebar=no,toolbar=no,location=no,status=no,menubar=no,scrollbars=no,resizable=no,width=800,height=600'); return false; }); })      AI Cup — artificial intelligence programming contest         Project   About AI Cup    About CodeCraft   Prizes   Quick start   Sandbox   Games   Ranklist   Description   Round 1   Games   Ranklist   Description   Round 2   Games   Ranklist   Description   Finals   Games   Ranklist   Description   Песочница (на 10 января 2021 г.)   Ranklist    Recent comments  All To posts To games    30 may 00:19: vedij30399 wrote comment on post Prizes   30 may 00:18: vedij30399 wrote comment on post Prizes   30 may 00:09: vedij30399 wrote comment on post Prizes   30 may 00:04: vedij30399 wrote comment on post Prizes   30 may 00:03: vedij30399 wrote comment on post Prizes   30 may 00:02: vedij30399 wrote comment on post Prizes   30 may 00:01: vedij30399 wrote comment on post Prizes   30 may 00:01: vedij30399 wrote comment on post Prizes   30 may 00:00: vedij30399 wrote comment on post Prizes   29 may 23:59: vedij30399 wrote comment on post Prizes     30 may 00:19: vedij30399 wrote comment on post  Prizes   30 may 00:18: vedij30399 wrote comment on post Prizes   30 may 00:09: vedij30399 wrote comment on post Prizes   30 may 00:04: vedij30399 wrote comment on post Prizes   30 may 00:03: vedij30399 wrote comment on post Prizes   30 may 00:02: vedij30399 wrote comment on post Prizes   30 may 00:01: vedij30399 wrote comment on post Prizes   30 may 00:01: vedij30399 wrote comment on post Prizes   30 may 00:00: vedij30399 wrote comment on post Prizes   29 may 23:59: vedij30399 wrote comment on post Prizes     24 may 16:12: rood8008 wrote comment on game #1248965   12 january 01:52: georg_karr_spb wrote comment on game #1093374   26 december 02:53: vestild wrote comment on game #662966   25 december 17:06: lookuut wrote comment on game #648335   24 december 22:54: amurushkin wrote comment on game #616272   24 december 22:33: yerlandinata wrote comment on game #616272   24 december 09:47: madddmax wrote comment on game #598491   23 december 13:57: karloid wrote comment on game #567714   21 december 15:27: Bib wrote comment on game #493398   20 december 14:28: vestild wrote comment on game #446130    $(function () { $(".all-comments-link").click(function () { $(".comments-link").removeClass("label-info"); $(".all-comments-link").addClass("label-info"); $(".comments-block").hide(); $(".all-comments-block").show(); $.post("/data/userSetting", { action: "set", settingName: "recentCommentsViewMode", settingValue: "ALL" }); return false; }); $(".post-comments-link").click(function () { $(".comments-link").removeClass("label-info"); $(".post-comments-link").addClass("label-info"); $(".comments-block").hide(); $(".post-comments-block").show(); $.post("/data/userSetting", { action: "set", settingName: "recentCommentsViewMode", settingValue: "POST" }); return false; }); $(".game-comments-link").click(function () { $(".comments-link").removeClass("label-info"); $(".game-comments-link").addClass("label-info"); $(".comments-block").hide(); $(".game-comments-block").show(); $.post("/data/userSetting", { action: "set", settingName: "recentCommentsViewMode", settingValue: "GAME" }); return false; }); });    VK Group      Telegram chat      Discord                This year task — CodeCraft Write an artificial intelligence to control a team of units, build, gather resources and attack your enemy. Compete with other participants in the championship!

 Detailed description of the task can be found in “CodeCraft” championship and Rules sections.

   Let's register! Quick start   AI Cup — open artificial intelligence programming contest. Test yourself writing a game strategy! It’s simple, clear and fun!

 Ninth AI Cup championship is named CodeCraft. You are to program an artificial intelligence to play the game. Your strategies will compete with each other in the Sandbox and the championship. You can use any of programming languages: C++, C#, F#, D, Go, Java, Kotlin, Scala, Python, Ruby, JavaScript, Rust. The Sandbox is already open. Good luck!

 We welcome both novice programmers — students and pupils, as well as professionals. Writing your own strategy is very simple: basic programming skills are enough.

 Championship schedule  Sandbox: open for everyone from November 28; until December 5 will be beta-testing, system instability and significant changes in the rules are possible during this period. Round 1: December 12-13. Round 2: December 19-20. Finals: December 26-28.  Begin from the Quick start guide. Writing a simple strategy is not hard at all!

 

   Championship News  10january2021  The closing of the AI Cup 2020 It is now time to announce the closure of the AI Cup 2020: CodeCraft championship.

 The Sandbox will still be running for some time for those who want to play around a bit more.

 Let’s congratulate the winners:

    Kārlis Olte - karliso.

   Laszlo Kovacs - kovi.

   Valeriy Vasetskiy - LeeTiK.

   Andrey Morozov - morozec.

   Stas Sviridov - StarWix.

   Andrey Beltukov - ThermIt.

  Of course, this is not all prizes. All participants of Round 2 will receive a souvenir t-shirt with championship symbolics, and all participants of the Final, in addition to this, will get a hoodie. More about prizes.

 Later we will make an e-mail newsletter with additional information regarding the receipt of prizes. Please also note that all questions related to receiving prizes are recommended to be sent to [email protected], and not using messages on this site.

 With the best wishes, Mail.Ru Group and Codeforces teams.

    $(function () { $(".newsItem").find("table").addClass("table table-bordered table-striped table-max"); });   28december2020  Finals: Results So, the last games of the Finals has been processed, and we can give our congratulations to all the winners. In the Finals each participant played each other one 8 times, and top-6, according to the standings table, receive prizes:

 1)   «Commandos» (Aleksey Dichkovsky).

 2)   «Recar» (Oleg Kuznetsov).

 3)   «dgrachev28» (Denis Grachev).

 4)   «GreenTea» (Evgeniy Voronyuk).

 5)   «aropan» (Aleksey Ropan).

 6)   «TonyK» (Anton Kozlovsky).

 We congratulate them!

 But other participants should not relax just yet. There will still be games in the Sandbox, and top 6 participants will also receive prizes. Winners of the Finals continue to participate unofficially.

    $(function () { $(".newsItem").find("table").addClass("table table-bordered table-striped table-max"); });   26december2020  The Finals So, the final stage of the main part of the championship has begun!

 We remind, that in each part of Finals a series of “each-vs-each” games will be held.

 The strategy will receive 2 points for a victory, 1 point to each participant for a draw, there is no reward for a defeat.

 Good luck to all the participants!

    $(function () { $(".newsItem").find("table").addClass("table table-bordered table-striped table-max"); });   21december2020  Round 2 is over! So, Round 2 has ended. Now it is the last week before the finals. Sandbox games now include games in Finals format - 1v1 with fog of war.

 Remember, if you didn’t make it to the Finals yet, you can do so still by being in top-10 of this table.

    $(function () { $(".newsItem").find("table").addClass("table table-bordered table-striped table-max"); });   19december2020  Round 2 has started! Round 2 has just started! Additional 60 participants have been promoted to round among those who did not qualify by results of Round 1.

 Due to temporary problems with the testing system, the beginning of the round was shifted by an hour, so first half will last 11 hours.

 Good luck everyone!

    $(function () { $(".newsItem").find("table").addClass("table table-bordered table-striped table-max"); });   16december2020  Server pathfinding and fog of war In today’s update, we have fixed a vulnerability in server’s pathfinding: since server is aware of the game state, it could pathfind around obstacles that you do not see in fog of war. Now, server-side pathfinding considers cells out of sight range to be empty.

 Download new version of the app.

    $(function () { $(".newsItem").find("table").addClass("table table-bordered table-striped table-max"); });   15december2020  GraalVM for Java and Kotlin When measuring time consumed by your strategies, we use total cpu time across all thread. This means, e.g. that we also include time for GC and JIT. JIT, especially, has proven to be the bottleneck for Kotlin. So, thanks to our participants, another runtime for Java and Kotlin is now available - GraalVM native compilation.

 This may improve your strategy a lot, if you are near the limit. If you submit as archive, your pom.xml needs to be updated as seen in the repository.

    $(function () { $(".newsItem").find("table").addClass("table table-bordered table-striped table-max"); });   14december2020  Round 1 is over Round 1 is over. In total for 2 parts each strategy has played 249 times.

 We remind you that the best 300 participants are already in Round 2. If you do not get into their number, do not get upset. You still have a chance to get the T-shirt. For this, at the beginning of Round 2, you need to be in the top 60 Sandbox participants except for the mentioned 300 people. You can track Sandbox rating without Round 2 participants here.

    $(function () { $(".newsItem").find("table").addClass("table table-bordered table-striped table-max"); });   12december2020  Round 1 has begun! Comrades! Round 1 has begun!

 We remind you that the games of the stage will be played by waves. Each strategy plays exactly once for the wave.

 We wish everyone good luck. But if you still did not manage to get into the treasured top 300, you can always go to Round 2 and even Finals from the Sandbox.

    $(function () { $(".newsItem").find("table").addClass("table table-bordered table-striped table-max"); });   9december2020  Debug improvements The app and language packages have been updated. This update is only targeting debug improvements.

 By default, the app is rendering debug data as soon as it is sent by the client. This can cause flickering in case rendering is happening in the middle of sending multiple debug commands. This behavior can now be disabled by sending DebugCommand::SetAutoFlush { enable: false } to accumulate commands before actually performing them. Once you are done with sending debug data, send DebugCommand::Flush.

 Another improvement is related to debug_update method. Debug commands sent during debug updates are now affecting global debug data storage instead of tick-specific. Also, this method now receives currently rendered game state instead of the last processed one.

 Also, you can now export game state using Ctrl-E, and then restart loading this state.

 Also:

  Fixed randomness with fixed seed Added itertools to Rust Improved Ruby client performance (update client package)     $(function () { $(".newsItem").find("table").addClass("table table-bordered table-striped table-max"); });   5december2020  The end of beta: ratings reset Hello!

 The beta week has come to end. We have made a lot of changes in the game. You can expect that no major changes in the rules will be made anymore. We will still continue to fix any bugs found and improve things. Thank you all for testing the game during the beta.

 Check that you are using latest version of the app and read latest version of the rules.

 Ratings have been reset, the week of preparing to Round 1 has begun!

 Since last update, the only thing that changed is:

  Added pandas & torch to Python  We wish you all good luck in battles and hope you like our championship!

    $(function () { $(".newsItem").find("table").addClass("table table-bordered table-striped table-max"); });   4december2020  Another update Changes:

  When playing 1v1 (Finals), when only one player is left, he gets additional score enough to win the game Allow builder units to repair other units Dynamic cost is now only applied to units Reduced cost of turrets Reduced score for destroying a wall Fixed break_through not working without attack action Changed Python version to 3.8 and added numba Added rand & chrono to Rust Added quick start examples for Python, C++, C# and Java     $(function () { $(".newsItem").find("table").addClass("table table-bordered table-striped table-max"); });   3december2020  Improved moving mechanics Moving mechanics have been improved, meaning you can now make two or more units follow each other without a gap between them. Also, the cost of building new entities has been made dynamic - more entities of a type you have, the more a new one costs. In the new version of client packages EntityProperties::cost has been renamed to initial_cost. See details in the rules.

 Also:

  Slower repairing Changed Ruby interpreter to JRuby Added numpy to PyPy     $(function () { $(".newsItem").find("table").addClass("table table-bordered table-striped table-max"); });   2december2020  Added PyPy PyPy 3.6 has been added. PyPy is another Python interpreter, and may perform better than CPython.

 Also:

  Tweak schematic visualization Finish game if only one (or zero) players left (download new version of the app)     $(function () { $(".newsItem").find("table").addClass("table table-bordered table-striped table-max"); });   1december2020  Prizes In the past years, the winners have received prizes, like MacBooks, iPads, watches and hard drives. In addition, we presented 60 hoodies and 360 T-shirts.

 Unfortunately, the participants of the previous AI Cup received T-shirts only almost a year later (we delivered the prizes). In a pandemic, we were powerless and not ready.

 In this regard, we thought to cancel the merch in this competition, but a the community did not receive this news well. “No promo codes or other virtual prizes needed, we need T-shirts and hoodies” - quote from the community.

 Change 1: the prizes are now not physical, but cash. This year’s winners will receive:

  1st place - 250,000 rubles. 2nd place - 200,000 rubles. 3rd place - 150,000 rubles. 4th place - 125,000 rubles. 5th place - 100,000 rubles. 6th place - 75,000 rubles.  Sandbox winners (also 6 people) will receive 10,000 rubles each. Amounts are after taxes. We have significantly increased the prize pool.

 Change 2: T-shirts and hoodies will be available, but delivery will not be until February. If you don’t want to wait, you can exchange your promotional gift for a promotional code in Mail.ru Group services (cloud, etc.).

 All participants in Round 2 will receive T-shirts, and the finalists will receive hoodies.

    $(function () { $(".newsItem").find("table").addClass("table table-bordered table-striped table-max"); });   30november2020  GitHub Issue Tracker New updates are now available. Changes:

  Add builder base to the starting state of Round 2 and Finals Add entity properties values to rules Some changes in entities’ properties Changed action processing order - now, first attack actions are processed for all entities, then build, repair and move actions in same way. Better default camera position Save camera position in preferences Break through option now does not attack allies Fix auto_attack.valid_targets behavior Added colors to scoreboard and models Fixed out of bounds building  You can download new version of the app. Also, GitHub repository is now available with rules, clients and changelog. If you encounter a bug or want to suggest an improvement, please use the issue tracker.

    $(function () { $(".newsItem").find("table").addClass("table table-bordered table-striped table-max"); });   29november2020  Testing has begun As you may have noticed, the testing system is now up and running.

 Also, there has been small bug fixes in the app, so you can download the new version now:

  QuickStart is now saving properly when saving config Max population shown now only considers active entities (as it should) Killing your own entities does not give you score  More bugfixes and changes in the balance are coming, stay tuned.

    $(function () { $(".newsItem").find("table").addClass("table table-bordered table-striped table-max"); });   27november2020  Start of beta-test Hello everyone!

 AI Cup 2020 has finally started, but in beta-test for now. Beta test will last a week, and during this time major changes in rules and balance of the game are possible.

 The testing system will be available soon, but you already can read the rules / run games locally as well as start implementing your strategy.

    $(function () { $(".newsItem").find("table").addClass("table table-bordered table-striped table-max"); });      Latest games of leaders        Participants          GreenTea    lama   and more 2 participants     View    Details         GreenTea    karliso   and more 2 participants     View    Details         Finals         # Name Rating     1  Commandos 6862   2  Recar 6828   3  dgrachev28 6692   4  GreenTea 6546   5  aropan 6328   6  TonyK 6258   7  Romka 6224   8  StarWix 5930   9  morozec 5810   10  HiPravin 5530      Sandbox         # Name Rating     1  Commandos 4179   2  GreenTea 4141   3  Recar 4128   4  karliso 4110   5  lama 4041   6  dgrachev28 3997   7  kovi 3954   8  Milanin 3948   9  Romka 3946   10  morozec 3945            Recent users                   .small { font-size: 12px !important; }     Recent games    AndreyS1_12 × 1   Functorial2 × 1   Jemand4 × 1   Nerumb2 × 1   arum4 × 1   weterok_ai4 × 1       .small { font-size: 12px !important; }     Recent submissions    scaramoucheJava, 100.6 kB   scaramoucheJava, 98.3 kB   lamaJava (GraalVM), 210.3 kB   lamaJava (GraalVM), 210.3 kB   scaramoucheJava, 98.0 kB   BigMihPython, 22.3 kB             $(document).ready(function () { window.closeGamePlayers = function () { var players = $("iframe.gameplayer"); var size = players.length; players.remove(); return size; }; $(document).keydown(function (e) { if (e.keyCode == 27) { closeGamePlayers(); } }); $(document).click(function () { return closeGamePlayers() == 0; }); $(".run-player").css("cursor", "pointer"); $(".run-player").click(function () { var gameId = $(this).attr("data-gameId"); var token = $(this).attr("data-token"); var id = token + new Date().getTime(); closeGamePlayers(); function show(rendererUrl) { $("body").append(""); var $gameplayer = $(".gameplayer"); $gameplayer.focus(); $gameplayer.height($gameplayer.height()); $gameplayer.width($gameplayer.width()); if ($gameplayer.height() * 4.0 / 3.0 < $gameplayer.width()) { $gameplayer.width($gameplayer.height() * 4.0 / 3.0); } else { $gameplayer.height($gameplayer.width() * 3.0 / 4.0); } $gameplayer.css("top", Math.max(0, ($(window).height() - $gameplayer.outerHeight()) / 2) + "px"); $gameplayer.css("left", Math.max(0, ($(window).width() - $gameplayer.outerWidth()) / 2) + "px"); var iframe = $gameplayer[0]; iframe.onload = function () { $(iframe.contentDocument).keydown(function (e) { if (e.keyCode == 27) { closeGamePlayers(); } }); }; } var rendererUrl = "//webcf.waybackmachine.org/web/20211020122220/https://russianaicup.ru/s/1634389952153/assets/renderer/player.html?lang=en&replay=" + "\//russianaicup.ru/boombox/data/games/" + token; $.post("/data/gameInformation", { gameId: gameId }, function (response) { response.usersRaw.forEach(function(user) { rendererUrl += "&player-names=" + user.login; }); show(rendererUrl); }, "json"); $(".gameplayer").focus(); return false; }); if ($(window).width() < 1600) { $('.button-up').css('width', '30px').css('line-height', '30px').css('font-size', '20px'); } if ($(window).width() >= 1200) { $ (window).scroll (function () { if ($ (this).scrollTop () > 100) { $ ('.button-up').fadeIn(); } else { $ ('.button-up').fadeOut(); } }); $('.button-up').click(function () { $('body,html').animate({ scrollTop: 0 }, 500); return false; }); $('.button-up').hover(function () { $(this).animate({ 'opacity':'1' }).css({'background-color':'#e7ebf0','color':'#6a86a4'}); }, function () { $(this).animate({ 'opacity':'0.7' }).css({'background':'none','color':'#d3dbe4'});; }); } prettyPrint(); });