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