| **You can download the initial exercise file from [link](https://quera.org/contest/assignments/103149/download_problem_initial_project/356092/).** |
| ------------------------------------------------------------------------------ |
Welcome to the "Cinema-Plus" startup!
A few months ago, the product team noticed a strange problem. Although the movie recommendation system has an acceptable performance for most users, a group of users is almost never satisfied with the system's recommendations. These individuals usually have a specific, strict taste that differs from the mainstream; the kind of audience that, if you've heard the name **Masoud Ferasati**, you can guess what this type of taste entails!
As you know, Mr. Ferasati's taste is different from many audiences. He has repeatedly harshly criticized movies that the general public liked, and conversely, defended works that received less attention. For this reason, using a regular recommendation system that merely suggests the most popular movies is completely useless.
To solve this problem, the data team has launched a project named **Ferasati Project**. In this project, thousands of user reviews and comments, registered ratings, and movie watch histories have been collected. Now it is your turn to implement the core of this recommendation system.
You must write a function that takes a user ID (`user_id`) as input, models their taste, and suggests the best movies they haven't watched yet.

The data engineering team has provided the extracted information to you in a single file. Each row of this dataset represents a review submitted by a user for a specific movie. The details of this dataset's columns are as follows:
| **Column Name** | **Description** |
| ------------------ | ------------------------------------------------------------------- |
| `name_film` | Movie name |
| `director` | Movie director's name |
| `imdb` | Movie rating on IMDB |
| `overal_rate` | Average overall rating of Cinema-Plus platform users for this movie |
| `rates_count` | Total number of users who rated this movie on the platform |
| `user_id` | Unique identifier of the user who submitted the review |
| `comment_date` | Date the review was submitted by the user |
| `comment_likes` | Number of times this user's review was liked by others |
| `comment_dislikes` | Number of times this user's review was disliked by others |
| `comment_text` | Review text and user's opinion about the movie |
| `movie_id` | Unique identifier of the movie |
### **Submission Format**
To evaluate your program, you must submit a Python file named `movie_suggestor.py`. This file must contain a function named `movie_suggestor`.
### **Input**
The input to the program is an integer (`int`) representing the `user_id`, along with the dataframe provided in the initial files. (The dataframe is passed directly, and there is no need to read it inside movie_suggestor.py.)
```
11111, df
```
### **Output**
The output consists of **10 movie identifiers (movie_id)**, each placed on a separate line.
```
2222
3333
4444
4555
...
```
### **Evaluation Method**
To evaluate your model's performance, the judging system uses the **Precision@10** metric. For each user given as input to your function, the judging system has an actual list (_Ground Truth_) that we know the user is interested in. The final score calculation formula is as follows:
$$Mean\ Precision@10 = \frac{1}{N} \sum_{u=1}^{N} \left( \frac{\vert{}R_u \cap G_u\vert{}}{10} \times 100 \right)$$
Where in this formula:
%align_left_start%
+ $N$: Total number of users evaluated in the judging system.
+ $u$: Represents each of the users.
+ $R_u$: The set of 10 movies suggested by your function for user $u$.
+ $G_u$: The actual set of movies (_Ground Truth_) that user $u$ has definitely watched or is interested in.
+ $\vert{}R_u \cap G_u\vert{}$: The number of common movies between your suggested list and the actual list, which indicates the number of correct suggestions.
%align_end%