Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>Okay, I've given it a shot. I think that all_teams_paired/2 will provide a list of all teams paired as you described, and a leftover team (if there are an odd-number of teams).</p> <pre><code>% list of all regions regions(Regions) :- findall(Region, region(_, Region), UnsortedRegions), sort(UnsortedRegions, Regions). % list of all teams in a region teams_in_region(Region, Teams) :- findall(Team, (team(Team, _), region(Team, Region)), Teams). % bottom team in a list bottom_team(TeamList, BottomTeam) :- member(BottomTeam, TeamList), findall(Losses, (team(Team, Losses), member(Team, TeamList)), AllLosses), team(BottomTeam, Losses), min_member(Losses, AllLosses). % top team in a list top_team(TeamList, TopTeam) :- member(TopTeam, TeamList), findall(Losses, (member(Team, TeamList), team(Team, Losses)), AllLosses), team(TopTeam, Losses), max_member(Losses, AllLosses). % teams are paired with the top loser playing the bottom loser and there can be a leftover % if there is an odd number of teams paired_teams([], [], []). paired_teams([LonelyTeam], [], [LonelyTeam]). paired_teams(TeamList, PairedTeams, UnpairedTeam) :- top_team(TeamList, TopTeam), bottom_team(TeamList, BottomTeam), TopTeam \= BottomTeam, subtract(TeamList, [TopTeam, BottomTeam], RemainingTeams), paired_teams(RemainingTeams, RemainingPairedTeams, UnpairedTeam), append([TopTeam-BottomTeam], RemainingPairedTeams, PairedTeams). % a list of regions has an associated list of paired teams and leftover teams region_paired_teams([], [], []). region_paired_teams(Regions, PairedTeams, UnpairedTeams) :- Regions = [Region|RemainingRegions], teams_in_region(Region, TeamList), paired_teams(TeamList, RegionPairedTeams, RegionUnpairedTeam), region_paired_teams(RemainingRegions, RemainingPairedTeams, RemainingUnpairedTeams), append(RegionPairedTeams, RemainingPairedTeams, PairedTeams), append(RegionUnpairedTeam, RemainingUnpairedTeams, UnpairedTeams). % a list of all teams paired with priority given to region and a leftover team (if any) all_teams_paired(TeamsPaired, Leftover) :- regions(Regions), region_paired_teams(Regions, RegionPairedTeams, UnpairedTeams), paired_teams(UnpairedTeams, NonRegionPairedTeams, Leftover), append(RegionPairedTeams, NonRegionPairedTeams, TeamsPaired). </code></pre> <p>Have I understood your requirements correctly?</p>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload