Human: Escribe en lenguaje markdown una descripción de lo que va el proyecto:


El objetivo de los Ciclistas será acabar cada Etapa con el menor tiempo posible y así tratar de ganar el campeonato de Ciclistas y que sus Equipos ganen el campeonato por Equipos.

Descripción de las clases principales existentes en el proyecto «DP Ciclismo»

Estas características van a influir de diversas formas en el rendimiento del Ciclista con su Bicicleta. Así, la velocidad que es capaz de alcanzar un Ciclista con un Bicicleta en una Etapa depende inversamente de este valor. Es decir, a mayor dificultad, menor será la velocidad que el Ciclista con su Bicicleta pueden alcanzar en esa Etapa. Este valor se deberá usar para el cómputo de la velocidad de cada Ciclista.

Influye de forma directa en los minutos que necesita un Ciclista con su Bicicleta para finalizar la carrera. Es decir, a mayor distancia en una Etapa, mayor será el tiempo necesario que el Ciclista con su Bicicleta necesita para finalizar esa Etapa.

Estas características van a influir de diversas formas en el rendimiento del Ciclista y la Bicicleta que usa en cada Etapa. Hay que tener en cuenta que la velocidad alcanzada por un Ciclista con una Bicicleta durante una Etapa dependerá directamente de la habilidad del Ciclista e inversamente de este campo peso y de la dificultad de la Etapa.

Funcionalidad de la clase Bicicleta

Estos dos tipos serán excluyentes entre sí. Es decir, tendremos objetos de tipo Bicicleta normal, objetos de tipo BicicletaRapida u objetos de tipo BicicletaPrototipo pero no de varios tipos a la vez.

Funcionalidad de la clase BicicletaRapida

Debe ser capaz de calcular su velocidad cuando es usada por un Ciclista en particular en una Etapa en concreto. Debe ser capaz de proporcionar el tiempo necesario para terminar la Etapa cuando es usada por un Ciclista en particular en una Etapa concreta.

Funcionalidad de la clase Ciclista

Debe ser capaz de recibir la Bicicleta que le asigne su Equipo y poder cambiarla entre carrera y carrera. Debe ser capaz de gestionar y proporcionar información sobre el resultado obtenido en cualquier Etapa. Debe ser capaz de devolver el número total de Etapas en las que ha participado, las que ha terminado, total de tiempo acumulado en las etapas que consiguió terminar, y, su caso, la Etapa en la que abandonó. Debe proporcionar la funcionalidad necesaria para que el Ciclista pueda usar una Bicicleta en una Etapa.

Debe ser capaz de calcular la destreza de un Ciclista. Esta destreza dependerá de su habilidad y del tipo de Ciclista que sea. La explicación sobre los tipos de Ciclista y la fórmula concreta de cada tipo de Ciclista para calcular su destreza se explica a continuación.

Estos tres tipos serán excluyentes entre sí y de los únicos que se pueden crear objetos de tipo Ciclista. Es decir, no habrá la posibilidad de crear objetos de tipo Ciclista que no sean de tipo CiclistaNovato, CiclistaExperimentado o CiclistaEstrella.

Funcionalidad de la clase Equipo

Debe ser capaz de ordenar sus Ciclistas y sus Bicicletas de acuerdo a los criterios de comparación que tenga el Equipo teniendo en cuenta además que dichos criterios podrían ser modificados durante el campeonato. Debe ser capaz de proporcionar información sobre el total de tiempo acumulado por sus Ciclistas. Debe ser capaz de enviar en cada Etapa a sus Ciclistas sin abandonar junto con las Bicicletas asignadas. Esta estructura se mantendrá ordenada de acuerdo a un criterio de comparación de Equipos, que se podrá aplicar de forma ascendente o descendente, basado en el uso de una o varias de sus características como, nombre, total de minutos acumulados por sus corredores, etc. .

ciclistasCarrera, estructura con los Ciclistas que van a competir en una determinada carrera. Esta estructura se mantendrá ordenada de acuerdo a un criterio de comparación de Ciclistas, que se podrá aplicar de forma ascendente o descendente, basado en el uso de una o varias de sus características como energía, nombre, total de minutos acumulados, nombre, etc. . Dicho orden podrá ser completamente distinto para cada Equipo e incluso podría ser modificado durante el campeonato.

Solo queda un Ciclista para competir porque el resto ya ha abandonado.

Es decir, ningún Ciclista ni Equipo habrá ganado el campeonato.
Solicitará en cada turno a cada Equipo que le envíe los Ciclistas que tiene. La Organización irá incluyendo a cada Ciclista, junto con su Bicicleta asignada, en el orden recibido en la estructura de datos Ciclistas.

Datos iniciales proporcionados

Se proporcionarán dos ficheros con unos datos iniciales de prueba para poder ejecutar la simulación con los mismos datos de partida

Assistant: # Descripción del proyecto DP Ciclismo

El objetivo de los ciclistas es terminar cada etapa con el tiempo más corto posible y ganar el campeonato de ciclistas y el campeonato por equipos.

## Clases principales

- **Ciclista**: se encarga de recibir la bicicleta que le asigna su equipo, cambiarla entre carreras y gestionar y proporcionar información sobre su rendimiento en las etapas. Puede ser un ciclista novato, experimentado o estrella y según su tipo, su destreza será calculada de forma diferente.

- **Bicicleta**: existen tres tipos: normal, rápida y prototipo. Cada una tendrá una velocidad diferente según la habilidad del ciclista y la dificultad de la etapa.

- **Bicicleta Rapida**: es capaz de calcular su velocidad y el tiempo necesario para terminar una etapa cuando es usada por un ciclista en particular.

- **Equipo**: se encarga de ordenar sus ciclistas y bicicletas, proporcionar información sobre el tiempo acumulado por sus ciclistas y enviarlos a las etapas con las bicicletas asignadas.

## Funcionalidades

- **Bicicleta**: Calcular su velocidad y el tiempo necesario para terminar una etapa cuando es usada por un ciclista en particular.

- **Ciclista**: Recibir la bicicleta que le asigne su equipo, gestionar su rendimiento en las etapas y calcular su destreza.

- **Equipo**: Ordenar sus ciclistas y bicicletas, proporcionar información sobre el tiempo acumulado por sus ciclistas y enviarlos a las etapas.