Tema 3 SD
Responsabili:
- Robert Grancsa
- Baldovin Razvan-Mihai-Marian
- Chitan Rafael
Actualizări
Obiective
In urma realizari acestei teme veti:
- Invata cum se folosesc grafurile in task-uri de zi cu zi
- Exersa implementarea structurilor de date arborescente
- Intelege cum se implementeaza o platforma de social media
Introducere
Task 1
Adauga prieten
Creeaza o legatura intre doi utilizatori. Aceasta este o legatura bi-directionala, adica ambele persoane se vor trece unul pe altul ca prieteni.
add <nume-1> <nume-2>
Exemplu:
> add Mihai Andrei
< Added connection Mihai - Andrei
!Info Pentru fiecare input, se garanteaza ca nu se vor folosi useri care sa nu existe in lista.
!Warning Nu aveti voie sa hardcodati marimea grafului
Elimina prieten
Elimina legatura intre doi utilizatori.
remove <nume-1> <nume-2>
Afla distanta
distance <nume-1> <nume-2>
Calculeaza distanta intre 2 persoane de pe platforma. Distanta se considera 1 pentru fiecare prietenie.
Exemplu:
> add Mihai Andrei
> add Andrei Alex
> add Alex Mihnea
> distance Mihai Mihnea
< Distanta Mihai - Mihnea este de 3
Suggestii
Gaseste si afiseaza toti prietenii prieteniilor, care nu sunt deja prieteni cu tine. Prietenii vor fi afisati crescator dupa id-ul utilizatorul.
suggestions <nume-1>
Prieteni comuni
common <nume-1> <nume-2>
Trebuie sa gasiti prietenii comuni ai doi utilizatori. Un prieten comun este o persoana care il are ca prieten si pe <nume-1>
si pe <nume-2>
.
Veti afisa lista de prieteni, sortata crescator dupa id-ul utilizatorul.
Exemplu:
> common Alex Ana
< Andrei
< Maria
< Ioana
!Info Daca nu exista nici un prieten comun, se va afisa: "No common friends for and "
Numar de prieteni
friends <nume-1>
> friends Andrei
< 10
Trebuie sa afisati numarul de prieteni al unei persoane.
Cel mai popular
popular <nume-1>
Trebuie sa afisati prietenul cu cei mai multe conexiuni dintre <nume-1>
si prietenii lui.
Exemplu (se presupune ca Andrei - Mihai - Ana sunt toti prieteni):
> friends Andrei
< 10
> friends Mihai
< 15
> friends Ana
< 9
> popular Ana
< Mihai - 15
Clică
common-group <nume-1>
Gasiti si afisati cel mai mare grup de prieteni care îl conține pe un anumit utilizator.
Un grup de prieteni se defineste ca toti oamenii dintr-un grup care se au la prieteni unii pe altii. Lista de nume afisata va fi afisata crescator dupa id-ul utilizatorului.
Exemplu:
> common-group Alex
< Alex
< Ana
< Ioana
< Mihai
> common-group Luca
< Alex
< Mihai
< Luca
Din graful acesta, se poate vedea cum Ana - Alex - Ioana - Mihai alcatuiesc un grup complet, iar Luca nu face parte din acest grup, fiindca are doar 2 prieteni comuni.
!Info O clică poate fi formata si dintr-un singur utilizator, caz in care afisam doar numele lui la output
Task 2
struct {
id: number,
titlu: string,
user_id: number,
events: tree,
}
Creeaza o postare
create <nume> <titlu>
Mentiuni
Titlul maxim 280 Se pot tine intr-un vector pentru fiecare utilizator in parte
Fiecare postare o sa fie o structura - are un post id
Repost
repost <nume> <post-id> [<repost-id>]
Mentiuni
Fiecare postare o sa fie o structura - are un post id In arbore tinem cine a facut repost-ul
LCA - Primul repost comun
common-repost <post> <repost-id-1> <repost-id-2>
Like
like <nume> <post-id> [<repost-id>]
Ratio
ratio <repost-id>
Delete Post/Repost
delete <post/repost-id>
Get likes
get-likes <post-id> [<repost-id>]
Get reposts
get-reposts <post/repost-id>
Task 3
Feed
feed <nume>
Friends that reposted
friends-repost <post-id>
Mentiune
Distanta este 3, returneaza numarul de prieteni care au repostat postarea
Referinte
Punctaj
- Task 1 -
- Task 2 -
- Task 3 -
FAQ
Q: Putem implementa tema în C++? A: Nu.
Q: Putem folosi variabile globale? A: Nu.
Q: Putem modifica scheletul / adăuga funcţii? A: Da.
Checker
TODO:
Robert - checker, skel Baldo - task 1 Rafa - task 2
In rest: cerinta, moodle, checker
Deadline: 3 mai