kaggle-environments 0.2.1__py3-none-any.whl → 1.20.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of kaggle-environments might be problematic. Click here for more details.

Files changed (214) hide show
  1. kaggle_environments/__init__.py +49 -13
  2. kaggle_environments/agent.py +177 -124
  3. kaggle_environments/api.py +31 -0
  4. kaggle_environments/core.py +295 -170
  5. kaggle_environments/envs/cabt/cabt.js +164 -0
  6. kaggle_environments/envs/cabt/cabt.json +28 -0
  7. kaggle_environments/envs/cabt/cabt.py +186 -0
  8. kaggle_environments/envs/cabt/cg/__init__.py +0 -0
  9. kaggle_environments/envs/cabt/cg/cg.dll +0 -0
  10. kaggle_environments/envs/cabt/cg/game.py +75 -0
  11. kaggle_environments/envs/cabt/cg/libcg.so +0 -0
  12. kaggle_environments/envs/cabt/cg/sim.py +48 -0
  13. kaggle_environments/envs/cabt/test_cabt.py +120 -0
  14. kaggle_environments/envs/chess/chess.js +4289 -0
  15. kaggle_environments/envs/chess/chess.json +60 -0
  16. kaggle_environments/envs/chess/chess.py +4241 -0
  17. kaggle_environments/envs/chess/test_chess.py +60 -0
  18. kaggle_environments/envs/connectx/connectx.ipynb +3186 -0
  19. kaggle_environments/envs/connectx/connectx.js +1 -1
  20. kaggle_environments/envs/connectx/connectx.json +15 -1
  21. kaggle_environments/envs/connectx/connectx.py +6 -23
  22. kaggle_environments/envs/connectx/test_connectx.py +70 -24
  23. kaggle_environments/envs/football/football.ipynb +75 -0
  24. kaggle_environments/envs/football/football.json +91 -0
  25. kaggle_environments/envs/football/football.py +277 -0
  26. kaggle_environments/envs/football/helpers.py +95 -0
  27. kaggle_environments/envs/football/test_football.py +360 -0
  28. kaggle_environments/envs/halite/__init__.py +0 -0
  29. kaggle_environments/envs/halite/halite.ipynb +44741 -0
  30. kaggle_environments/envs/halite/halite.js +199 -83
  31. kaggle_environments/envs/halite/halite.json +31 -18
  32. kaggle_environments/envs/halite/halite.py +164 -303
  33. kaggle_environments/envs/halite/helpers.py +720 -0
  34. kaggle_environments/envs/halite/test_halite.py +190 -0
  35. kaggle_environments/envs/hungry_geese/__init__.py +0 -0
  36. kaggle_environments/envs/{battlegeese/battlegeese.js → hungry_geese/hungry_geese.js} +38 -22
  37. kaggle_environments/envs/{battlegeese/battlegeese.json → hungry_geese/hungry_geese.json} +21 -14
  38. kaggle_environments/envs/hungry_geese/hungry_geese.py +316 -0
  39. kaggle_environments/envs/hungry_geese/test_hungry_geese.py +0 -0
  40. kaggle_environments/envs/identity/identity.json +6 -5
  41. kaggle_environments/envs/identity/identity.py +15 -2
  42. kaggle_environments/envs/kore_fleets/__init__.py +0 -0
  43. kaggle_environments/envs/kore_fleets/helpers.py +1005 -0
  44. kaggle_environments/envs/kore_fleets/kore_fleets.ipynb +114 -0
  45. kaggle_environments/envs/kore_fleets/kore_fleets.js +658 -0
  46. kaggle_environments/envs/kore_fleets/kore_fleets.json +164 -0
  47. kaggle_environments/envs/kore_fleets/kore_fleets.py +555 -0
  48. kaggle_environments/envs/kore_fleets/starter_bots/java/Bot.java +54 -0
  49. kaggle_environments/envs/kore_fleets/starter_bots/java/README.md +26 -0
  50. kaggle_environments/envs/kore_fleets/starter_bots/java/jars/hamcrest-core-1.3.jar +0 -0
  51. kaggle_environments/envs/kore_fleets/starter_bots/java/jars/junit-4.13.2.jar +0 -0
  52. kaggle_environments/envs/kore_fleets/starter_bots/java/kore/Board.java +518 -0
  53. kaggle_environments/envs/kore_fleets/starter_bots/java/kore/Cell.java +61 -0
  54. kaggle_environments/envs/kore_fleets/starter_bots/java/kore/Configuration.java +24 -0
  55. kaggle_environments/envs/kore_fleets/starter_bots/java/kore/Direction.java +166 -0
  56. kaggle_environments/envs/kore_fleets/starter_bots/java/kore/Fleet.java +72 -0
  57. kaggle_environments/envs/kore_fleets/starter_bots/java/kore/KoreJson.java +97 -0
  58. kaggle_environments/envs/kore_fleets/starter_bots/java/kore/Observation.java +72 -0
  59. kaggle_environments/envs/kore_fleets/starter_bots/java/kore/Pair.java +13 -0
  60. kaggle_environments/envs/kore_fleets/starter_bots/java/kore/Player.java +68 -0
  61. kaggle_environments/envs/kore_fleets/starter_bots/java/kore/Point.java +65 -0
  62. kaggle_environments/envs/kore_fleets/starter_bots/java/kore/Shipyard.java +70 -0
  63. kaggle_environments/envs/kore_fleets/starter_bots/java/kore/ShipyardAction.java +59 -0
  64. kaggle_environments/envs/kore_fleets/starter_bots/java/main.py +73 -0
  65. kaggle_environments/envs/kore_fleets/starter_bots/java/test/BoardTest.java +567 -0
  66. kaggle_environments/envs/kore_fleets/starter_bots/java/test/ConfigurationTest.java +25 -0
  67. kaggle_environments/envs/kore_fleets/starter_bots/java/test/KoreJsonTest.java +62 -0
  68. kaggle_environments/envs/kore_fleets/starter_bots/java/test/ObservationTest.java +46 -0
  69. kaggle_environments/envs/kore_fleets/starter_bots/java/test/PointTest.java +21 -0
  70. kaggle_environments/envs/kore_fleets/starter_bots/java/test/ShipyardTest.java +22 -0
  71. kaggle_environments/envs/kore_fleets/starter_bots/java/test/configuration.json +1 -0
  72. kaggle_environments/envs/kore_fleets/starter_bots/java/test/fullob.json +1 -0
  73. kaggle_environments/envs/kore_fleets/starter_bots/java/test/observation.json +1 -0
  74. kaggle_environments/envs/kore_fleets/starter_bots/python/__init__.py +0 -0
  75. kaggle_environments/envs/kore_fleets/starter_bots/python/main.py +27 -0
  76. kaggle_environments/envs/kore_fleets/starter_bots/ts/Bot.ts +34 -0
  77. kaggle_environments/envs/kore_fleets/starter_bots/ts/DoNothingBot.ts +12 -0
  78. kaggle_environments/envs/kore_fleets/starter_bots/ts/MinerBot.ts +62 -0
  79. kaggle_environments/envs/kore_fleets/starter_bots/ts/README.md +55 -0
  80. kaggle_environments/envs/kore_fleets/starter_bots/ts/interpreter.ts +402 -0
  81. kaggle_environments/envs/kore_fleets/starter_bots/ts/kore/Board.ts +514 -0
  82. kaggle_environments/envs/kore_fleets/starter_bots/ts/kore/Cell.ts +63 -0
  83. kaggle_environments/envs/kore_fleets/starter_bots/ts/kore/Configuration.ts +25 -0
  84. kaggle_environments/envs/kore_fleets/starter_bots/ts/kore/Direction.ts +169 -0
  85. kaggle_environments/envs/kore_fleets/starter_bots/ts/kore/Fleet.ts +76 -0
  86. kaggle_environments/envs/kore_fleets/starter_bots/ts/kore/KoreIO.ts +70 -0
  87. kaggle_environments/envs/kore_fleets/starter_bots/ts/kore/Observation.ts +45 -0
  88. kaggle_environments/envs/kore_fleets/starter_bots/ts/kore/Pair.ts +11 -0
  89. kaggle_environments/envs/kore_fleets/starter_bots/ts/kore/Player.ts +68 -0
  90. kaggle_environments/envs/kore_fleets/starter_bots/ts/kore/Point.ts +65 -0
  91. kaggle_environments/envs/kore_fleets/starter_bots/ts/kore/Shipyard.ts +72 -0
  92. kaggle_environments/envs/kore_fleets/starter_bots/ts/kore/ShipyardAction.ts +58 -0
  93. kaggle_environments/envs/kore_fleets/starter_bots/ts/main.py +73 -0
  94. kaggle_environments/envs/kore_fleets/starter_bots/ts/miner.py +73 -0
  95. kaggle_environments/envs/kore_fleets/starter_bots/ts/package.json +23 -0
  96. kaggle_environments/envs/kore_fleets/starter_bots/ts/test/BoardTest.ts +551 -0
  97. kaggle_environments/envs/kore_fleets/starter_bots/ts/test/ConfigurationTest.ts +16 -0
  98. kaggle_environments/envs/kore_fleets/starter_bots/ts/test/ObservationTest.ts +33 -0
  99. kaggle_environments/envs/kore_fleets/starter_bots/ts/test/PointTest.ts +17 -0
  100. kaggle_environments/envs/kore_fleets/starter_bots/ts/test/ShipyardTest.ts +18 -0
  101. kaggle_environments/envs/kore_fleets/starter_bots/ts/test/configuration.json +1 -0
  102. kaggle_environments/envs/kore_fleets/starter_bots/ts/test/fullob.json +1 -0
  103. kaggle_environments/envs/kore_fleets/starter_bots/ts/test/observation.json +1 -0
  104. kaggle_environments/envs/kore_fleets/starter_bots/ts/tsconfig.json +22 -0
  105. kaggle_environments/envs/kore_fleets/test_kore_fleets.py +331 -0
  106. kaggle_environments/envs/lux_ai_2021/README.md +3 -0
  107. kaggle_environments/envs/lux_ai_2021/__init__.py +0 -0
  108. kaggle_environments/envs/lux_ai_2021/agents.py +11 -0
  109. kaggle_environments/envs/lux_ai_2021/dimensions/754.js +2 -0
  110. kaggle_environments/envs/lux_ai_2021/dimensions/754.js.LICENSE.txt +296 -0
  111. kaggle_environments/envs/lux_ai_2021/dimensions/main.js +1 -0
  112. kaggle_environments/envs/lux_ai_2021/index.html +43 -0
  113. kaggle_environments/envs/lux_ai_2021/lux_ai_2021.json +100 -0
  114. kaggle_environments/envs/lux_ai_2021/lux_ai_2021.py +231 -0
  115. kaggle_environments/envs/lux_ai_2021/test_agents/__init__.py +0 -0
  116. kaggle_environments/envs/lux_ai_2021/test_agents/js_simple/lux/game_constants.js +6 -0
  117. kaggle_environments/envs/lux_ai_2021/test_agents/js_simple/lux/game_constants.json +59 -0
  118. kaggle_environments/envs/lux_ai_2021/test_agents/js_simple/lux/game_objects.js +145 -0
  119. kaggle_environments/envs/lux_ai_2021/test_agents/js_simple/lux/io.js +14 -0
  120. kaggle_environments/envs/lux_ai_2021/test_agents/js_simple/lux/kit.js +209 -0
  121. kaggle_environments/envs/lux_ai_2021/test_agents/js_simple/lux/map.js +107 -0
  122. kaggle_environments/envs/lux_ai_2021/test_agents/js_simple/lux/parser.js +79 -0
  123. kaggle_environments/envs/lux_ai_2021/test_agents/js_simple/main.js +88 -0
  124. kaggle_environments/envs/lux_ai_2021/test_agents/js_simple/main.py +75 -0
  125. kaggle_environments/envs/lux_ai_2021/test_agents/js_simple/simple.tar.gz +0 -0
  126. kaggle_environments/envs/lux_ai_2021/test_agents/python/lux/__init__.py +0 -0
  127. kaggle_environments/envs/lux_ai_2021/test_agents/python/lux/annotate.py +20 -0
  128. kaggle_environments/envs/lux_ai_2021/test_agents/python/lux/constants.py +25 -0
  129. kaggle_environments/envs/lux_ai_2021/test_agents/python/lux/game.py +86 -0
  130. kaggle_environments/envs/lux_ai_2021/test_agents/python/lux/game_constants.json +59 -0
  131. kaggle_environments/envs/lux_ai_2021/test_agents/python/lux/game_constants.py +7 -0
  132. kaggle_environments/envs/lux_ai_2021/test_agents/python/lux/game_map.py +106 -0
  133. kaggle_environments/envs/lux_ai_2021/test_agents/python/lux/game_objects.py +154 -0
  134. kaggle_environments/envs/lux_ai_2021/test_agents/python/random_agent.py +38 -0
  135. kaggle_environments/envs/lux_ai_2021/test_agents/python/simple_agent.py +82 -0
  136. kaggle_environments/envs/lux_ai_2021/test_lux.py +19 -0
  137. kaggle_environments/envs/lux_ai_2021/testing.md +23 -0
  138. kaggle_environments/envs/lux_ai_2021/todo.md.og +18 -0
  139. kaggle_environments/envs/lux_ai_s3/README.md +21 -0
  140. kaggle_environments/envs/lux_ai_s3/agents.py +5 -0
  141. kaggle_environments/envs/lux_ai_s3/index.html +42 -0
  142. kaggle_environments/envs/lux_ai_s3/lux_ai_s3.json +47 -0
  143. kaggle_environments/envs/lux_ai_s3/lux_ai_s3.py +178 -0
  144. kaggle_environments/envs/lux_ai_s3/luxai_s3/__init__.py +1 -0
  145. kaggle_environments/envs/lux_ai_s3/luxai_s3/env.py +819 -0
  146. kaggle_environments/envs/lux_ai_s3/luxai_s3/globals.py +9 -0
  147. kaggle_environments/envs/lux_ai_s3/luxai_s3/params.py +101 -0
  148. kaggle_environments/envs/lux_ai_s3/luxai_s3/profiler.py +141 -0
  149. kaggle_environments/envs/lux_ai_s3/luxai_s3/pygame_render.py +222 -0
  150. kaggle_environments/envs/lux_ai_s3/luxai_s3/spaces.py +27 -0
  151. kaggle_environments/envs/lux_ai_s3/luxai_s3/state.py +464 -0
  152. kaggle_environments/envs/lux_ai_s3/luxai_s3/utils.py +12 -0
  153. kaggle_environments/envs/lux_ai_s3/luxai_s3/wrappers.py +156 -0
  154. kaggle_environments/envs/lux_ai_s3/test_agents/python/agent.py +78 -0
  155. kaggle_environments/envs/lux_ai_s3/test_agents/python/lux/__init__.py +0 -0
  156. kaggle_environments/envs/lux_ai_s3/test_agents/python/lux/kit.py +31 -0
  157. kaggle_environments/envs/lux_ai_s3/test_agents/python/lux/utils.py +17 -0
  158. kaggle_environments/envs/lux_ai_s3/test_agents/python/main.py +66 -0
  159. kaggle_environments/envs/lux_ai_s3/test_lux.py +9 -0
  160. kaggle_environments/envs/mab/__init__.py +0 -0
  161. kaggle_environments/envs/mab/agents.py +12 -0
  162. kaggle_environments/envs/mab/mab.js +100 -0
  163. kaggle_environments/envs/mab/mab.json +74 -0
  164. kaggle_environments/envs/mab/mab.py +146 -0
  165. kaggle_environments/envs/open_spiel/__init__.py +0 -0
  166. kaggle_environments/envs/open_spiel/games/__init__.py +0 -0
  167. kaggle_environments/envs/open_spiel/games/chess/chess.js +441 -0
  168. kaggle_environments/envs/open_spiel/games/chess/image_config.jsonl +20 -0
  169. kaggle_environments/envs/open_spiel/games/chess/openings.jsonl +20 -0
  170. kaggle_environments/envs/open_spiel/games/connect_four/__init__.py +0 -0
  171. kaggle_environments/envs/open_spiel/games/connect_four/connect_four.js +284 -0
  172. kaggle_environments/envs/open_spiel/games/connect_four/connect_four_proxy.py +86 -0
  173. kaggle_environments/envs/open_spiel/games/go/__init__.py +0 -0
  174. kaggle_environments/envs/open_spiel/games/go/go.js +481 -0
  175. kaggle_environments/envs/open_spiel/games/go/go_proxy.py +99 -0
  176. kaggle_environments/envs/open_spiel/games/tic_tac_toe/__init__.py +0 -0
  177. kaggle_environments/envs/open_spiel/games/tic_tac_toe/tic_tac_toe.js +345 -0
  178. kaggle_environments/envs/open_spiel/games/tic_tac_toe/tic_tac_toe_proxy.py +98 -0
  179. kaggle_environments/envs/open_spiel/games/universal_poker/__init__.py +0 -0
  180. kaggle_environments/envs/open_spiel/games/universal_poker/universal_poker.js +431 -0
  181. kaggle_environments/envs/open_spiel/games/universal_poker/universal_poker_proxy.py +159 -0
  182. kaggle_environments/envs/open_spiel/html_playthrough_generator.py +31 -0
  183. kaggle_environments/envs/open_spiel/observation.py +128 -0
  184. kaggle_environments/envs/open_spiel/open_spiel.py +565 -0
  185. kaggle_environments/envs/open_spiel/proxy.py +138 -0
  186. kaggle_environments/envs/open_spiel/test_open_spiel.py +191 -0
  187. kaggle_environments/envs/rps/__init__.py +0 -0
  188. kaggle_environments/envs/rps/agents.py +84 -0
  189. kaggle_environments/envs/rps/helpers.py +25 -0
  190. kaggle_environments/envs/rps/rps.js +117 -0
  191. kaggle_environments/envs/rps/rps.json +63 -0
  192. kaggle_environments/envs/rps/rps.py +90 -0
  193. kaggle_environments/envs/rps/test_rps.py +110 -0
  194. kaggle_environments/envs/rps/utils.py +7 -0
  195. kaggle_environments/envs/tictactoe/test_tictactoe.py +43 -77
  196. kaggle_environments/envs/tictactoe/tictactoe.ipynb +1397 -0
  197. kaggle_environments/envs/tictactoe/tictactoe.json +10 -2
  198. kaggle_environments/envs/tictactoe/tictactoe.py +1 -1
  199. kaggle_environments/errors.py +2 -4
  200. kaggle_environments/helpers.py +377 -0
  201. kaggle_environments/main.py +340 -0
  202. kaggle_environments/schemas.json +23 -18
  203. kaggle_environments/static/player.html +206 -74
  204. kaggle_environments/utils.py +46 -73
  205. {kaggle_environments-0.2.1.dist-info → kaggle_environments-1.20.1.dist-info}/METADATA +36 -114
  206. kaggle_environments-1.20.1.dist-info/RECORD +211 -0
  207. {kaggle_environments-0.2.1.dist-info → kaggle_environments-1.20.1.dist-info}/WHEEL +1 -2
  208. kaggle_environments-1.20.1.dist-info/entry_points.txt +3 -0
  209. kaggle_environments/envs/battlegeese/battlegeese.py +0 -223
  210. kaggle_environments/temp.py +0 -14
  211. kaggle_environments-0.2.1.dist-info/RECORD +0 -32
  212. kaggle_environments-0.2.1.dist-info/entry_points.txt +0 -3
  213. kaggle_environments-0.2.1.dist-info/top_level.txt +0 -1
  214. {kaggle_environments-0.2.1.dist-info → kaggle_environments-1.20.1.dist-info/licenses}/LICENSE +0 -0
