Tarea3 1

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 8

Programación 1

TAREA 3
BUSCANDO PERSONAS EN ÁRBOLES
GENEALÓGICOS

Equipo de Programación 1
Universidad de Ingeniería y Tecnología

July 6, 2021

1
Programación 1 Tarea 3

Contents
1 Indicaciones generales 3

2 Gradescope 3

3 Introducción 4

4 Resolver la tarea 5
4.1 Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
4.2 Ejercicio 1: Leer el archivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
4.3 Ejercicio 2: Personas por países . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
4.4 Ejercicio 3: Encuentra las conexiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
Programación 1 Tarea 3

1. Indicaciones generales
Esta tarea involucra 3 problemas diferentes relacionados a un solo caso. El objetivo es lograr resolver
todos los problemas utilizando su conocimiento en Python. Los principales temas a abordar son:

• Manejo de archivos

• Uso de diccionarios

Además, recordar estos puntos importantes:

• Recuerda que la tarea es individual, las copias serán sancionadas con nota 0 final en la asignatura.

• La entrega de esta tarea es a través de Gradescope.

• Revisa bien lo que entregas → Están permitidos intentos ilimitados pero la versión final a corregir
será la última que hayas subido.

• Si tienes dudas revisa primero las Q& A, las pueden encontrar en Discord y en Notion.

2. Gradescope
Subir únicamente el archivo solution.py (sin comprimir).

• Cada caso que tiene varios casos de prueba. Para obtener la nota completa en una pregunta, tus
algoritmos tienen que retornar la respuesta correcta en todos los casos de prueba.

• Si un caso de prueba falla, aparecerá un mensaje de error con sugerencias. Revisa tu código e
inténtalo de nuevo.

• Los input de los casos de prueba son confidenciales.

• La fecha final de entrega es el 17 de julio a las 23:59 P.M. No esperes hasta última hora, pues
el sistema se cierra automáticamente a esa hora. No se aceptarán entregas atrasadas ni entregadas
por otros medios.
Programación 1 Tarea 3

3. Introducción
Los árboles genealógicos son típicamente utilizados para representar las relaciones parentales entre los
miembros de una familia, de forma gráfica. Con esta representación es sencillo ordenar a los miembros de
una familia por generaciones, siendo cada fila horizontal en el árbol una generación distinta empezando
desde la cima del árbol con la primera generación. A continuación se muestra un ejemplo de un árbol
genealógico:

Figure 1: Árbol Genealógico

Computacionalmente, un árbol genealógico no se puede almacenar en su forma gráfica y mantener


su fácil acceso a la vez, por lo que es necesario encontrar una forma lineal de representar sus datos. Una
solución es almacenar las personas del árbol en una tabla de datos interconectados, donde cada fila hace
referencia a otra fila en la tabla. Mientras que visualizar y comprender el árbol de esta manera es más
difícil para un humano, una computadora podrá manejar y procesar sus datos de una manera mucho
más eficiente. La computadora podrá recorrer velozmente cada fila de la tabla de forma iterativa para
acceder a los datos necesarios, y hacer las relaciones correspondientes al momento de ejecución. Otra
representación computacional de los árboles genealógicos puede ser los diccionarios en Python, los cuales
tienen sus propias ventajas para la computadora, permitiendo acceder a los datos de una persona sin
necesidad de recorrer el set de data entero.
En esta tarea se le pide utilizar sus conocimientos de Python para realizar programas que lean y
procesen arboles genealógicos, entendiendo su almacenamiento en archivos y diccionarios.
Programación 1 Tarea 3

4. Resolver la tarea
4.1 Data
La data de la tarea es un árbol genealógico almacenado en una tabla, que deberá ser leída a partir de
un archivo CSV, donde cada fila representa a una persona.

Ejemplo de la estructura de un archivo:

id first_name last_name country mom dad bestie


A01 Veronika Mc Corley Italy C01
A02 Sebastian Passion Italy C03
A03 Adam McCoish Peru A02
B01 Chester McCoish Peru A02 A03 A01
B02 Tate Mc Corley Peru A03 A01 C03
B03 Donn Passion Spain A01 A02 C01
C01 Aile Mc Corley Spain B03 B02 C02
C02 Mamie Passion Italy B02 B03 A03
C03 Janek Passion Spain B02 B03 A02

4.2 Ejercicio 1: Leer el archivo


4 puntos
Se le pide leer el archivo ’data.csv’ y almacenar la data entera en un diccionario, donde la infromación de
cada persona debe ser accesible en base a su id. Este diccionario debe quedar con la siguiente estructura:

