Domáca úloha č.1

Naprogramujte v Pythone systém, ktorý udržuje informácie o ľuďoch a skupinách. Každý človek môže byť v ľubovolnom počte skupín a každá skupina môže mať ľubovoľný počet ľudí. Implementujte nasledujúce funkcie:

add_person(name)
Pridá do systému nového človeka. Parameter name je identifikátor človeka. Vráti True/False podľa toho, či bol nový človek pridaný do systému. Novopridaný človek má 0 bodov.

add_group(name)
Pridá do systému novú skupinu. Parameter name je identifikátor skupiny. Vráti True/False podľa toho, či bola nová skupina pridaná do systému. Novopridaná skupina má 0 bodov.

add_person_to_group(person, group)
Pridá človeka s identifikátorom person do skupiny s identifikátorom group. V prípade úspechu vráti True, inak False (človek / skupina neexistujú, človek už je v skupine).

add_points_to_person(person, points)
Pridá človeku s identifikátorom person points bodov. Zároveň pridá points bodov každej skupine obsahujúcej človeka person.

add_points_to_group(group, points)
Pridá skupine s identifikátorom group points bodov. Zároveň pridá points bodov každému človeku obsiahnutému v skupine group.

person_points()
Vráti list obsahujúci všetky dvojice (identifikátor človeka, počet bodov človeka)

group_points()
Vráti list obsahujúci všetky dvojice (identifikátor skupiny, počet bodov skupiny)

person_groups(person)
Vráti zoznam skupín obsahujúcich človeka s identifikátorom person.

group_persons()
Vráti zoznam identifikátorov ľudí v danej skupine.

persons_in_a_group_with_at_least_points(points)
Vráti zoznam identifikátorov ľudí, ktorý sú v nejakej skupine s aspoň points bodmi.

persons_that_have_most_points_in_some_group()
Vráti zoznam identifikátorov ľudí, ktorý majú v nejakej skupine najviac (>=) bodov.

Námety, čo môžete použiť pri robení DÚ

Kontrolu, či človek/skupina je v systéme, možno urobiť pomocou dekorátora.
Ľahšia verzia: Parametre typu človek/skupina musia byť vždy kwargové a dekorátor to tým pádom vie ktorý parameter má byť človek a ktorý skupina.
Ťažšia verzia: Parametre typu človek/skupina sú pozične a dekorátor bude parametrizovaný aby vedel koľký argument je človek a koľký skupina.

Na viacerých miestach zadania sa dá pohrať s list comprehensions.

V probléme je symetria persons vs groups, a určite je možné ju využiť.