@@ -0,0 +1,62 @@
1
+ package test;
2
+
3
+ import java.io.IOException;
4
+ import java.nio.file.Files;
5
+ import java.nio.file.Path;
6
+ import java.nio.file.Paths;
7
+
8
+ import org.junit.Assert;
9
+ import org.junit.Test;
10
+
11
+ import kore.KoreJson;
12
+
13
+ public class KoreJsonTest {
14
+ @Test
15
+ public void containsKey() throws IOException {
16
+ Path observation = Paths.get("bin", "test", "observation.json");
17
+ String raw = Files.readString(observation);
18
+
19
+ Assert.assertTrue(KoreJson.containsKey(raw, "kore"));
20
+ Assert.assertFalse(KoreJson.containsKey(raw, "notThere"));
21
+ }
22
+
23
+ @Test
24
+ public void getIntFromJson() throws IOException {
25
+ Path observation = Paths.get("bin", "test", "observation.json");
26
+ String raw = Files.readString(observation);
27
+
28
+ Assert.assertEquals(KoreJson.getIntFromJson(raw, "step"), 16);
29
+ }
30
+
31
+ @Test
32
+ public void getStrFromJson() {
33
+ Assert.assertTrue(KoreJson.getStrFromJson("{'test': 'foo'}", "test").equals("foo"));
34
+ }
35
+
36
+ @Test
37
+ public void getFloatArrFromJson() throws IOException {
38
+ Path observation = Paths.get("bin", "test", "observation.json");
39
+ String raw = Files.readString(observation);
40
+
41
+ double[] kore = KoreJson.getDoubleArrFromJson(raw, "kore");
42
+ Assert.assertEquals(kore[3], 1.372, 0.0001);
43
+ }
44
+
45
+ @Test
46
+ public void getPlayerPartsFromJson() throws IOException {
47
+ Path observation = Paths.get("bin", "test", "observation.json");
48
+ String raw = Files.readString(observation);
49
+
50
+ String[] players = KoreJson.getPlayerPartsFromJson(raw);
51
+ Assert.assertEquals(players.length, 4);
52
+ Assert.assertEquals(players[0].substring(0, 3), "500");
53
+ }
54
+
55
+ @Test
56
+ public void getPlayerIdxFromJson() throws IOException {
57
+ Path observation = Paths.get("bin", "test", "observation.json");
58
+ String raw = Files.readString(observation);
59
+
60
+ Assert.assertEquals(KoreJson.getPlayerIdxFromJson(raw), 0);
61
+ }
62
+ }
@@ -0,0 +1,46 @@
1
+ package test;
2
+
3
+ import java.io.IOException;
4
+ import java.nio.file.Files;
5
+ import java.nio.file.Path;
6
+ import java.nio.file.Paths;
7
+
8
+ import org.junit.Assert;
9
+ import org.junit.Test;
10
+
11
+ import kore.Observation;
12
+
13
+ public class ObservationTest {
14
+
15
+ @Test
16
+ public void givenValidObservation_createSuccessful() throws IOException {
17
+ Path observation = Paths.get("bin", "test", "observation.json");
18
+ String rawObservation = Files.readString(observation);
19
+
20
+ Observation ob = new Observation(rawObservation);
21
+
22
+ Assert.assertEquals(0, ob.player);
23
+ Assert.assertEquals(16, ob.step);
24
+ Assert.assertEquals(4, ob.playerHlt.length);
25
+ Assert.assertEquals(4, ob.playerFleets.size());
26
+ Assert.assertEquals(0, ob.playerFleets.get(0).size());
27
+ Assert.assertEquals(4, ob.playerShipyards.size());
28
+ Assert.assertEquals(1, ob.playerShipyards.get(0).size());
29
+ }
30
+
31
+ @Test
32
+ public void givenFullObservation_createSuccessful() throws IOException {
33
+ Path observation = Paths.get("bin", "test", "fullob.json");
34
+ String rawObservation = Files.readString(observation);
35
+
36
+ Observation ob = new Observation(rawObservation);
37
+
38
+ Assert.assertEquals(0, ob.player);
39
+ Assert.assertEquals(200, ob.step);
40
+ Assert.assertEquals(2, ob.playerHlt.length);
41
+ Assert.assertEquals(2, ob.playerFleets.size());
42
+ Assert.assertEquals(1, ob.playerFleets.get(0).size());
43
+ Assert.assertEquals(2, ob.playerShipyards.size());
44
+ Assert.assertEquals(6, ob.playerShipyards.get(0).size());
45
+ }
46
+ }
@@ -0,0 +1,21 @@
1
+ package test;
2
+
3
+ import org.junit.Assert;
4
+ import org.junit.Test;
5
+
6
+ import kore.Point;
7
+
8
+ public class PointTest {
9
+
10
+ @Test
11
+ public void fromIndexToIndex_isIdentity() {
12
+ int idx = 254;
13
+ int size = 31;
14
+
15
+ Point point = Point.fromIndex(idx, size);
16
+ int mirroredIdx = point.toIndex(size);
17
+
18
+ Assert.assertEquals(idx, mirroredIdx);
19
+ }
20
+
21
+ }
@@ -0,0 +1,22 @@
1
+ package test;
2
+
3
+ import org.junit.Assert;
4
+ import org.junit.Test;
5
+
6
+ import kore.Point;
7
+ import kore.Shipyard;
8
+
9
+ public class ShipyardTest {
10
+
11
+ @Test
12
+ public void maxSpawn_worksCorrectly() {
13
+ int[] turns = {0, 1, 2, 293, 294, 295};
14
+ int[] expected = {1, 1, 2, 9, 10, 10};
15
+ for (int i = 0; i < turns.length; i ++) {
16
+ Shipyard shipyard = new Shipyard("A", 0, new Point(0, 0), 1, turns[i], null, null);
17
+
18
+ Assert.assertEquals(shipyard.maxSpawn(), expected[i]);
19
+ }
20
+ }
21
+
22
+ }
@@ -0,0 +1 @@
1
+ {"episodeSteps": 400, "actTimeout": 3, "runTimeout": 9600, "startingKore": 6000, "size": 31, "spawnCost": 10, "convertCost": 50, "regenRate": 0.02, "maxRegenCellKore": 500, "agentTimeout": 60, "randomSeed": 1464814655, "__raw_path__": "java/main.py"}
@@ -0,0 +1 @@
1
+ {"kore": [0.0, 0.0, 506.992, 505.069, 0.0, 0.0, 0.0, 0.0, 419.865, 0.0, 290.82, 501.384, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 507.098, 419.865, 0.0, 419.865, 0.0, 0.0, 0.0, 0.0, 505.069, 506.992, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 367.426, 0.0, 472.378, 0.0, 210.032, 52.493, 0.0, 0.0, 314.858, 0.0, 0.0, 52.493, 210.032, 0.0, 472.378, 0.0, 367.426, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 506.992, 0.0, 509.253, 367.426, 506.992, 502.462, 0.0, 506.992, 0.0, 0.0, 400.173, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 502.569, 0.0, 0.0, 506.992, 0.0, 502.462, 506.992, 367.426, 509.253, 0.0, 506.992, 505.069, 0.0, 367.426, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 327.724, 0.0, 0.0, 0.0, 505.345, 0.0, 501.328, 0.0, 0.0, 0.0, 472.378, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 367.426, 0.0, 505.069, 0.0, 0.0, 504.406, 0.0, 0.0, 501.945, 0.0, 210.032, 506.992, 0.0, 0.0, 0.0, 0.0, 0.0, 74.135, 472.378, 105.024, 0.0, 0.0, 0.0, 0.0, 0.0, 506.992, 210.032, 0.0, 504.355, 0.0, 0.0, 504.406, 0, 0.0, 0.0, 0.0, 509.66, 0.0, 501.885, 508.922, 0.0, 0.0, 157.437, 504.462, 364.5, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 504.396, 504.462, 157.437, 0.0, 0.0, 501.844, 504.355, 0.0, 509.66, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 262.485, 0.0, 157.437, 506.205, 0.0, 0.0, 262.485, 0.0, 0.0, 0.0, 171.185, 0.0, 0.0, 501.799, 157.437, 0.0, 262.485, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 367.426, 506.992, 0.0, 210.032, 0.0, 262.485, 0.0, 0.0, 0.0, 110.023, 0.0, 0.0, 0.0, 0.0, 105.024, 0.0, 0.0, 0.0, 0.0, 157.437, 0.0, 0.0, 0.0, 262.485, 0.0, 210.032, 0.0, 506.992, 226.428, 0.0, 419.865, 0.0, 0.0, 0.0, 506.992, 157.437, 0.0, 0.0, 329.782, 0.0, 30.018, 287.219, 0.0, 0.0, 0, 0.0, 80.233, 0.0, 0.0, 504.396, 52.493, 0.0, 419.865, 0.0, 0.0, 157.437, 506.992, 0.0, 0.0, 0.0, 419.865, 0.0, 472.378, 0.0, 0.0, 0.0, 504.013, 78.951, 160.69, 501.799, 0.0, 0.0, 502.665, 0.0, 0.0, 157.437, 506.563, 157.437, 0.0, 0.0, 509.52, 0.0, 0.0, 509.698, 207.219, 96.102, 508.199, 0.0, 0.0, 0.0, 290.785, 0.0, 419.865, 0.0, 502.569, 472.378, 0.0, 304.465, 0.0, 0.0, 0.0, 0.0, 0.0, 502.149, 0.0, 0.0, 0.0, 504.355, 0.0, 0, 0.0, 509.287, 0.0, 0.0, 0.0, 0.0, 0.0, 304.265, 0.0, 472.378, 502.569, 0.0, 419.865, 507.098, 210.032, 0.0, 0.0, 0.0, 0.0, 0.0, 455.017, 105.024, 0.0, 502.462, 0.0, 262.485, 0.0, 0.0, 105.024, 0.0, 0, 262.485, 0.0, 502.462, 0.0, 105.024, 504.248, 0.0, 0.0, 0.0, 0.0, 0.0, 130.187, 507.098, 0.0, 52.493, 0.0, 0.0, 504.759, 137.956, 215.334, 48.645, 0.0, 193.355, 151.923, 0, 504.314, 508.639, 336.859, 0.0, 501.817, 359.916, 503.869, 0.0, 311.502, 394.83, 0.0, 120.63399999999999, 255.181, 165.806, 503.597, 0.0, 0.0, 33.798, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 347.298, 271.605, 172.617, 0.0, 138.627, 394.234, 503.221, 0.0, 504.071, 211.268, 197.11, 0.0, 223.128, 374.437, 489.777, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 7.86, 0, 0.0, 0.0, 22.418, 15.789, 0.0, 276.643, 0.0, 454.734, 0.0, 216.047, 0.0, 482.34, 509.253, 0.0, 0.0, 12.055, 52.493, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 300.887, 124.229, 62.549, 0.0, 0.0, 293.845, 500.321, 508.317, 131.274, 0.0, 505.666, 0.0, 76.24, 500.404, 502.391, 294.329, 0.0, 0.0, 47.514, 114.842, 485.939, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 52.493, 17.918, 0.0, 0.0, 509.253, 452.772, 0.0, 484.331, 68.625, 143.07, 0.0, 42.889, 0.0, 12.116, 13.911, 0.0, 0.0, 0, 9.31, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 415.606, 318.218, 189.918, 0.0, 164.566, 217.113, 500.0, 0.0, 501.143, 223.134, 96.391, 0.0, 112.635, 195.318, 248.226, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 52.493, 0.0, 0.0, 505.989, 134.193, 333.494, 178.212, 0.0, 472.378, 367.426, 0.0, 507.171, 504.206, 404.461, 0.0, 283.63, 479.969, 441.558, 0.0, 127.723, 164.318, 0.0, 28.154, 258.813, 168.677, 502.143, 0.0, 0.0, 33.413, 0.0, 507.098, 210.032, 0.0, 0.0, 0.0, 0.0, 0.0, 483.494, 105.024, 0.0, 502.462, 0.0, 262.485, 0.0, 0.0, 105.024, 0.0, 0.0, 262.485, 0.0, 502.462, 0.0, 105.024, 248.324, 0.0, 0.0, 0.0, 0.0, 0.0, 130.054, 507.098, 419.865, 0.0, 502.569, 472.378, 0.0, 211.524, 0.0, 0.0, 0.0, 0.0, 0.0, 502.149, 0.0, 0.0, 0.0, 482.396, 0.0, 0.0, 0.0, 502.149, 0.0, 0.0, 0.0, 0.0, 0.0, 304.735, 0.0, 472.378, 502.569, 0.0, 419.865, 0.0, 472.378, 0.0, 0.0, 0.0, 420.981, 67.298, 171.611, 501.799, 0.0, 0.0, 502.665, 0.0, 0.0, 157.437, 493.431, 131.62, 0.0, 0.0, 502.665, 0.0, 0.0, 501.799, 88.631, 81.856, 506.154, 0.0, 0.0, 0.0, 290.467, 0.0, 419.865, 0.0, 0.0, 0.0, 506.992, 157.437, 0.0, 0.0, 419.865, 0.0, 52.493, 504.396, 0.0, 0.0, 105.024, 0.0, 0, 0, 0.0, 320.984, 32.961, 0.0, 257.584, 0.0, 0.0, 157.437, 472.417, 0.0, 0.0, 0.0, 419.865, 0.0, 367.426, 506.992, 0.0, 210.032, 0.0, 262.485, 0.0, 0.0, 0.0, 157.437, 0.0, 0.0, 0.0, 0.0, 105.024, 0.0, 0.0, 0.0, 0.0, 157.437, 0.0, 0.0, 0.0, 262.485, 0.0, 145.864, 0.0, 506.992, 287.418, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 262.485, 0.0, 157.437, 501.799, 0.0, 0.0, 262.485, 0.0, 0.0, 0.0, 147.895, 0.0, 0.0, 501.799, 157.437, 0.0, 184.177, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 502.462, 0.0, 504.355, 501.844, 0.0, 0.0, 157.437, 504.462, 504.396, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 504.396, 504.462, 157.437, 0.0, 0.0, 506.56, 500.716, 0.0, 502.462, 0.0, 0.0, 0.0, 0.0, 506.992, 0.0, 0.0, 504.355, 0.0, 210.032, 506.992, 0.0, 0.0, 0.0, 0.0, 0.0, 105.024, 472.378, 105.024, 0.0, 0.0, 0.0, 0.0, 0.0, 506.992, 210.032, 0.0, 504.355, 0.0, 0.0, 506.992, 0, 0.0, 505.069, 0.0, 367.426, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 472.378, 0.0, 0.0, 0.0, 501.328, 0.0, 501.328, 0.0, 0.0, 0.0, 472.378, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 367.426, 0.0, 505.069, 506.992, 0.0, 509.253, 367.426, 506.992, 502.462, 0.0, 506.992, 0.0, 0.0, 502.569, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 502.569, 0.0, 0.0, 506.992, 0.0, 502.462, 506.992, 367.426, 509.253, 0.0, 506.992, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 367.426, 0.0, 472.378, 0.0, 210.032, 52.493, 0.0, 0.0, 314.858, 0.0, 0.0, 52.493, 210.032, 0.0, 472.378, 0.0, 367.426, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 506.992, 505.069, 0.0, 0.0, 0.0, 0.0, 419.865, 0.0, 419.865, 507.098, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 507.098, 419.865, 0.0, 419.865, 0.0, 0.0, 0.0, 0.0, 505.069, 506.992, 0.0, 0.0], "players": [[1, {"0-1": [441, 71, 200], "151-1": [262, 45, 49], "169-1": [153, 40, 31], "193-1": [383, 77, 8], "198-2": [835, 28, 3], "199-3": [327, 99, 2]}, {"194-1": [448, 90, 100, 1, "3N"]}], [8, {"0-2": [519, 13, 200], "183-1": [698, 16, 17], "187-1": [699, 7, 13], "192-2": [358, 15, 8]}, {"143-2": [823, 840, 57, 0, ""], "190-2": [680, 112, 57, 2, "3C"], "195-2": [545, 109, 21, 3, "5NE"], "197-1": [395, 31, 21, 0, "3E1S6W"], "199-1": [761, 26, 21, 2, "3W6N4E"], "200-1": [357, 0, 21, 3, "1N1E1S"]}]], "player": 0, "step": 200, "remainingOverageTime": 60}
@@ -0,0 +1 @@
1
+ {"kore": [0.0, 0.0, 0.0, 1.372, 0.0, 0.0, 0.0, 31.574, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 37.066, 0.0, 37.066, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 31.574, 0.0, 0.0, 0.0, 1.372, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 17.847, 5.493, 31.574, 19.218, 37.066, 20.593, 8.234, 0.0, 6.864, 0.0, 0.0, 0.0, 49.419, 0.0, 0.0, 0.0, 6.864, 0.0, 8.234, 20.593, 37.066, 19.218, 31.574, 5.493, 17.847, 0.0, 0.0, 0.0, 0.0, 0.0, 20.593, 4.119, 0.0, 1.372, 0.0, 0.0, 0.0, 0.0, 0.0, 20.593, 0.0, 0.0, 0.0, 27.454, 0.0, 0.0, 0.0, 20.593, 0.0, 0.0, 0.0, 0.0, 0.0, 1.372, 0.0, 4.119, 20.593, 0.0, 0.0, 1.372, 17.847, 4.119, 0.0, 9.612, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 28.828, 28.828, 0.0, 0.0, 0.0, 0.0, 0.0, 28.828, 28.828, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 9.612, 0.0, 4.119, 17.847, 1.372, 0.0, 5.493, 0.0, 9.612, 0.0, 6.864, 0.0, 1.372, 0.0, 0.0, 0.0, 0.0, 13.728, 0.0, 0.0, 0.0, 0.0, 0.0, 13.728, 0.0, 0.0, 0.0, 0.0, 1.372, 0.0, 6.864, 0.0, 9.612, 0.0, 5.493, 0.0, 0.0, 31.574, 1.372, 0.0, 6.864, 4.119, 0.0, 1.372, 24.712, 0.0, 0.0, 0.0, 5.493, 13.728, 0.0, 0.0, 0.0, 13.728, 5.493, 0.0, 0.0, 0.0, 24.712, 1.372, 0.0, 4.119, 6.864, 0.0, 1.372, 31.574, 0.0, 0.0, 19.218, 0.0, 0.0, 0.0, 0.0, 9.612, 0.0, 34.321, 0.0, 0.0, 32.947, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 32.947, 0.0, 0.0, 0, 0.0, 9.612, 0.0, 0.0, 0.0, 0.0, 19.218, 0.0, 31.574, 37.066, 0.0, 0.0, 1.372, 1.372, 0.0, 19.218, 0.0, 28.828, 0.0, 0.0, 38.437, 0.0, 10.981, 5.493, 10.981, 0.0, 38.437, 0.0, 0.0, 28.828, 0.0, 19.218, 0.0, 1.372, 1.372, 0.0, 0.0, 37.066, 31.574, 0.0, 20.593, 0.0, 0.0, 0.0, 24.712, 0, 0.0, 0.0, 12.356, 0.0, 0.0, 0.0, 6.864, 0.0, 0.0, 0.0, 6.864, 0.0, 0.0, 0.0, 12.356, 0.0, 0.0, 34.321, 24.712, 0.0, 0.0, 0.0, 20.593, 0.0, 0.0, 8.234, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 21.964, 13.728, 6.864, 20.593, 9.612, 4.119, 0.0, 4.119, 9.612, 20.593, 6.864, 13.728, 21.964, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 8.234, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.372, 10.981, 0.0, 0.0, 13.728, 0.0, 0.0, 0.0, 0.0, 0.0, 13.728, 0.0, 0.0, 10.981, 1.372, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 6.864, 20.593, 28.828, 0.0, 15.101, 0.0, 0.0, 6.864, 1.372, 0.0, 0.0, 0.0, 0.0, 9.612, 5.493, 9.612, 0.0, 0.0, 0.0, 0.0, 1.372, 6.864, 0.0, 0.0, 15.101, 0.0, 28.828, 20.593, 6.864, 0.0, 0.0, 0.0, 0.0, 28.828, 13.728, 0.0, 0.0, 10.981, 6.864, 17.847, 5.493, 0.0, 0.0, 24.712, 41.182, 0.0, 41.182, 24.712, 0.0, 0.0, 5.493, 17.847, 6.864, 10.981, 0.0, 0.0, 13.728, 28.828, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 15.101, 0.0, 1.372, 10.981, 0.0, 0.0, 0.0, 64.521, 131.787, 2.747, 57.655, 2.747, 131.787, 64.521, 0.0, 0.0, 0.0, 10.981, 1.372, 0.0, 15.101, 0.0, 0.0, 0.0, 0.0, 0.0, 37.066, 0.0, 1.372, 0.0, 0.0, 13.728, 1.372, 0.0, 0.0, 4.119, 23.338, 0.0, 0.0, 42.555, 27.454, 12.356, 27.454, 42.555, 0.0, 0.0, 23.338, 4.119, 0.0, 0.0, 1.372, 13.728, 0.0, 0.0, 1.372, 0.0, 37.066, 0.0, 20.593, 0.0, 27.454, 0.0, 0.0, 0.0, 0.0, 2.747, 0.0, 0.0, 0.0, 12.356, 37.066, 32.947, 123.55, 32.947, 37.066, 12.356, 0.0, 0.0, 0.0, 2.747, 0.0, 0.0, 0.0, 0.0, 27.454, 0.0, 20.593, 0.0, 37.066, 0.0, 1.372, 0.0, 0.0, 13.728, 1.372, 0.0, 0.0, 4.119, 23.338, 0.0, 0.0, 42.555, 27.454, 12.356, 27.454, 42.555, 0.0, 0.0, 23.338, 4.119, 0.0, 0.0, 1.372, 13.728, 0.0, 0.0, 1.372, 0.0, 37.066, 0.0, 0.0, 0.0, 0.0, 0.0, 15.101, 0.0, 1.372, 10.981, 0.0, 0.0, 0.0, 64.521, 131.787, 2.747, 57.655, 2.747, 131.787, 64.521, 0.0, 0.0, 0.0, 10.981, 1.372, 0.0, 15.101, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 28.828, 13.728, 0.0, 0.0, 10.981, 6.864, 17.847, 5.493, 0.0, 0.0, 24.712, 41.182, 0.0, 41.182, 24.712, 0.0, 0.0, 5.493, 17.847, 6.864, 10.981, 0.0, 0.0, 13.728, 28.828, 0.0, 0.0, 0.0, 0.0, 6.864, 20.593, 28.828, 0.0, 15.101, 0.0, 0.0, 6.864, 1.372, 0.0, 0.0, 0.0, 0.0, 9.612, 5.493, 9.612, 0.0, 0.0, 0.0, 0.0, 1.372, 6.864, 0.0, 0.0, 15.101, 0.0, 28.828, 20.593, 6.864, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.372, 10.981, 0.0, 0.0, 13.728, 0.0, 0.0, 0.0, 0.0, 0.0, 13.728, 0.0, 0.0, 10.981, 1.372, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 8.234, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 21.964, 13.728, 6.864, 20.593, 9.612, 4.119, 0.0, 4.119, 9.612, 20.593, 6.864, 13.728, 21.964, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 8.234, 0.0, 0.0, 20.593, 0.0, 0.0, 0.0, 24.712, 34.321, 0.0, 0.0, 12.356, 0.0, 0.0, 0.0, 6.864, 0.0, 0.0, 0.0, 6.864, 0.0, 0.0, 0.0, 12.356, 0.0, 0.0, 0, 24.712, 0.0, 0.0, 0.0, 20.593, 0.0, 31.574, 37.066, 0.0, 0.0, 1.372, 1.372, 0.0, 19.218, 0.0, 28.828, 0.0, 0.0, 38.437, 0.0, 10.981, 5.493, 10.981, 0.0, 38.437, 0.0, 0.0, 28.828, 0.0, 19.218, 0.0, 1.372, 1.372, 0.0, 0.0, 37.066, 31.574, 0.0, 19.218, 0.0, 0.0, 0.0, 0.0, 9.612, 0.0, 0, 0.0, 0.0, 32.947, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 32.947, 0.0, 0.0, 34.321, 0.0, 9.612, 0.0, 0.0, 0.0, 0.0, 19.218, 0.0, 0.0, 31.574, 1.372, 0.0, 6.864, 4.119, 0.0, 1.372, 24.712, 0.0, 0.0, 0.0, 5.493, 13.728, 0.0, 0.0, 0.0, 13.728, 5.493, 0.0, 0.0, 0.0, 24.712, 1.372, 0.0, 4.119, 6.864, 0.0, 1.372, 31.574, 0.0, 0.0, 5.493, 0.0, 9.612, 0.0, 6.864, 0.0, 1.372, 0.0, 0.0, 0.0, 0.0, 13.728, 0.0, 0.0, 0.0, 0.0, 0.0, 13.728, 0.0, 0.0, 0.0, 0.0, 1.372, 0.0, 6.864, 0.0, 9.612, 0.0, 5.493, 0.0, 1.372, 17.847, 4.119, 0.0, 9.612, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 28.828, 28.828, 0.0, 0.0, 0.0, 0.0, 0.0, 28.828, 28.828, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 9.612, 0.0, 4.119, 17.847, 1.372, 0.0, 0.0, 20.593, 4.119, 0.0, 1.372, 0.0, 0.0, 0.0, 0.0, 0.0, 20.593, 0.0, 0.0, 0.0, 27.454, 0.0, 0.0, 0.0, 20.593, 0.0, 0.0, 0.0, 0.0, 0.0, 1.372, 0.0, 4.119, 20.593, 0.0, 0.0, 0.0, 0.0, 0.0, 17.847, 5.493, 31.574, 19.218, 37.066, 20.593, 8.234, 0.0, 6.864, 0.0, 0.0, 0.0, 49.419, 0.0, 0.0, 0.0, 6.864, 0.0, 8.234, 20.593, 37.066, 19.218, 31.574, 5.493, 17.847, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.372, 0.0, 0.0, 0.0, 31.574, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 37.066, 0.0, 37.066, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 31.574, 0.0, 0.0, 0.0, 1.372, 0.0, 0.0, 0.0], "players": [[500, {"0-1": [254, 0, 16]}, {}], [500, {"0-2": [208, 0, 16]}, {}], [500, {"0-3": [752, 0, 16]}, {}], [500, {"0-4": [706, 0, 16]}, {}]], "player": 0, "step": 16, "remainingOverageTime": 60}
@@ -0,0 +1,27 @@
1
+ from kaggle_environments.envs.kore_fleets.helpers import *
2
+
3
+
4
+ def agent(obs, config):
5
+ board = Board(obs, config)
6
+ me = board.current_player
7
+
8
+ me = board.current_player
9
+ turn = board.step
10
+ spawn_cost = board.configuration.spawn_cost
11
+ kore_left = me.kore
12
+
13
+ for shipyard in me.shipyards:
14
+ if shipyard.ship_count > 10:
15
+ direction = Direction.from_index(turn % 4)
16
+ action = ShipyardAction.launch_fleet_with_flight_plan(2, direction.to_char())
17
+ shipyard.next_action = action
18
+ elif kore_left > spawn_cost * shipyard.max_spawn:
19
+ action = ShipyardAction.spawn_ships(shipyard.max_spawn)
20
+ shipyard.next_action = action
21
+ kore_left -= spawn_cost * shipyard.max_spawn
22
+ elif kore_left > spawn_cost:
23
+ action = ShipyardAction.spawn_ships(1)
24
+ shipyard.next_action = action
25
+ kore_left -= spawn_cost
26
+
27
+ return me.next_actions
@@ -0,0 +1,34 @@
1
+ import {Board} from "./kore/Board";
2
+ import { Direction } from "./kore/Direction";
3
+ import { ShipyardAction } from "./kore/ShipyardAction";
4
+ import { KoreIO } from "./kore/KoreIO";
5
+
6
+ export const tick = async (board: Board): Promise<Board> => {
7
+ const me = board.currentPlayer;
8
+ const turn = board.step;
9
+ const spawnCost = board.configuration.spawnCost;
10
+ let koreLeft = me.kore;
11
+
12
+ for (let shipyard of me.shipyards) {
13
+ if (shipyard.shipCount > 10) {
14
+ const dir = Direction.fromIndex(turn % 4);
15
+ const action = ShipyardAction.launchFleetWithFlightPlan(2, dir.toChar());
16
+ shipyard.setNextAction(action);
17
+ } else if (koreLeft > spawnCost * shipyard.maxSpawn) {
18
+ const action = ShipyardAction.spawnShips(shipyard.maxSpawn);
19
+ shipyard.setNextAction(action);
20
+ koreLeft -= spawnCost * shipyard.maxSpawn;
21
+ } else if (koreLeft > spawnCost) {
22
+ const action = ShipyardAction.spawnShips(1);
23
+ shipyard.setNextAction(action);
24
+ koreLeft -= spawnCost;
25
+ }
26
+ }
27
+
28
+ // nextActions will be pulled off of your shipyards
29
+ return board;
30
+ }
31
+
32
+ // agent.run takes care of running your code per tick
33
+ const io = new KoreIO();
34
+ io.run(tick);
@@ -0,0 +1,12 @@
1
+ import {Board} from "./kore/Board";
2
+ import { Direction } from "./kore/Direction";
3
+ import { ShipyardAction } from "./kore/ShipyardAction";
4
+ import { KoreIO } from "./kore/KoreIO";
5
+
6
+
7
+ export const tick = async (board: Board): Promise<Board> => {
8
+ return board;
9
+ }
10
+
11
+ const io = new KoreIO();
12
+ io.run(tick);
@@ -0,0 +1,62 @@
1
+ import {Board} from "./kore/Board";
2
+ import { Direction } from "./kore/Direction";
3
+ import { ShipyardAction } from "./kore/ShipyardAction";
4
+ import { KoreIO } from "./kore/KoreIO";
5
+
6
+ export const tick = async (board: Board): Promise<Board> => {
7
+ const me = board.currentPlayer;
8
+ const spawnCost = board.configuration.spawnCost;
9
+ const convertCost = board.configuration.convertCost;
10
+ let remainingKore = me.kore;
11
+
12
+ // the following code is mostly auto-generated using GitHub co-pilot
13
+ // using miner Python code and instruction "convert python into javascript" as comment prompts
14
+ for (let shipyard of me.shipyards) {
15
+ if(remainingKore > 1000 && shipyard.maxSpawn > 5) {
16
+ if(shipyard.shipCount >= convertCost + 10) {
17
+ const gap1 = getRandomInt(3, 9);
18
+ const gap2 = getRandomInt(3, 9);
19
+ const startDir = Math.floor(Math.random() * 4);
20
+ let flightPlan = Direction.listDirections()[startDir].toChar() + gap1;
21
+ const nextDir = (startDir + 1) % 4;
22
+ flightPlan += Direction.listDirections()[nextDir].toChar() + gap2;
23
+ const nextDir2 = (nextDir + 1) % 4;
24
+ flightPlan += Direction.listDirections()[nextDir2].toChar();
25
+ shipyard.setNextAction(ShipyardAction.launchFleetWithFlightPlan(Math.min(convertCost + 10, Math.floor(shipyard.shipCount / 2)), flightPlan));
26
+ } else if(remainingKore >= spawnCost) {
27
+ remainingKore -= spawnCost;
28
+ shipyard.setNextAction(ShipyardAction.spawnShips(Math.min(shipyard.maxSpawn, Math.floor(remainingKore / spawnCost))));
29
+ }
30
+ } else if(shipyard.shipCount >= 21) {
31
+ const gap1 = getRandomInt(3, 9);
32
+ const gap2 = getRandomInt(3, 9);
33
+ const startDir = Math.floor(Math.random() * 4);
34
+ let flightPlan = Direction.listDirections()[startDir].toChar() + gap1;
35
+ const nextDir = (startDir + 1) % 4;
36
+ flightPlan += Direction.listDirections()[nextDir].toChar() + gap2;
37
+ const nextDir2 = (nextDir + 1) % 4;
38
+ flightPlan += Direction.listDirections()[nextDir2].toChar() + gap1;
39
+ const nextDir3 = (nextDir2 + 1) % 4;
40
+ flightPlan += Direction.listDirections()[nextDir3].toChar();
41
+ shipyard.setNextAction(ShipyardAction.launchFleetWithFlightPlan(21, flightPlan));
42
+ } else if(remainingKore > board.configuration.spawnCost * shipyard.maxSpawn) {
43
+ remainingKore -= board.configuration.spawnCost;
44
+ if(remainingKore >= spawnCost) {
45
+ shipyard.setNextAction(ShipyardAction.spawnShips(Math.min(shipyard.maxSpawn, Math.floor(remainingKore / spawnCost))));
46
+ }
47
+ } else if(shipyard.shipCount >= 2) {
48
+ const dirStr = Direction.randomDirection().toChar();
49
+ shipyard.setNextAction(ShipyardAction.launchFleetWithFlightPlan(2, dirStr));
50
+ }
51
+ }
52
+
53
+ // nextActions will be pulled off of your shipyards
54
+ return board;
55
+ }
56
+
57
+ const io = new KoreIO();
58
+ io.run(tick);
59
+
60
+ function getRandomInt(min, max) {
61
+ return Math.floor(Math.random() * (max - min + 1)) + min;
62
+ }
@@ -0,0 +1,55 @@
1
+ # Kore Fleets typescript bot
2
+
3
+ ## Requirements
4
+
5
+ 1. node and npm/npx/yarn
6
+ 2. typescript installed
7
+ 3. python3 installed
8
+ 4. kaggle_environments pip package installed
9
+
10
+ ## Getting started
11
+
12
+ 1. `npm install`
13
+
14
+ ## Running Locally
15
+
16
+ 1. transpile your bot with `npm run compile` or `tsc`
17
+ 2. run a match with `npm watch4`
18
+
19
+ * if you don't have google-chrome installed, open the replay.html in the browser of your choice
20
+ * see package.json for more options
21
+
22
+ ## Creating a submission
23
+
24
+ 1. `npm run package`
25
+ 2. upload submission.tar.gz to kaggle
26
+ 3. profit!
27
+
28
+ ## Running tests
29
+
30
+ 1. `npm test`
31
+
32
+ ## Interpreter and training
33
+
34
+ A basic TS interpreter has been created in `interpreter.ts`. You can use or modify this file to train machine learning models in JS/TS.
35
+
36
+ Currently it supports 2 agents and customizable number of episodes.
37
+
38
+ It has two modes: `run` and `step`.
39
+
40
+ `run` mode: After each episode, you can access the complete history of the game. For each turn, you can access the full observation (state) as a Board object, actions performed and the reward obtained after performing the action. This mode is useful for evaluating an agent.
41
+
42
+ `step` mode: The interpreter initializes new games and allows stepping through the game interactively. You have complete control over the board and the agent during each step. This mode is useful for training machine learning models.
43
+
44
+ Sample command to run the interpreter can be found in npm scripts as `npm run interpreter:run` and `npm run interpreter:step`.
45
+
46
+ ## Miner bot and Do nothing bot
47
+
48
+ A sample miner bot `MinerBot.ts` is provided, with Python entrypoint as `miner.py`. It has the same logic as the Python `miner` bot in `kore_fleets.py`.
49
+
50
+ To run it aginst Python miner bot with TS interpreter for 20 episodes:
51
+
52
+ 1. `npm run compile`
53
+ 2. `node --require ts-node/register interpreter.ts 20 ./miner.py miner`
54
+
55
+ A sample do nothing bot `DoNothingBot.ts` is also provided.