예제 #1
0
def menu():
    team_id = input("Enter the Team ID: ")
    if os.path.isfile(team_id):
        with open(team_id, 'r') as f:
            json_data = json.load(f)
            team = Team.fromjson(json_data)

    else:
        team = Team(team_id)

    while (1):
        print("Menu")
        print("1# To add a Member's name,")
        print("2# To see the list of Members,")
        print("3# To set a Member as paid,")
        print("4# to delete a Member,")
        print("5# to see the list of paid Member,")
        print("6# to save the changes in a Json file,")
        print("0# to quit.")

        choice = int(input("Please, Enter your choice: "))

        if choice == 1:
            rep = int(
                input(
                    "Enter the total number of member's you want to enter: "))
            if max_team_limit >= rep + len(team.members):
                for r in range(rep):
                    team.add_member()
            else:
                print(
                    "Reached Maximum limit, no more members can be added in the team"
                )
        elif choice == 2:
            team.print_member_list()

        elif choice == 3:
            member_name = input(
                "Enter the member's name you want to set as paid: ")
            team.set_member_paid(member_name)
        elif choice == 4:
            member_name = input("Enter the member's name you want to delete: ")
            team.delete_member(member_name)

        elif choice == 5:
            team.paid_members()

        elif choice == 6:
            with open(team.team_id, 'w') as f:
                json.dump(team.json(), f)
        elif choice == 0:
            break
예제 #2
0
def basicSort(people, groupSize):

    allGroups = []
    for run in range(0,
                     20):  # do 5 random runs of algorithm, find best grouping
        peopleCopy = copy.deepcopy(people)
        print("RUN: " + str(run), end=": ")
        random.shuffle(people)
        while (len(peopleCopy) % groupSize != 0):
            blank = Person(-1, [""], "", 0, "", 0)
            blank.setPlaceHolder()
            peopleCopy.append(blank)

        for i in range(
                0, len(peopleCopy)):  #get everyones rankings of everyone else
            for j in range(0, len(peopleCopy)):
                if i != j:
                    peopleCopy[i].preferences[
                        peopleCopy[j]] = peopleCopy[i].compare(peopleCopy[j])
            peopleCopy[i].genRankings()

        for i in range(0, groupSize - 1):

            group1 = peopleCopy[i * (len(peopleCopy) // groupSize):(i + 1) *
                                (len(peopleCopy) // groupSize)]
            group2 = peopleCopy[(i + 1) * (len(peopleCopy) // groupSize):min(
                (i + 2) * (len(peopleCopy) // groupSize), len(peopleCopy)
            )]  #getting the 2 groups to compare rankings etc
            while (
                    len(group1) > 0
            ):  # while there are still groups to be matched with singles
                asker = group1[0]  #get asker, and who is asking
                for possibleAsk in asker.rankings:  # highest ranking in other group
                    if possibleAsk in group2:
                        toAsk = possibleAsk
                        asker.rankings.remove(toAsk)
                        break

                if not toAsk.inGroup(
                ):  # if not in a group, add the person to the group and remove the asker from their group
                    toAsk.groupMember = asker
                    asker.groupMember = toAsk
                    group1.remove(asker)
                else:  #if toAsk prefers the asker to their current group member
                    if (toAsk.rankings.index(asker) < toAsk.rankings.index(
                            toAsk.groupMember)):
                        group1.append(toAsk.groupMember)
                        toAsk.groupMember = asker
                        asker.groupMember = toAsk
                        group1.remove(asker)

            for j in range((i + 1) * (len(peopleCopy) // groupSize),
                           min((i + 2) * (len(peopleCopy) // groupSize),
                               len(peopleCopy))
                           ):  # i tells us how many group members they have
                toChange = peopleCopy[
                    j]  # want to edit this person's preferenes based on their group member
                basedOff = toChange.groupMember
                for key in toChange.preferences.keys():
                    if (key != basedOff):
                        toChange.preferences[key] = (
                            toChange.preferences[key] +
                            basedOff.preferences[key]) / 2
                peopleCopy[j].genRankings()

        #import pdb; pdb.set_trace();
        groups = []
        for i in range(0, len(peopleCopy) // groupSize):
            member = peopleCopy[i]
            newGroup = []
            while (member not in newGroup):
                newGroup.append(member)
                member = member.groupMember
            groups.append(newGroup)
        allGroups.append(groups)
        print(groups)

    satisfactions = []
    maxSatisfaction = 0
    maxIndex = 0

    for groupMatch in allGroups:
        forSum = []
        for group in groupMatch:
            forSum.append(groupSatisfaction(group))
        satisfactions.append(sum(forSum))

    for i in range(0, len(satisfactions)):
        if (satisfactions[i] > maxSatisfaction):
            maxSatisfaction = satisfactions[i]
            maxIndex = i

    toConvert = allGroups[maxIndex]
    output = []
    for indTeam in toConvert:
        toAdd = Team(people[0].event)
        for person in indTeam:
            if not person.placeholder:
                toAdd.add_member(person)
        output.append(toAdd)

    return output