목록 문제

나는 C로 배열을 작성하는 방법을 배운 이후로 이 알고리즘에 대해 작업해 왔으며 내가 놓친 것을 간파할 수 없는 것 같습니다. 이 알고리즘은 모든 팀이 일주일에 한 번 서로 홈 앤 어웨이 경기를 치를 경우 20개 팀 리그(EPL)에서 가능한 모든 고정 장치를 만들려는 시도입니다. 모든 팀이 경기를 하면 주당 10경기, 팀당 38경기(38주), 총 380경기가 됩니다.

도전


  • 한 팀은 한 주에 두 번 경기할 수 없습니다(20개 팀은 10경기만 할 수 있음),
  • 동일한 고정 장치가 반복되지 않습니다.

  • 문제



    반복을 피하기 위해 이전에 고정 장치와 양 팀이 선택되지 않았는지 확인하지만 결과는 처음 6주 동안 각각 10경기, 다음 9주 동안 8경기, 다음 3주 동안 10경기, 4경기로 표시됩니다. 지난 2주 동안 총 320개의 픽스처만 선정되었습니다.

    관찰



    수년에 걸쳐 나는 해결책 없이 java, python, php, javascript 및 c에 이르기까지 다양한 언어로 다양한 구현을 시도했습니다.
    그런 다음 픽스쳐를 섞기로 결정했고 선택한 픽스쳐는 10개의 다른 실행에서 360에서 369 범위에 있었습니다. 마음의 변화는 왜?

    이것은 목록 문제입니까, 아니면 단순히 더 좋은 방법이 있습니까?

    teams = ["ARS", "AVL", "BRE", "BOU", "BRI",
            "BUR", "CHE", "CRY", "FUL",
            "EVE", "LEE", "LEI", "LIV", "MCI", "MUN",
            "NEW", "TOT", "WHU", "WOL", "WAT"]
    
    #All 380 possible fixtures len(fixtures) prints 380
    #Shuffle this to see the change
    fixtures =  [f"{home} - {away}" for home in teams for away in teams if home != away]
    
    #38 match weeks if 10 matches are played every week. Each team plays only once per week
    match_weeks = []
    
    #Fixtures played // no same fixture is to be played twice
    #i.e ARS - CHE can appear only once per season, but CHE - ARS only
    s_fixtures = []
    
    #Making fixtures for all 38 weeks
    for i in range(38):
        match_week = [] #should be exactly 10 unique games every week = 20/2
        s_teams = [] #teams already selected in the current week // 20 teams every week
        for fixture in fixtures:
            if len(match_week) == 10: #to save some iterations/time 
                break
            if fixture not in s_fixtures:
                home, away = fixture[:3], fixture[6:]
                if home not in s_teams and away not in s_teams:
                    s_teams.extend([home, away]) # add teams to selected list
                    print(len(s_teams))
                    match_week.append(fixture)
                    s_fixtures.append(fixture) #add fixture to selected list
        match_weeks.append(match_week)
    

    좋은 웹페이지 즐겨찾기