summaryrefslogtreecommitdiff
path: root/py03/ex3/ft_achievement_tracker.py
blob: 81e9c15fcfc7b1a6bcff9e79b738510593bfb242 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#!/usr/bin/env python3
# https://www.freecodecamp.org/learn/python-v9/review-dictionaries-and-sets/review-dictionaries-and-sets

import random


class Player:
    def __init__(self, name: str, achievements: set[str]):
        self.name = name
        self.achievements = achievements


def gen_player_achievements(player: str, achievements: set[str]):
    pa = set()
    list_ach = list(achievements)
    for _ in range(9):
        achievement = random.choice(list_ach)
        pa.add(achievement)
    return pa


if __name__ == "__main__":
    print("=== Achievement Tracker System ===")
    achievements = {'Crafting Genius',
                    'World Savior',
                    'Master Explorer',
                    'Collector Supreme',
                    'Untouchable',
                    'Boss Slayer',
                    'Strategist',
                    'Unstoppable',
                    'Speed Runner',
                    'Survivor',
                    'Treasure Hunter',
                    'First Steps',
                    'Sharp Mind'}
    print()
    black_for = '\033[0;30m'
    pink_bak = '\033[48;5;205m'
    stp_color = '\033[0m'
    # print players' achievement(s)
    players_list: list[str] = ['Alice', 'Bob', 'Charlie', 'Dylan']
    players = []
    i = 0
    for player in players_list:
        players.append(Player(player,
                       gen_player_achievements(player, achievements)))
        print(f"{black_for}{pink_bak}Player {players[i].name}:"
              f"{stp_color} {players[i].achievements}")
        i += 1
    print()
    union = players[0].achievements.union(players[1].achievements,
                                          players[2].achievements,
                                          players[3].achievements)
    print(f"{black_for}{pink_bak}All distinct achievements:"
          f"{stp_color} {union}")
    print()
    common_achievements = players[0].achievements.intersection(
                        players[1].achievements,
                        players[2].achievements,
                        players[3].achievements)
    print(f"{black_for}{pink_bak}Common achievements:"
          f"{stp_color} {common_achievements}")
    print()
    # print players' unique achievement(s)
    print("Only", players[0].name, "has: ",
          players[0].achievements.difference(players[1].achievements,
          players[2].achievements,
          players[3].achievements))
    print("Only", players[1].name, "has: ",
          players[1].achievements.difference(players[0].achievements,
          players[2].achievements,
          players[3].achievements))
    print("Only", players[2].name, "has: ",
          players[2].achievements.difference(players[1].achievements,
          players[0].achievements,
          players[3].achievements))
    print("Only", players[3].name, "has: ",
          players[3].achievements.difference(players[1].achievements,
          players[2].achievements,
          players[0].achievements))
    print()
    # print what each player is missing
    i = 0
    # iterate through the list of string
    for player in players_list:
        missing = set()
        for key in achievements:
            # check players' achievement in list of instances
            if key not in players[i].achievements:
                missing.add(key)
        print(f"{black_for}{pink_bak}{players[i].name}"
              f" is missing\033[0m {missing}")
        i += 1