Python SolutionsPython Solutions
🏆
FIFA World Cup 2026
Week 23, 2026
All SolutionsWON'T WORK (MUST chng goal to goals in RND16) | devilssnare | Python Solutions
# Mr. Draw6 discovered that this solution will not work unless we change goal to goals in Round 16 only. In other words, all singular instances of goal must be converted to goals, but only in Round 16. Mr. Draw6 is a wizard
from itertools import combinations
groups = [
["Mexico", "South Africa", "Korea Republic", "Czechia"],
["Canada", "Bosnia and Herzegovina", "Qatar", "Switzerland"],
["Brazil", "Morocco", "Haiti", "Scotland"],
["USA", "Paraguay", "Australia", "Türkiye"],
["Germany", "Curaçao", "Côte d'Ivoire", "Ecuador"],
["Netherlands", "Japan", "Sweden", "Tunisia"],
["Belgium", "Egypt", "IR Iran", "New Zealand"],
["Spain", "Cabo Verde", "Saudi Arabia", "Uruguay"],
["France", "Senegal", "Iraq", "Norway"],
["Argentina", "Algeria", "Austria", "Jordan"],
["Portugal", "Congo DR", "Uzbekistan", "Colombia"],
["England", "Croatia", "Ghana", "Panama"]
]
ratings = {
"France": 1877.32,
"Spain": 1876.4,
"Argentina": 1874.81,
"England": 1825.97,
"Portugal": 1763.83,
"Brazil": 1762.66,
"Netherlands": 1757.87,
"Morocco": 1755.87,
"Belgium": 1734.71,
"Germany": 1731.3,
"Croatia": 1717.07,
"Colombia": 1695.99,
"Senegal": 1686.41,
"Mexico": 1684.13,
"USA": 1675.7,
"Uruguay": 1673.07,
"Japan": 1661.58,
"Switzerland": 1650.75,
"IR Iran": 1616.04,
"Türkiye": 1601.99,
"Austria": 1597.4,
"Ecuador": 1596.48,
"Korea Republic": 1589.65,
"Australia": 1578.66,
"Egypt": 1565.56,
"Algeria": 1564.26,
"Canada": 1560.62,
"Norway": 1555.6,
"Panama": 1539.14,
"Côte d'Ivoire": 1532.98,
"Sweden": 1510.11,
"Paraguay": 1503.5,
"Czechia": 1503.04,
"Scotland": 1499.92,
"Tunisia": 1479.1,
"Congo DR": 1478.35,
"Uzbekistan": 1461.21,
"Qatar": 1452.37,
"Iraq": 1447.77,
"South Africa": 1428.38,
"Saudi Arabia": 1419.73,
"Jordan": 1390.1,
"Bosnia and Herzegovina": 1385.77,
"Cabo Verde": 1369.29,
"Ghana": 1345.23,
"Curaçao": 1293.08,
"Haiti": 1291.71,
"New Zealand": 1281.57
}
round_32_slots = [
"1E", "?", "1I", "?", "2A", "2B", "1F", "2C",
"2K", "2L", "1H", "2J", "1D", "?", "1G", "?",
"1C", "2F", "2E", "2I", "1A", "?", "1L", "?",
"1J", "2H", "2D", "2G", "1B", "?", "1K", "?"
]
third_place_rules = {
"ACDEGIJL": ["E", "G", "J", "C", "A", "D", "L", "I"]
}
def get_goal_margin(rating_gap):
if rating_gap >= 500:
return 3
if rating_gap >= 250:
return 2
if rating_gap >= 100:
return 1
return 0
def play_game(first_team, second_team, knock_out_game=False):
rating_gap = abs(ratings[first_team] - ratings[second_team])
goal_margin = get_goal_margin(rating_gap)
if goal_margin == 0:
if knock_out_game:
if ratings[first_team] > ratings[second_team]:
return first_team, second_team, "penalties"
return second_team, first_team, "penalties"
return None, None, "draw"
if ratings[first_team] > ratings[second_team]:
return first_team, second_team, goal_margin
return second_team, first_team, goal_margin
def write_game_line(first_team, second_team, knock_out_game=False):
winner, loser, result = play_game(first_team, second_team, knock_out_game)
if result == "draw":
return f"{first_team} drew with {second_team}", None
if result == "penalties":
return f"{winner} beat {loser} on penalties", winner
if result == 1:
return f"{winner} beat {loser} by 1 goal", winner
return f"{winner} beat {loser} by {result} goals", winner
def run_tournament():
group_letters = "ABCDEFGHIJKL"
lines = []
group_standings = {}
third_place_list = []
for group_letter, group_teams in zip(group_letters, groups):
team_stats = {}
for team in group_teams:
team_stats[team] = {
"points": 0,
"goal_difference": 0
}
lines.append(f"--- Group {group_letter} Matches ---")
for first_team, second_team in combinations(group_teams, 2):
match_line, _ = write_game_line(first_team, second_team)
lines.append(match_line)
winner, loser, result = play_game(first_team, second_team)
if result == "draw":
team_stats[first_team]["points"] += 1
team_stats[second_team]["points"] += 1
else:
team_stats[winner]["points"] += 3
team_stats[winner]["goal_difference"] += result
team_stats[loser]["goal_difference"] -= result
final_table = sorted(
group_teams,
key=lambda team: (
-team_stats[team]["points"],
-team_stats[team]["goal_difference"],
-ratings[team]
)
)
group_standings[group_letter] = final_table
lines.append("")
lines.append(f"--- Group {group_letter} Table ---")
for place, team in enumerate(final_table, 1):
points = team_stats[team]["points"]
goal_difference = team_stats[team]["goal_difference"]
lines.append(f"{place}. {team} {points} {goal_difference}")
lines.append("")
third_team = final_table[2]
third_place_list.append({
"group": group_letter,
"team": third_team,
"points": team_stats[third_team]["points"],
"goal_difference": team_stats[third_team]["goal_difference"],
"rating": ratings[third_team]
})
third_place_list.sort(
key=lambda team: (
-team["points"],
-team["goal_difference"],
-team["rating"]
)
)
best_third_placed_teams = third_place_list[:8]
eliminated_third_placed_teams = third_place_list[8:]
lines.append("--- Third Place Qualifiers ---")
for place, team in enumerate(best_third_placed_teams, 1):
lines.append(
f"{place}. {team['team']} {team['points']} {team['goal_difference']}"
)
lines.append("--- Third Place Eliminations ---")
for place, team in enumerate(eliminated_third_placed_teams, 9):
lines.append(
f"{place}. {team['team']} {team['points']} {team['goal_difference']}"
)
third_place_key = "".join(sorted(team["group"] for team in best_third_placed_teams))
if third_place_key not in third_place_rules:
raise ValueError(f"No third-place rule found for {third_place_key}")
group_winners_that_face_third = ["A", "B", "D", "E", "G", "I", "K", "L"]
third_place_order = third_place_rules[third_place_key]
third_team_for_winner = dict(zip(group_winners_that_face_third, third_place_order))
team_places = {}
for group_letter in group_letters:
table = group_standings[group_letter]
team_places[f"1{group_letter}"] = table[0]
team_places[f"2{group_letter}"] = table[1]
team_places[f"3{group_letter}"] = table[2]
current_bracket = []
for slot_number, slot in enumerate(round_32_slots):
if slot != "?":
current_bracket.append(team_places[slot])
else:
previous_slot = round_32_slots[slot_number - 1]
winner_group = previous_slot[1]
third_group = third_team_for_winner[winner_group]
current_bracket.append(team_places[f"3{third_group}"])
round_names = [
"Round of 32",
"Round of 16",
"Quarter Final",
"Semi Final",
"Final"
]
for round_name in round_names:
lines.append("")
lines.append(f"--- {round_name} ---")
winners = []
for game_number in range(1, len(current_bracket) // 2 + 1):
first_team = current_bracket[(game_number - 1) * 2]
second_team = current_bracket[(game_number - 1) * 2 + 1]
match_line, winner = write_game_line(
first_team,
second_team,
knock_out_game=True
)
lines.append(f"{game_number}. {match_line}")
winners.append(winner)
current_bracket = winners
return "\n".join(lines)
if __name__ == "__main__":
result = run_tournament()
print(result)