Actividad Entregable UD4: La Logística de Santa Claus 🎅🎁
Resultados de Aprendizaje
Esta actividad trabaja el siguiente RA del módulo de Programación:
- RA6 — Reconoce las librerías de clases relacionadas con tipos de datos avanzados. Utiliza listas, conjuntos y mapas para almacenar, procesar e iterar colecciones de objetos, eligiendo la estructura adecuada para cada problema.
Objetivo
Diseñar y construir un programa complejo aplicando los principios de colecciones y estructuras de datos dinámicas, haciendo uso combinado de ArrayList, HashSet y HashMap.
Contexto
Santa Claus necesita un programa para optimizar el reparto de regalos de una zona e integrarlo en el GPS de su trineo. Y te ha encomendado la misión de hacerlo.
Como sabemos, los repartos se realizan a la velocidad de la luz, por lo que en cada población sólo necesita unos milisegundos para completar la tarea.
Sin embargo, Santa Claus quiere optimizar el reparto y empezar primero por las poblaciones que necesiten menos tiempo.
Cada población tiene unos milisegundos asignados. Por ejemplo:
- Benifairó: 500 ms
- Gilet: 1000 ms
- Canet: 1800 ms
- Faura: 950 ms
- Sagunto: 20000 ms
Si optimizamos los tiempos, la ruta de reparto quedaría así:
graph LR
A[Benifairó] --> B[Faura]
B --> C[Gilet]
C --> D[Canet]
D --> E[Sagunto]
Enunciado
Desarrolla una aplicación modular de consola usando estructuras de datos dinámicas. Cumpliará los siguientes puntos:
- Menú de la aplicación:
-
El menú de la aplicación es el siguiente:
-
Añadir población y sus milisegundos (
HashMap):- Solicitará el nombre de una población y el tiempo en milisegundos.
- Una población no puede repetirse pero los tiempos sí.
Registro datos
Usa un
HashMap<String, Integer>para llevar el registro de las poblaciones y sus tiempos. Clave: Nombre población. Valor: Tiempo. -
Visitar población (
HashSet):- El programa solicitará el nombre de la población.
-
Validación: Debes comprobar si la población existe en tu registro (
HashMap).- Si no existe: Muestra un error.
- Si existe: Añádela al
HashSetde visitadas.
-
Cuando Santa visita una población, ésta quedará registrada como poblacion visitada.
graph LR subgraph "Poblaciones visitadas" direction TB E1((Benifairó)) end -
Las poblaciones visitadas se irán acumulando y servirán para calcular de nuevo la ruta. Si la población está visitada no se usará para Calcular ruta.
Poblaciones visitadas
Usa un
HashSetpara almacenar las poblaciones visitadas. Ten en cuenta que no queremos eliminar el registro de poblaciones y sus tiempos. -
Calcular ruta (
ArrayList):- Esta es la parte central de la actividad. El programa debe generar una lista con las poblaciones pendientes (las que están en el registro pero NO están en visitadas).
- Esta lista debe mostrarse ordenada de menor a mayor tiempo (primero las rápidas).
- Mostrará la ruta optimizada y el tiempo estimado total (fíjate que no muestra la visitada).
Pista Técnica: ¿Cómo ordeno la lista según el mapa?
Tienes los nombres en un
ArrayListy los tiempos en unHashMap. Para ordenar la lista basándote en los tiempos, puedes usarCollections.sortcon el siguiente código:Esto le dice a Java: "Para saber qué ciudad va antes, busca sus tiempos en el mapa y comparalos (si el resultado es negativo en el return, significa que la primera es menor)".
Cuidado con los cambios
En cualquier momento, se puede añadir una población nueva con su tiempo o vistar una población. Debes considerarlo cuando realices el cálculo de la ruta.
-
Resumen reparto:
- Mostará las poblaciones donde se ha hecho el reparto y el tiempo empleado.