Skip to content

Commit 6b54d15

Browse files
authored
Merge pull request #8071 from adrs1166ma/main
#33 - javascript
2 parents 2234f84 + f9166d2 commit 6b54d15

File tree

2 files changed

+346
-0
lines changed

2 files changed

+346
-0
lines changed
Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
/*
2+
EJERCICIO:
3+
¡Disney ha presentado un montón de novedades en su D23!
4+
Pero... ¿Dónde está Mickey?
5+
Mickey Mouse ha quedado atrapado en un laberinto mágico
6+
creado por Maléfica.
7+
Desarrolla un programa para ayudarlo a escapar.
8+
Requisitos:
9+
1. El laberinto está formado por un cuadrado de 6x6 celdas.
10+
2. Los valores de las celdas serán:
11+
- ⬜️ Vacío
12+
- ⬛️ Obstáculo
13+
- 🐭 Mickey
14+
- 🚪 Salida
15+
Acciones:
16+
1. Crea una matriz que represente el laberinto (no hace falta
17+
que se genere de manera automática).
18+
2. Interactúa con el usuario por consola para preguntarle hacia
19+
donde se tiene que desplazar (arriba, abajo, izquierda o derecha).
20+
3. Muestra la actualización del laberinto tras cada desplazamiento.
21+
4. Valida todos los movimientos, teniendo en cuenta los límites
22+
del laberinto y los obstáculos. Notifica al usuario.
23+
5. Finaliza el programa cuando Mickey llegue a la salida.
24+
*/
25+
// 🔥 SIMULADOR: ¡Ayuda a Mickey a escapar del laberinto mágico! 🔥
26+
27+
console.log("🎩 ¡Bienvenido al laberinto mágico de Maléfica! 🎩")
28+
console.log("🐭 Mickey necesita tu ayuda para encontrar la salida (🚪).")
29+
30+
// 1. Crear el laberinto
31+
const laberinto = [
32+
["⬜️", "⬛️", "⬜️", "⬜️", "⬛️", "⬜️"],
33+
["⬜️", "⬛️", "⬜️", "⬛️", "⬛️", "⬜️"],
34+
["🐭", "⬜️", "⬜️", "⬛️", "⬜️", "⬜️"],
35+
["⬛️", "⬛️", "⬜️", "⬛️", "⬜️", "⬛️"],
36+
["⬜️", "⬜️", "⬜️", "⬛️", "🚪", "⬛️"],
37+
["⬛️", "⬜️", "⬛️", "⬜️", "⬛️", "⬜️"]
38+
];
39+
40+
// Posición inicial de Mickey
41+
let posicionMickey = { fila: 2, columna: 0 };
42+
43+
// Función principal del programa
44+
function iniciarLaberinto() {
45+
console.log("\n--- LABERINTO INICIAL ---");
46+
mostrarLaberinto();
47+
48+
while (true) {
49+
const direccion = prompt("¿Hacia dónde quieres mover a Mickey? (arriba/abajo/izquierda/derecha): ").toLowerCase();
50+
51+
// Validar dirección
52+
if (!["arriba", "abajo", "izquierda", "derecha"].includes(direccion)) {
53+
console.log("❌ Dirección no válida. Inténtalo de nuevo.");
54+
continue;
55+
}
56+
57+
// Intentar mover a Mickey
58+
const nuevaPosicion = calcularNuevaPosicion(posicionMickey, direccion);
59+
if (!esMovimientoValido(nuevaPosicion)) {
60+
console.log("❌ Movimiento inválido. Hay un obstáculo o estás fuera del laberinto.");
61+
continue;
62+
}
63+
64+
// Actualizar posición de Mickey
65+
laberinto[posicionMickey.fila][posicionMickey.columna] = "⬜️"; // Limpiar la posición anterior
66+
posicionMickey = nuevaPosicion; // Actualizar posición
67+
laberinto[posicionMickey.fila][posicionMickey.columna] = "🐭"; // Colocar a Mickey en la nueva posición
68+
69+
// Mostrar el laberinto actualizado
70+
console.log(`\n--- MOVIMIENTO HACIA ${direccion.toUpperCase()} ---`);
71+
mostrarLaberinto();
72+
73+
// Verificar si Mickey llegó a la salida
74+
if (laberinto[posicionMickey.fila][posicionMickey.columna] === "🚪") {
75+
console.log("🎉 ¡Felicidades! Mickey ha encontrado la salida. 🚪🐭");
76+
break;
77+
}
78+
}
79+
}
80+
81+
// Función para mostrar el laberinto
82+
function mostrarLaberinto() {
83+
laberinto.forEach(fila => console.log(fila.join(" ")));
84+
}
85+
86+
// Función para calcular la nueva posición
87+
function calcularNuevaPosicion(posicionActual, direccion) {
88+
const nuevaPosicion = { ...posicionActual };
89+
switch (direccion) {
90+
case "arriba":
91+
nuevaPosicion.fila -= 1;
92+
break;
93+
case "abajo":
94+
nuevaPosicion.fila += 1;
95+
break;
96+
case "izquierda":
97+
nuevaPosicion.columna -= 1;
98+
break;
99+
case "derecha":
100+
nuevaPosicion.columna += 1;
101+
break;
102+
}
103+
return nuevaPosicion;
104+
}
105+
106+
// Función para validar el movimiento
107+
function esMovimientoValido(posicion) {
108+
const { fila, columna } = posicion;
109+
110+
// Verificar límites del laberinto
111+
if (fila < 0 || fila >= laberinto.length || columna < 0 || columna >= laberinto[0].length) {
112+
return false;
113+
}
114+
115+
// Verificar obstáculos
116+
if (laberinto[fila][columna] === "⬛️") {
117+
return false;
118+
}
119+
120+
return true;
121+
}
122+
123+
iniciarLaberinto()
Lines changed: 223 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,223 @@
1+
/*
2+
EJERCICIO:
3+
¡La Casa del Dragón ha finalizado y no volverá hasta 2026!
4+
¿Alguien se entera de todas las relaciones de parentesco
5+
entre personajes que aparecen en la saga?
6+
Desarrolla un árbol genealógico para relacionarlos (o invéntalo).
7+
Requisitos:
8+
1. Estará formado por personas con las siguientes propiedades:
9+
- Identificador único (obligatorio)
10+
- Nombre (obligatorio)
11+
- Pareja (opcional)
12+
- Hijos (opcional)
13+
2. Una persona sólo puede tener una pareja (para simplificarlo).
14+
3. Las relaciones deben validarse dentro de lo posible.
15+
Ejemplo: Un hijo no puede tener tres padres.
16+
Acciones:
17+
1. Crea un programa que permita crear y modificar el árbol.
18+
- Añadir y eliminar personas
19+
- Modificar pareja e hijos
20+
2. Podrás imprimir el árbol (de la manera que consideres).
21+
22+
NOTA: Ten en cuenta que la complejidad puede ser alta si
23+
se implementan todas las posibles relaciones. Intenta marcar
24+
tus propias reglas y límites para que te resulte asumible.
25+
*/
26+
// 🔥 SIMULADOR: ÁRBOL GENEALÓGICO DE LA CASA DEL DRAGÓN 🔥
27+
console.log("🐉 ¡Bienvenido al árbol genealógico de La Casa del Dragón! 🐉");
28+
// Base de datos para almacenar personas
29+
const personas = {};
30+
31+
// Función principal del programa
32+
function iniciarPrograma() {
33+
let continuar = true;
34+
35+
while (continuar) {
36+
console.log("\n--- MENÚ PRINCIPAL ---");
37+
console.log("1. Añadir persona.");
38+
console.log("2. Modificar pareja.");
39+
console.log("3. Modificar hijos.");
40+
console.log("4. Eliminar persona.");
41+
console.log("5. Mostrar árbol genealógico.");
42+
console.log("6. Salir del programa.");
43+
44+
const opcion = prompt("Seleccione una opción (1-6): ");
45+
46+
switch (opcion) {
47+
case "1":
48+
añadirPersona();
49+
break;
50+
case "2":
51+
modificarPareja();
52+
break;
53+
case "3":
54+
modificarHijos();
55+
break;
56+
case "4":
57+
eliminarPersona();
58+
break;
59+
case "5":
60+
mostrarArbolGenealogico();
61+
break;
62+
case "6":
63+
console.log("👋 ¡Gracias por usar el simulador del árbol genealógico! 👋");
64+
continuar = false;
65+
break;
66+
default:
67+
console.log("❌ Opción no válida. Intente de nuevo.");
68+
}
69+
}
70+
}
71+
72+
// 1. Añadir persona
73+
function añadirPersona() {
74+
const id = prompt("Ingrese un identificador único para la persona: ");
75+
if (personas[id]) {
76+
console.log("❌ Ya existe una persona con ese identificador.");
77+
return;
78+
}
79+
80+
const nombre = prompt("Ingrese el nombre de la persona: ");
81+
if (!nombre) {
82+
console.log("❌ El nombre es obligatorio.");
83+
return;
84+
}
85+
86+
personas[id] = { id, nombre, pareja: null, hijos: [] };
87+
console.log(`✅ Persona "${nombre}" añadida con ID ${id}.`);
88+
}
89+
90+
// 2. Modificar pareja
91+
function modificarPareja() {
92+
const id = prompt("Ingrese el ID de la persona cuya pareja desea modificar: ");
93+
const persona = personas[id];
94+
if (!persona) {
95+
console.log("❌ No se encontró ninguna persona con ese ID.");
96+
return;
97+
}
98+
99+
const idPareja = prompt("Ingrese el ID de la nueva pareja (o 'null' para eliminar pareja): ");
100+
if (idPareja === "null") {
101+
// Eliminar pareja actual
102+
if (persona.pareja) {
103+
const parejaActual = personas[persona.pareja];
104+
if (parejaActual) parejaActual.pareja = null; // Actualizar pareja de la otra persona
105+
}
106+
persona.pareja = null;
107+
console.log(`✅ Pareja eliminada para "${persona.nombre}".`);
108+
return;
109+
}
110+
111+
const pareja = personas[idPareja];
112+
if (!pareja) {
113+
console.log("❌ No se encontró ninguna persona con ese ID de pareja.");
114+
return;
115+
}
116+
117+
// Validar que la pareja no tenga ya otra pareja
118+
if (pareja.pareja && pareja.pareja !== id) {
119+
console.log(`❌ ${pareja.nombre} ya tiene una pareja asignada.`);
120+
return;
121+
}
122+
123+
// Actualizar relaciones
124+
if (persona.pareja) {
125+
const parejaAnterior = personas[persona.pareja];
126+
if (parejaAnterior) parejaAnterior.pareja = null; // Desvincular pareja anterior
127+
}
128+
persona.pareja = idPareja;
129+
pareja.pareja = id;
130+
131+
console.log(`✅ ${persona.nombre} ahora está vinculado/a con ${pareja.nombre}.`);
132+
}
133+
134+
// 3. Modificar hijos
135+
function modificarHijos() {
136+
const idPadre = prompt("Ingrese el ID del padre/madre: ");
137+
const padre = personas[idPadre];
138+
if (!padre) {
139+
console.log("❌ No se encontró ninguna persona con ese ID.");
140+
return;
141+
}
142+
143+
const accion = prompt("¿Desea añadir o eliminar un hijo? (añadir/eliminar): ").toLowerCase();
144+
if (!["añadir", "eliminar"].includes(accion)) {
145+
console.log("❌ Acción no válida.");
146+
return;
147+
}
148+
149+
const idHijo = prompt("Ingrese el ID del hijo: ");
150+
const hijo = personas[idHijo];
151+
if (!hijo) {
152+
console.log("❌ No se encontró ninguna persona con ese ID de hijo.");
153+
return;
154+
}
155+
156+
if (accion === "añadir") {
157+
// Validar que el hijo no tenga más de dos padres
158+
const padresActuales = Object.values(personas).filter(p => p.hijos.includes(idHijo));
159+
if (padresActuales.length >= 2) {
160+
console.log("❌ Este hijo ya tiene dos padres asignados.");
161+
return;
162+
}
163+
164+
padre.hijos.push(idHijo);
165+
console.log(`✅ ${hijo.nombre} añadido como hijo de ${padre.nombre}.`);
166+
} else if (accion === "eliminar") {
167+
const index = padre.hijos.indexOf(idHijo);
168+
if (index === -1) {
169+
console.log("❌ Este hijo no está registrado como hijo de esta persona.");
170+
return;
171+
}
172+
173+
padre.hijos.splice(index, 1);
174+
console.log(`✅ ${hijo.nombre} eliminado como hijo de ${padre.nombre}.`);
175+
}
176+
}
177+
178+
// 4. Eliminar persona
179+
function eliminarPersona() {
180+
const id = prompt("Ingrese el ID de la persona que desea eliminar: ");
181+
const persona = personas[id];
182+
if (!persona) {
183+
console.log("❌ No se encontró ninguna persona con ese ID.");
184+
return;
185+
}
186+
187+
// Eliminar referencias de pareja e hijos
188+
if (persona.pareja) {
189+
const pareja = personas[persona.pareja];
190+
if (pareja) pareja.pareja = null;
191+
}
192+
193+
for (const p of Object.values(personas)) {
194+
const index = p.hijos.indexOf(id);
195+
if (index !== -1) p.hijos.splice(index, 1);
196+
}
197+
198+
delete personas[id];
199+
console.log(`✅ Persona "${persona.nombre}" eliminada.`);
200+
}
201+
202+
// 5. Mostrar árbol genealógico
203+
function mostrarArbolGenealogico() {
204+
console.log("\n--- ÁRBOL GENEALÓGICO ---");
205+
for (const persona of Object.values(personas)) {
206+
console.log(`ID: ${persona.id}, Nombre: ${persona.nombre}`);
207+
if (persona.pareja) {
208+
const pareja = personas[persona.pareja];
209+
console.log(` Pareja: ${pareja ? pareja.nombre : "Sin pareja"}`);
210+
} else {
211+
console.log(" Pareja: Sin pareja");
212+
}
213+
214+
if (persona.hijos.length > 0) {
215+
const nombresHijos = persona.hijos.map(idHijo => personas[idHijo]?.nombre || "Desconocido");
216+
console.log(` Hijos: ${nombresHijos.join(", ")}`);
217+
} else {
218+
console.log(" Hijos: Ninguno");
219+
}
220+
}
221+
}
222+
223+
iniciarPrograma();

0 commit comments

Comments
 (0)