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.
[{'user_id': '74ebad2c-2384-4746-a6d9-79339adaef74', 'value': 'Acabas de ser contratado como ingeniero de software en una empresa especializada en análisis de datos. Tu primera tarea consiste en implementar un algoritmo que calcule la media, la mediana y la moda de una lista de números enteros. La media es el promedio de todos los números de la lista, la mediana es el número del centro cuando la lista se ordena en orden ascendente y la moda es el número que aparece con más frecuencia en la lista. Sin embargo, hay un problema: no puedes utilizar ninguna función o librería integradas para calcular estas estadísticas.\n\nEscribe una función `calcular_estadísticas(números)` que reciba una lista de enteros como parámetro y devuelva un diccionario que contenga la media, la mediana y la moda de los números indicados.\n\n**Firma de la función**\n`def calcular_estadisticas(números: List[int]) -> Dict[str, Union[float, int]]:`\n\n**Entrada**\nEl parámetro `números` es una lista de al menos un entero y como máximo 1000 enteros (-10^9 ≤ numbers[i] ≤ 10^9).\n\n**Salida**\nLa función debe devolver un diccionario con tres claves: «media», «mediana» y «moda». Los valores correspondientes a cada clave deben ser el cálculo de la media (float), la mediana (int) y la moda (int) respectivamente.\n\n**Ejemplos**\nSupongamos las siguientes entradas\n```python\nnúmeros = [1, 2, 3, 4, 5, 5, 6]\n```\nLa función debería devolver:\n```python\n{\n  "media": 4.0,\n  "mediana": 4,\n  "moda": 5\n}\n```\nSupongamos que se dan las siguientes entradas\n```python\nnúmeros = [3, 1, 2, 2, 4, 3]\n```\nLa función debería devolver:\n```python\n{\n  "media": 2.5,\n  "mediana": 2,\n  "moda": 2\n}\n```\n**Nota**\nEn el primer ejemplo, la media se calcula como (1+2+3+4+5+5+6)/7 = 26/7 ≈ 4,0, la mediana es el número del centro cuando la lista se ordena ascendentemente, que es 4, y la moda es 5, ya que aparece dos veces, que es más que cualquier otro número.\n\nEn el segundo ejemplo, la media se calcula como (3+1+2+2+4+3)/6 = 15/6 = 2,5, la mediana es 2 porque es el número del centro, y la moda es 2 porque aparece dos veces, que es más que cualquier otro número.\n\n', 'status': 'submitted'}]
{"source": "argilla/DistiCoder-dpo-binarized", "kind": "synthetic", "evolved_from": null}