Python SolutionsPython Solutions

🏆

FIFA World Cup 2026

Week 23, 2026

All Solutions

WON'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)