Add rule to resolve potential rematch scenario in round 3 #26
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
With the introduction of the new Initial Swiss Matchups rule added for the 2024 Copenhagen Major cycle, a flaw with assigning round 3 matchups was introduced.
There's a 0.6% chance that 1-1 record teams in round 3 will force a rematch, which is not allowed by the current ruleset.
Example Matchups
Here's an example round 3 1-1 matchup pool. First we seed based on the mid-stage seed calculation rules;
Then we follow the rule for round 3 matchup assignment:
The matchups are created from highest seed first, picking the lowest seed that doesn't result in a rematch:
Resulting flawed matchups
This conflicting matchup is not present when using the old seeding rules (1v16, 2v15, etc). There is currently no explanation in the rules how to resolve this scenario.
Solution
To fix this, the rules should be updated to either:
I chose the first option in this PR, as to preserve the Initial Swiss Matchups rule. There are other ways to resolve the rematch scenarios with varying factors of "fairness". This is the simplest.
Background
I wrote a Monte Carlo simulator to simulate every potential event outcome, which is how I found the flaw. The source can be found here: https://github.com/claabs/swiss-buchholz-problem