1 {
2 " A01 " : {
3 " first_name " : " Veronika " ,
4 " last_name " : " Mc Corley " ,
5 " country " : " Italy " ,
6 " mom " : " " ,
7 " dad " : " " ,
8 " bestie " : " C01 "
9 },
10 " A02 " : {
11 ...
12 },
13 ...
14 }
Programación 1 Tarea 3

La solución de esta pregunta se debe ser implementada en la función ejercicio1():


1 class Solution () :
2 def ejercicio1 ( self , fileName = " data . csv " ) :
3 self . data = {}
4 # Leer el archivo a self . data
5

6 return self . data

Listing 1: Template solution.py, ejercicio1.

4.3 Ejercicio 2: Personas por países


6 puntos
El objetivo de este ejercicio es retornar un diccionario, donde las claves (keys) son los países que
aparecen en la data, y los valores (values) la cantidad de personas que viven en el país respectivo
(entero).
La solución de esta pregunta se debe ser implementada en la función ejercicio2():
1 def ejercicio2 ( self ) :
2 paises = {}
3 # Contar la cantidad de personas por pais
4

5 return paises

Listing 2: Template solution.py, ejercicio2.

Ejemplos
Para los siguientes ejemplos se usa la tabla de datos de ejemplo en la sección 4.1

Ejemplo1:
1 >>> Solution () . ejercicio2 ()
2 { " Italy " : 3 , " Peru " :3 , " Spain " :3}

Explicación: Hay 3 personas en cada país.

4.4 Ejercicio 3: Encuentra las conexiones


10 puntos En este ejercicio deberás encontrar las conexiones de una persona. Estas pueden ser parientes
o amigas. Para esto deberás implementar tu solución en la función ejercicio3():
1 def ejercicio3 ( self , id , secuencia ) :
2 conexiones = []
3 p er so n a_ bu s ca d a = {}
4 # Retornar lista de id que conectan a las personas y el diccionario de la
persona buscada
5

6 return conexiones , p e rs on a _b u sc ad a

Listing 3: Template solution.py, ejercicio1.


Programación 1 Tarea 3

Donde:

• INPUT: La función ejercicio3 recibe dos parámetros:

– id: en un string con el identificador de la persona de la cual queremos encontrar sus conexiones.
– camino: es un string con la secuencia de caracteres que nos llevarán a la persona que queremos
encontrar. Los únicos posibles valores de los caracteres en camino son:
∗ M: Representa a la mamá (Mom).
∗ D: Representa al papá (Dad).
∗ B: Representa al mejor amigo (Bestie).

• OUTPUT: Esta función retornará dos valores:

– conexiones: es una lista con los identificadores de los antepasados.


– persona_buscada: es un diccionario con los datos de la persona a la que llegamos luego de
seguir la secuencia de caracteres definida en el parámetro camino.

Algunas especificaciones

• En caso que el camino no permita encontrar una persona en el árbol genealógico, entonces deberás
retornar las conexiones existentes y un diccionario vacío.

• La lista de conexiones a retornar debe incluir el id de la persona de la cual queremos encontrar sus
conexiones.

Ejemplos
Para los siguientes ejemplos se usa la tabla de datos de ejemplo en la sección 4.1

Ejemplo1:
1 >>> Solution () . ejercicio3 ( " C02 " , " MBDD " )
2 [ " B03 " , " C01 " , " B02 " , " A01 " ] , { " first_name " : " Veronika " , " last_name " : " Mc Corley " , "
country " : " Italy " , " mom " : " " , " dad " : " " , " bestie " : " C01 " }

Explicación: Se busca a una persona siguiendo el camino MBDD en el siguiente orden:

• M La madre (mom) de "C02" → "B03"

• B El mejor amigo (bestie) de "B03" → "C01"

• D El padre (dad) de "C01" → "B02"

• D El padre (dad) de "B02" → "A01"

O en otras palabras, se busca al padre del padre del mejor amigo de la madre de C02

Ejemplo 2:
1 >>> Solution () . ejercicio3 ( " B02 " , " BDMDM " )
2 [ " C03 " , " B03 " , " A01 " ] , {}
3
Programación 1 Tarea 3

Explicación: Se busca a una persona siguiendo el camino BDMDM en el siguiente orden:

• B El mejor amigo (bestie) de "B02" → "C03"

• D El padre (dad) de "C03" → "B03"

• M La madre (mom) de "B03" → "A01"

• D El padre (dad) de "A01" → No tiene padre, por lo que se retornará las conexiones hasta este
momento y un diccionario vacío

También podría gustarte