You have been recently hired as a software engineer at a company specializing in data analysis. Your first task is to implement an algorithm that calculates the mean, median, and mode of a given list of integers. The mean is the average of all the numbers in the list, the median is the middle number when the list is sorted in ascending order, and the mode is the number that appears most frequently in the list. However, there is a catch - you are not allowed to use any built-in functions or libraries for calculating these statistics.

Write a function `calculate_stats(numbers)` that takes in a list of integers as a parameter and returns a dictionary containing the mean, median, and mode of the given numbers.

**Function Signature**
`def calculate_stats(numbers: List[int]) -> Dict[str, Union[float, int]]:`

**Input**
The `numbers` parameter is a list of at least one integer and at most 1000 integers (-10^9 ≤ numbers[i] ≤ 10^9).

**Output**
The function should return a dictionary with three keys: "mean", "median", and "mode". The values corresponding to each key should be the calculated mean (float), median (int), and mode (int) respectively.

**Examples**
Suppose the following inputs are given:
```python
numbers = [1, 2, 3, 4, 5, 5, 6]
```
The function should return:
```python
{
  "mean": 4.0,
  "median": 4,
  "mode": 5
}
```

Suppose the following inputs are given:
```python
numbers = [3, 1, 2, 2, 4, 3]
```
The function should return:
```python
{
  "mean": 2.5,
  "median": 2,
  "mode": 2
}
```

**Note**
In the first example, the mean is calculated as (1+2+3+4+5+5+6)/7 = 26/7 ≈ 4.0, the median is the middle number when the list is sorted in ascending order, which is 4, and the mode is 5 since it appears twice which is more than any other number.

In the second example, the mean is calculated as (3+1+2+2+4+3)/6 = 15/6 = 2.5, the median is 2 because it is the middle number, and the mode is 2 since it appears twice, which is more than any other number.
f4d8878d-e378-4087-a99b-c31dad5f0609
Πρόσφατα σε προσέλαβαν ως μηχανικό λογισμικού σε μια εταιρεία που ειδικεύεται στην ανάλυση δεδομένων. Η πρώτη σου δουλειά είναι να εφαρμόσεις έναν αλγόριθμο που θα υπολογίζει το μέσο όρο, τη διάμεσο και την επικρατούσα τιμή μιας δεδομένης λίστας ακεραίων. Ο μέσος όρος είναι ο μέσος όρος όλων των αριθμών στη λίστα, ο διάμεσος είναι ο μεσαίος αριθμός όταν η λίστα ταξινομείται με αύξουσα σειρά και η επικρατούσα τιμή είναι ο αριθμός που εμφανίζεται πιο συχνά στη λίστα. Ωστόσο, υπάρχει ένα πρόβλημα - δεν επιτρέπεται να χρησιμοποιήσεις ενσωματωμένες συναρτήσεις ή βιβλιοθήκες για τον υπολογισμό αυτών των στατιστικών.

Γράψε μια συνάρτηση `calculate_stats(numbers)` που θα λαμβάνει μια λίστα ακεραίων ως παράμετρο και επιστρέφει ένα λεξικό που θα περιέχει τον μέσο όρο, τη διάμεσο και την επικρατούσα τιμή των δεδομένων αριθμών.


**Υπογραφή συνάρτησης**
`def calculate_stats(numbers: List[int]) -> Dict[str, Union[float, int]]:`

**Είσοδος**
Η παράμετρος `numbers` είναι μια λίστα με τουλάχιστον έναν ακέραιο και το πολύ 1000 ακέραιους αριθμούς (-10^9 ≤ numbers[i] ≤ 10^9).

**Έξοδος**
Η συνάρτηση θα πρέπει να επιστρέψει ένα λεξικό με τρία κλειδιά: "mean", "median" και "mode". Οι τιμές που αντιστοιχούν σε κάθε κλειδί θα πρέπει να είναι ο υπολογισμένος μέσος όρος (float), ο διάμεσος (int) και η επικρατούσα τιμή (int) αντίστοιχα.

**Παραδείγματα**
Ας υποθέσουμε ότι δίνονται οι ακόλουθες είσοδοι:
```python
numbers = [1, 2, 3, 4, 5, 5, 6]
```
Η συνάρτηση πρέπει να επιστρέψει:
```python
{
  "mean": 4.0,
  "median": 4,
  "mode": 5
}
```

Ας υποθέσουμε ότι δίνονται οι ακόλουθες είσοδοι:
```python
numbers = [3, 1, 2, 2, 4, 3]
```
Η συνάρτηση πρέπει να επιστρέψει:
```python
{
  "mean": 2.5,
  "median": 2,
  "mode": 2
}
```

**Σημείωση**
Στο πρώτο παράδειγμα, ο μέσος όρος υπολογίζεται ως (1+2+3+4+5+5+6)/7 = 26/7 ≈ 4.0, ο διάμεσος είναι ο αριθμός στην μέση της λίστας όταν η λίστα ταξινομείται με αύξουσα σειρά, η οποία είναι 4, και η επικρατούσα τιμή είναι 5 αφού εμφανίζεται δύο φορές, που είναι περισσότερο από οποιονδήποτε άλλο αριθμό.

Στο δεύτερο παράδειγμα, ο μέσος όρος υπολογίζεται ως (3+1+2+2+4+3)/6 = 15/6 = 2.5, ο διάμεσος είναι 2 επειδή είναι ο αριθμός στην μέση και η επικρατούσα τιμή είναι 2 αφού εμφανίζεται δύο φορές, που είναι περισσότερο από οποιονδήποτε άλλο αριθμό.

submitted
{"source": "argilla/DistiCoder-dpo-binarized", "kind": "synthetic", "evolved_from": null}