{
  "fetched_at": "2026-10-24T11:53:45Z",
  "source_url": "https://www.kaggle.com/competitions/google-games-hackathon/data",
  "pages": [
    {
      "name": "rules",
      "content": "**Effective Date**: September 25, 2023\n\n**COMPETITION TITLE**: ConnectX\n<br>**COMPETITION WEBSITE**: www.kaggle.com/c/connectx\n\nYour participation in this Competition is subject to the Kaggle’s Terms of Use, available at https://www.kaggle.com/terms, Kaggle’s Privacy Policy, available at https://www.kaggle.com/privacy, these competition rules, and any other terms, rules or restrictions on the Competition Website (collectively, the “Rules”). You may not participate in the Competition it you do not follow the Rules.\n\n### COMPETITION PERIOD \nThe Competition will run from the date it was made available to the date it is no longer available (such duration the “Competition Period”). \n \n### ONE ACCOUNT PER PARTICIPANT\nYou must have a Kaggle.com account to participate in the Competition. You cannot have more than one Kaggle.com account and therefore you cannot participate in the Competition, by making Submissions or otherwise, via multiple Kaggle.com accounts.\n\n### ELIGIBILITY\nCompetitions are open to residents of the United States and worldwide, except that if you are a resident of Crimea, so-called Donetsk People's Republic (DNR) or Luhansk People's Republic (LNR), Cuba, Iran, Syria, or North Korea, or are subject to U.S. export controls or sanctions, you may not enter the Competition. Other local rules and regulations may apply to you, so please check your local laws to ensure that you are eligible to participate in skills-based competitions. The Competition Host reserves the right to forego or award alternative Prizes where needed to comply with local laws. If a winner is located in a country where prizes cannot be awarded then they are not eligible to receive a prize.\n \n### NO PRIVATE SHARING OUTSIDE TEAMS\nPrivately sharing code or data outside of teams is not permitted. It's okay to share code or data if it is made available at no cost to all participants via the official Competition forums.  If you use data to develop and test your Submissions, you will ensure the data is available at no cost to all participants via the official competition forum. You will license any shared code under an Open Source Initiative-approved license (see www.opensource.org) that in no event limits commercial use of such code.\n \n### TEAMS\nMultiple individuals may collaborate as a team; however, you may only be a part of one team. You must register individually for the Competition before joining a Team. Team mergers can be performed by the team leader. You must confirm your Team membership to make it official by responding to the Team notification message sent to your Kaggle.com account. In order to merge, (i) the combined team may not exceed the maximum team size; (ii) the total number of Submissions made by all the participants and the team may not exceed the number of Submissions allowed per day multiplied by the number of days the Competition has been running; and (iii) the combined team must meet all the requirements of these Rules. \n \nAll rules apply to a team as they would apply to an individual. For example, a team may make more than 2 Submissions per day. \n \n### TEAM LIMITS\nThe maximum team size is 5.\n \n### SUBMISSIONS\nTo be eligible for scoring and a position on the leaderboard, your submissions to the Competition (“Submissions”) must be made during the Competition Period, and in compliance with the Rules. Submissions may not be accepted or scored if they are in whole or part illegible, incomplete, damaged, altered, counterfeit, obtained through fraud, or late. \n \nYour Submission must be your own, original work such that you are the sole and exclusive owner and rights holder of the Submission, and that you have the right to make the Submission and grant all required licenses.\n \nIf open source code is used in the Submission, then you must only use open source code licensed under an Open Source Initiative-approved license (see www.opensource.org) that in no event limits commercial use of such code or model containing or depending on such code.\n \n### SUBMISSION LIMITS\nYou may submit a maximum of 2 Submissions per day.\n \n### SCORING AND LEADERBOARD\nYour Submissions will be scored based on their performance in an episode, and your performances in episodes will be aggregated to determine your position on the leaderboard, in each case as described in the evaluation documentation on the Competition Website. \n \nThis Competition has a rolling leaderboard. Once a Submission is more than two months old, it will be invalidated, as an example, this means that the Submission will not show up on the leaderboard. If your team has no submissions in the previous two months, the team will also be removed from the leaderboard.\n \n### ENVIRONMENTS & PUBLIC AVAILABILITY\nThis Competition makes use of Kaggle Environments. Additional rules related to the Environment(s) used in this Competition are available on the Competition Website. A replay of each episode of the competition, which includes the actions taken by your Submission in the episode, may be publicly available and downloadable.\n \n### NO INGRESS OR EGRESS \nDuring the evaluation of an episode your Submission may not pull in or use any information external to the Submission and Environment and may not send any information out. \n\n### DISQUALIFICATION\nKaggle may disqualify any participant from the Competition if Kaggle reasonably believes that the participant has attempted to undermine the legitimate operation of the Competition, for example, by cheating, violating the Rules, tampering with the submission process or any other part of the Competition or Competition Website, other unfair practices or abuses, or threatens or harasses any other participants or Kaggle. A disqualified participant may be removed from the Competition leaderboard, at Kaggle’s sole discretion.\n \n### RELEASE\nKaggle makes no guarantees regarding, and you hereby release Kaggle from any liability associated with, operation of the Competition Website, including, for example, connection to the Website and the collection, processing, scoring, or retention of any Submission.\n\n### CHANGES TO THE COMPETITION \nIf for any reason the Competition is not capable of running as planned, Kaggle may terminate, modify, or suspend the Competition. \n \n### CHANGES TO RULES\nKaggle may modify these Rules or any additional terms that apply to the Competition to, for example, reflect changes to the law or changes to the Kaggle Services. You should look at the Rules regularly. Kaggle will post notice of modifications to these Official Competition Rules on this page and will post notice of modified additional terms in the applicable service. Changes will not apply retroactively and will become effective no sooner than fourteen days after they are posted. However, changes addressing new functions for a service or changes made for legal reasons will be effective immediately. If you do not agree to the modified Rules or terms for a service, you should discontinue your use of the Competition and that service.\n\n### NOT AN OFFER OR CONTRACT OF EMPLOYMENT\nThe entry of a Submission or anything in these Rules is not an offer or contract of employment with Kaggle or any Kaggle affiliate. You acknowledge that you have submitted your Submission voluntarily and not in confidence or in trust. You acknowledge that no confidential, fiduciary, agency, employment or other similar relationship is created between you and Kaggle or any Kaggle affiliate by your acceptance of these Rules or your entry of your Submission.\n\n\n \n*****\n",
      "isPublished": false,
      "hasIsPublished": false,
      "postTitle": "",
      "hasPostTitle": false,
      "mimeType": "",
      "hasMimeType": false
    },
    {
      "name": "data-description",
      "content": "This page appears underneath the data files. It describes what files have been provided & the format of each. It also defines the correct format for submission files.\n\nParticipants should be able to answer these types of questions after reading the data description:\n\nWhat files do I need?  \nWhat should I expect the data format to be?  \nWhat am I predicting?  \nWhat acronyms will I encounter?\n\n## Files\n\n*   **train.csv** - the training set\n*   **test.csv** - the test set\n*   **sample_submission.csv** - a sample submission file in the correct format\n*   **metaData.csv** - supplemental information about the data\n\n## Columns\n\n*   `example_id` - definition of example_id\n*   `feature_1` - definition of feature_1\n*   etc.",
      "isPublished": false,
      "hasIsPublished": false,
      "postTitle": "",
      "hasPostTitle": false,
      "mimeType": "",
      "hasMimeType": false
    },
    {
      "name": "Description",
      "content": "We’re excited to announce a **beta-version** of a brand-new type of ML competition called Simulations. In Simulation Competitions, you’ll compete against a set of rules, rather than against an evaluation metric. To enter, [accept the rules](/c/connectx/rules) and create a python submission file that can “play” against a computer, or another user.\n\n\n## The Challenge\n<img src=\"https://storage.googleapis.com/kaggle-media/competitions/ConnectX/Walter's%20image.png\" alt=\"“ConnectX”\"><p>\nIn this game, your objective is to get a certain number of your checkers in a row horizontally, vertically, or diagonally on the game board before your opponent. When it's your turn, you “drop” one of your checkers into one of the columns at the top of the board. Then, let your opponent take their turn. This means each move may be trying to either win for you, or trying to stop your opponent from winning. The default number is four-in-a-row, but we’ll have other options to come soon.</p>\n\n## Background History\n\nFor the past 10 years, our competitions have been mostly focused on supervised machine learning. The field has grown, and we want to continue to provide the data science community cutting-edge opportunities to challenge themselves and grow their skills.\n\nSo, what’s next? Reinforcement learning is clearly a crucial piece in the next wave of data science learning. We hope that Simulation Competitions will provide the opportunity for Kagglers to practice and hone this burgeoning skill.\n\n## How is this Competition Different?\n\nInstead of submitting a CSV file, or a Kaggle Notebook, you will submit a Python .py file (more submission options are in development). You’ll also notice that the leaderboard is not based on how accurate your model is but rather how well you’ve performed against other users. See [Evaluation](/c/connectx/overview/evaluation) for more details.\n\n## We’d Love Your Feedback\n\nThis competition is a low-stakes, trial-run introduction. We’re considering this a beta launch – there are complicated new mechanics in play and we’re still working on refining the process. We’d love your help testing the experience and want to hear your feedback.\n\nPlease note that we may make changes throughout the competition that could include things like resetting the leaderboard, invalidating episodes, making changes to the interface, or changing the environment configuration (e.g. modifying the number of columns, rows, or tokens in a row required to win, etc).\n",
      "isPublished": false,
      "hasIsPublished": false,
      "postTitle": "",
      "hasPostTitle": false,
      "mimeType": "",
      "hasMimeType": false
    },
    {
      "name": "Evaluation",
      "content": "Each Submission has an estimated **Skill Rating** which is modeled by a Gaussian \\\\(\\mathcal N (\\mu, \\sigma^2)\\\\) where \\\\(\\mu\\\\) is the estimated skill and \\\\(\\sigma\\\\) represents our uncertainty of that estimate.\n\nWhen you upload a Submission, we first play a **Validation Episode** where that Submission plays against itself to make sure it works properly.  If the Episode fails, the Submission is marked as Error.  Otherwise, we initialize the Submission with \\\\(\\mu_0 = 600\\\\) and it joins the pool of All Submissions for ongoing evaluation.\n\nWe repeatedly run Episodes from the pool of All Submissions, and try to pick Submissions with similar ratings for fair matches.  We aim to run ~8 Episodes a day per Submission, with an additional slight rate increase for newer Episodes to give you feedback faster.\n\nAfter an Episode finishes, we'll update the Rating estimate for both Submissions.  If one Submission won, we'll increase its \\\\(\\mu\\\\) and decrease its opponent's \\\\(\\mu\\\\) -- if the result was a draw, then we'll move the two \\\\(\\mu\\\\) values closer towards their mean.  The updates will have magnitude relative to the deviation from the expected result based on the previous \\\\(\\mu\\\\) values, and also relative to each Submission's uncertainty \\\\(\\sigma\\\\).  We also reduce the \\\\(\\sigma\\\\) terms relative to the amount of information gained by the result.\n\nSo all valid Submissions will continually play more matches and have dynamically changing scores as the pool increases.  The Leaderboard will show the \\\\(\\mu\\\\) value of each Team's best Submission.",
      "isPublished": false,
      "hasIsPublished": false,
      "postTitle": "",
      "hasPostTitle": false,
      "mimeType": "",
      "hasMimeType": false
    },
    {
      "name": "Environment Rules",
      "content": "## Episode Objective\n\nUse your Agent to get a certain number of your checkers in a row horizontally, vertically, or diagonally on the game board before your opponent.\n\n## How To Play\n\nPlayer 1 will take the first turn. When it's your turn, you add, or “drop”, one of your checkers into the top of a column on the board and the checker will land in the last empty row in that column. The following can occur after dropping your checker in a column:\n\n1. If the column you chose has no empty rows or is out of range of the number of columns, you lose the episode.\n2. If the checker placed creates an \"X-in-a-row\", you win the episode. X represents the number specified in the parameters, for example 4, and to be “in a row”, the checkers can be in a row horizontally vertically, or diagonally.\n3. If there are no empty cells, you tie the episode.\n4. Otherwise, it's your opponent’s turn.\n\nThis episode continues until a win, lose, or tie occurs.\n\n## Writing Agents\n\nAn Agent will receive the following parameters:\n\n1. The episode configuration:\n    1. Number of Columns on the board.\n    2. Number of Rows on the board.\n    3. How many checkers, X, \"in a row\" are required to win.\n2. The current state of the board (serialized grid of cells; rows by cols).\n    1. Empty cells are represented by \"0\".\n    2. Player 1's checkers are represented by \"1\".\n    3. Player 2's checkers are represented by \"2\".\n3. Which player you are (\"1\" or \"2\").\n\nAn Agent should return which column to place a checker in.  The column is an integer: [0, configuration.columns), and represents the columns going left to right. The row is an integer: [0, configuration.rows), and represents the rows going top to bottom\n\nHere’s what that looks like as code: \n\n```python\ndef agent(observation, configuration):\n    # Number of Columns on the Board.\n    columns = configuration.columns\n    # Number of Rows on the Board.\n    rows = configuration.rows\n    # Number of Checkers \"in a row\" needed to win.\n    inarow = configuration.inarow\n    # The current serialized Board (rows x columns).\n    board = observation.board\n    # Which player the agent is playing as (1 or 2).\n    mark = observation.mark\n\n    # Return which column to drop a checker (action).\n    return 0\n```\n\n## Agent Rules\n\n1. Your Submission must be an “Agent”.\n2. An Agent may only use any module from the Kaggle Kernels notebook image.\n3. An Agent’s sole purpose is to generate an action. Activities/code which do not directly contribute to this will be considered malicious and handled according to the Rules.\n4. An Agent can have a maximum file size limit of 100 MB.\n5. An Agent must return an action within 2 seconds (60 seconds on the first turn) of being invoked. If the Agent does not, it will lose the episode and may be invalidated.\n6. An Agent which throws errors or returns an invalid action will lose the episode and may be invalidated.\n\n### Evaluation\nEach Submission has a rating which is modeled by a Gaussian \\\\(\\mathcal N (\\mu, \\sigma^2)\\\\) where \\\\(\\mu\\\\) is the estimated skill and \\\\(\\sigma\\\\) represents our uncertainty of that estimate.\n\nWhen you upload a Submission, we first play a validation episode where that Submission plays against itself to make sure it works properly.  If the validation episode fails, the Submission is marked as “Error”.  Otherwise, we initialize the Submission with \\\\(\\mu_0 = 600\\\\) and it joins the pool of “All Submissions” for ongoing evaluation.\n\nWe run episodes with Submissions from the pool of All Submissions, and try to pick Submissions with similar ratings. We usually try to have each Submission participate in an episode a day, but the frequency may vary. After an episode finishes, we'll update the rating for both Submissions.  If one Submission won the episode, we'll increase its \\\\(\\mu\\\\) and decrease its opponent's \\\\(\\mu\\\\) -- if the result of the episode was a draw, then we'll move the two \\\\(\\mu\\\\) values closer towards their mean.  The updates will have magnitude relative to the deviation from the expected result based on the previous \\\\(\\mu\\\\) values, and also relative to each Submission's uncertainty \\\\(\\sigma\\\\).  We also reduce the \\\\(\\sigma\\\\) terms relative to the amount of information gained by the result of the episode.\n\nSo all valid Submissions will continually play more matches and have dynamically changing scores as the pool increases.  The Leaderboard will show the rating of each team's or participant’s (if that participant is not part of a team) best Submission.\n\n",
      "isPublished": false,
      "hasIsPublished": false,
      "postTitle": "",
      "hasPostTitle": false,
      "mimeType": "",
      "hasMimeType": false
    },
    {
      "name": "Getting Started",
      "content": "## TLDR;\n\nCreate `submission.py` with the following source and submit!\n\n```python\ndef act(observation, configuration):\n    board = observation.board\n    columns = configuration.columns\n    return [c for c in range(columns) if board[c] == 0][0]\n```\n\n## Starter Notebook\n\nFork the [ConnectX Starter Notebook](https://www.kaggle.com/ajeffries/connectx-getting-started) and submit the generated `submission.py` file.\n\n## Client Library\n\nRead the [README](https://github.com/Kaggle/kaggle-environments/blob/master/README.md) for the [kaggle-environments](https://pypi.org/project/kaggle-environments/) python package and checkout the [ConnectX Notebook](https://github.com/Kaggle/kaggle-environments/blob/master/kaggle_environments/envs/connectx/connectx.ipynb).\n\n```bash\npip install kaggle-environments\n```",
      "isPublished": false,
      "hasIsPublished": false,
      "postTitle": "",
      "hasPostTitle": false,
      "mimeType": "",
      "hasMimeType": false
    }
  ]
}