Autor: Edison Del Rosario

  • 2Eva_IT2018_T3 Prueba de Escritorio - cadenas, indexación, diccionarios

    2da Evaluación I Término 2018-2019. 31-Agosto-2018 /CCPG001

    Tema 3. (10 puntos) Indique la salida por pantalla del siguiente código. Justifique su respuesta.

    import numpy as np
    
    letters = np.array(['A', 'Z', 'P', 'B',
                        'E', 'R', 'O', 'M',
                        'B', 'A', 'C', 'D',
                        'Q', 'O'])
    indexes = np.array([54, 23, 60, 13, 29,
                        65, 31, 23, 30, 99,
                        19, 89, 10, 56])
    n1 = letters[indexes>=30]
    
    res= {}
    for x in n1:
        res[x] = res.get(x,0)+1
    
    print(res)
    

    Referencia: Archivo original 2daEvaI_Term2018.pdf

  • 2Eva_IT2018_T1 Niveles seguridad por ciudad

    2da Evaluación I Término 2018-2019. 31-Agosto-2018 /CCPG001

    (Editado para tarea, se mantiene el objetivo de aprendizaje)

    http://www.ecu911.gob.ec/wp-content/uploads/2017/06/1-37.jpeg
    Sistema ECU911

    Tema 1. (40 puntos) Para analizar los niveles de seguridad en el país, se registran los incidentes por ciudad y tipo delito en un archivo.

    incidentes
    robo vehículo asalto Escandalo vía pública ...
    Quito 540 4523 24 ...
    Guayaquil 605 6345 5 ...
    Cuenca 123 676 133 ...
    Machala 67 1234 412 ...
    ... ... .... .... ...

    Dispone de un modulo "ecu911" con la función cargarDatos(nombrearchivo) que lee el archivo y entrega un diccionario con la las veces que se ha reportado cada tipo de delito para cada ciudad del país en  el siguiente formato:

    diccionario = {
        'Guayaquil':{'robo vehiculo':605, 'asalto':6345, ...},
        'Cuenca':   {'robo vehiculo':123, 'asalto': 676, ...},
        ...
        }
    

    Para  crear el diccionario debe importar el módulo.

    Se requiere implementar lo siguiente:

    a.  Una función tablatitulos(diccionario) que recibe el diccionario descrito y retorna una coleccion:

    titulos = (ciudad, tipodelito)

    ciudad contiene las ciudades del archivo, y tipodelito contiene los tipos considerados en el diccionario, ambos sin duplicados.

    b. La función crearMatriz(diccionario) que usando la información del diccionario crea una matriz con el número de incidentes por ciudad y tipo de delito. La matriz es un arreglo de numpy, semejante al ejemplo:

    >>> matriz
    array([[ 530, 4523,  24, ...],
           [ 605, 6345,   5, ...],
           [ 123,  676, 133,...],
           [  67, 1234, 412, ...],
           ... 
            ])
    

    c. Una función ciudadesMenosSeguras(matriz, titulos, untipo, poblacion) que retorna los nombres de las tres ciudades que tienen el mayor indice per capita de para untipo de delito.

    \text{indice per capita} = \frac{\text{numero de incidentes reportados}}{\text{poblacion de la ciudad}}

    La función recibe la matriz , titulos de los literales anteriores, un tipo de delito  y  la población de cada ciudad del país en un vector, arreglo Numpy.

    Rúbrica: literal a (10 puntos), literal b (20 puntos), literal c (10 puntos).

    Referencia: Archivo original 2daEvaI_Term2018.pdf

  • s2Eva_IT2018_T1 Niveles seguridad por ciudad

    Ejercicio: 2Eva_IT2018_T1 Niveles seguridad por ciudad

    Propuesta de solución en Python:

    Como referencia para el algoritmo se usa la tabla:

    incidentes
    ciudad robo vehículos asalto
    Guayaquil 605 6345
    Cuenca 123 676

    El módulo cargarDatos() desde un archivo se guarda como ecu911.py
    La sección no era necesario escribirla en la evaluación, se podría suponer que ya estaba escrita.

    Algoritmo en Python

    # CCPG1001-Fundamentos de programación FIEC-ESPOL
    # 2Eva_IT2018_T1 Niveles seguridad por ciudad
    import numpy as np
    import ecu911 es ecu
    
    def titulostabla(tabla_dic):
        ciudad = tabla_dic.keys()
        ciudad = list(ciudad)
        
        unaciudad = ciudad[0]
        unregistro = tabla_dic[unaciudad]
        
        tipodelito = unregistro.keys()
        tipodelito = list(tipodelito)
        
        titulos = [ciudad,tipodelito]
        return(titulos)
    
    def crearMatriz(tabla_dic,titulos):
        ciudad = titulos[0]
        tipodelito = titulos[1]
        n = len(ciudad)
        m = len(tipodelito)
        
        tabla = np.zeros(shape=(n,m),dtype = int)
        f = 0
        while not(f>=n):
            c = 0
            unaciudad = ciudad[f]
            registro = tabla_dic[unaciudad]
            while not(c>=m):
                untipo = tipodelito
                valor = registro[untipo]
                tabla[f,c] = valor
                c = c+1
            f = f+1
            
        return(tabla)
    
    def ciudadesMenosSeguras(matriz, titulos, untipo, poblacion):
        ciudad = titulos[0]
        tipodelito = titulos[1]
        
        columna = tipodelito.index(untipo)
        incidentes = matriz[:,columna]
        indicador = incidentes/poblacion
    
        cual = np.argmax(indicador)
        insegura = ciudad[cual]
        # Tarea: encontrar las siguientes menos seguras
        return(insegura)
    
    # PROGRAMA PRUEBA -------------------
    # INGRESO
    
    nombrearchivo = 'reporteincidentes.txt'
    tabla = ecu.cargardatos(nombrearchivo)
    
    # Usado si no dispone del módulo y archivo.txt
    #tabla_dic = {
    #    'Guayaquil':{'robo vehiculo':605, 'asalto':6345},
    #    'Cuenca':   {'robo vehiculo':123, 'asalto': 676}
    #    }
    poblacion = np.array([2000, 1000])
    untipo = 'asalto'
    
    # PROCEDIMIENTO
    titulos = titulostabla(tabla_dic)
    matriz = crearMatriz(tabla_dic,titulos)
    inseguras = ciudadesMenosSeguras(matriz, titulos, untipo, poblacion)
    
    # SALIDA
    print('Los títulos de la tabla son:')
    print(titulos)
    print('La matriz de datos: ')
    print(matriz)
    print('La menos segura: ')
    print(inseguras)
    

    Usando el módulo es necesario disponer de un archivo reporteincidentes.txt con datos, por facilidad en el mismo directorio de trabajo:

    Guayaquil,605,6345
    Cuenca,123,676
    
  • 1Eva_IT2018_T3 Prueba de escritorio, arreglos

    1ra Evaluación I Término 2018-2019, Junio 29, 2018. CCPG001

    Tema 3. (10 puntos) ¿Qué imprime el siguiente código? Justifique su respuesta

    import numpy as np
    arr = np.array([8,3,7,1,5,2,6,4])
    d = 'vwxyz'
    p = ''
    
    for a in range(arr[arr<5].size):
        p += d[a]*a
    
    print(p)
    

    Referencia: Archivo original 1raEvaI_Term2018.pdf

  • 1Eva_IT2018_T2 Desempeño de jugadores mundial futbol

    1ra Evaluación I Término 2018-2019, Junio 29, 2018. CCPG001

    (Editado para tarea, se mantiene el objetivo de aprendizaje)

    Tema 2. (50 puntos) Dispone de una tabla con el desempeño histórico (estadística) de los jugadores equipos (país) que participan en el Mundial de Futbol:

    Los jugadores se encuentran ordenados por equipos siguiendo el orden del listado de países siguiente:

    paises = ['Portugal', 'Brasil', … , 'Argentina']

    Dispone de otra tabla con los equipos (país) y jugadores, conformada como una lista que contiene como elementos otras listas (lista de listas):

    pais_jugadores = [prtgl, 
                      brsl,
                       …, 
                      argntn]

    Cada elemento de la tabla pais_jugadores  contiene los nombres de los jugadores registrados en cada equipo:

     prtgl = ['Cristiano Ronaldo', …]
      brsl = ['Neymar Jr.', … ]
       …
    argntn = [ …, 'Lionel Messi']

    con los datos disponibles en las tablas y usando instruciones de Python, se requiere:

    a. Determinar el país con el promedio de goles más alto.

    \text{promedio de goles} =\frac{\text{goles anotados del país}}{\text{numero de jugadores del país}}

    b. Contar cuántos jugadores españoles tienen una efectividad mayor que la efectividad promedio de España.

    \text{efectividad} = \frac{\text{goles anotados}}{\text{Tiros directo al arco}}

    c. Mostrar la lista con los nombres de los jugadores que tienen más del 76% de posesión del balón .

    d. Mostrar el jugador con mayor porcentaje de pases acertados, indicando nombre y país al que pertenece.

    e. Calcular el promedio mundial por cada una de las características.
    ( “Goles anotados", "...", "% posesión del balón", "% de pases acertados", "Tiros directos al arco" ).

    f. Determine si cada una las características para el jugador "Lionel Messi" están por encima del correspondiente promedio mundial. Muestre el mensaje de respuesta correspondiente:

    “Lionel Messi está/no está por encima del promedio mundial”

    Sugerencia: Separe el trabajo de ubicar los jugadores de la tabla, del procesamiento de los datos de desempeño.
    Para ubicar los jugadores realice una tabla siguiendo las siguientes instrucciones:

    1. A partir de los datos pais_jugadores y las listas de jugadores, bosqueje la tabla que se forma como referencia.

    2. Unifique en un vector jugadores a todos los de cada país.

    3. Realice una tabla en cuyas filas ubique cada pais  con el índice [desde, hasta, cuantos] que indica las posiciones desde/hasta dónde se cuentan los jugadores para cada pais, además de la cantidad de jugadores.

    Ésta última tabla permitirá ubicar a los jugadores por países.

    Para probar los algoritmos, puede usar los datos de las tablas simplificadas para prueba:

    desempeno = np.array([[ 32, 24, 45],
                          [ 90, 84, 91],
                          [ 54, 60, 78],
                          [187,239,112]])
    paises = ['Portugal', 'Brasil', 'Argentina']
    prtgl =  ['Cristiano Ronaldo']
    brsl =   ['Neymar Jr.' ]
    argntn = ['Lionel Messi']
    
    pais_jugadores = [prtgl, brsl, argntn]
    

    Referencia: Archivo original 1raEvaI_Term2018.pdf

  • 1Eva_IT2018_T1 Busca especie con ADN

    1ra Evaluación I Término 2018-2019, Junio 29, 2018. CCPG001

    (Editado para tarea, se mantiene el objetivo de aprendizaje)

    Tema 1. (40 PUNTOS) La compañía ACME S.A. está desarrollando un nuevo método para detectar especies en base a su ADN

    Para representar una especie por su ADN se utiliza una secuencia S compuesta únicamente de las letras A, C, G y T.

    La inversa de una secuencia S se determina con los símbolos en orden inverso a lo presentado. Ejemplo:

    >>> inversa('GATACA') = 'ACATAG'

    Se tienen como datos:

    • Un listado L de secuencias S y
    • Una cadena de referencia R que identifica de forma única a la especie buscada. R no tiene letras repetidas.

    Implemente un programa que muestre todas las secuencias S que pertenecen a la especie buscada y los índices en la inversa de donde aparece la cadena de referencia R .

    Para realizar esta tarea, por cada secuencia S en listado L :

    1. Forme la cadena inversa de la secuencia S

    2. La secuencia S pertenece a la especie buscada si:

    a) la cadena de referencia R aparece exactamente dos veces en la segunda mitad de inversa y
    b) al menos 4 veces en total.

    3. Si S pertenece a la especie buscada, muestre la secuencia S y los índices.

    Ejemplo:

    L = ['ATTTGCTTGCTATTTAAACCGGTTATGCATAGCGC', 
         'ATTAGCCGCTATCGA', 
         '…']
    R = 'CG'
    
    SALIDA para Secuencia L[0]:
    Secuencia: ATTTGCTTGCTATTTAAACCGGTTATGCATAGCGC
    Inversa:   CGCGATACGTATTGGCCAAATTTATCGTTCGTTTA
    Índices:   [0, 2, 7, 25, 29]
    
    SALIDA para Secuencia L[1]:
    Secuencia: ...
    Índices:   ...

    Referencia: Archivo original 1raEvaI_Term2018.pdf

  • s1Eva_IT2018_T1 Busca especie con ADN

    Ejercicio: 1Eva_IT2018_T1 Busca especie con ADN

    Propuesta de solución en Python:

    primero se obtiene una secuencia del listado

    i = 0
    secuencia = Listado[i]

    Para obtener la inversa se empieza copiando desde el último caracter de la secuencia con índice j=m-1, siendo m la cantidad de caracteres de la secuencia.

    # calcula la inversa
    m = len(secuencia)
    inversa = ''
    j = m-1
    while not(j<0):
        inversa = inversa + secuencia[j]
        j = j-1
    

    el resultado esperado es:

    las secuencias que pertenecen son:  1
    Secuencia:  ATTTGCTTGCTATTTAAACCGGTTATGCATAGCGC
    indices de inversa: [0, 2, 7, 25, 29]
    >>> 
    

    El análisis se realiza en dos partes: desde j=0 hasta mitad = m//2. Luego desde la mitad hasta m.

    Al comparar la referencia con una sección de la inversa, se pueden almacenar los índices de la coincidencia en otra lista.

    Algoritmo en Python

    # CCPG1001 Fundamentos de Programación FIEC-ESPOL
    # 1Eva_IT2018_T1 Busca especie con ADN
    # propuesta de solución: edelros@espol.edu.ec
    
    # INGRESO
    Listado = ['ATTTGCTTGCTATTTAAACCGGTTATGCATAGCGC', 
               'ATTAGCCGCTATCGA']
    Referencia = 'CG'
    
    # PROCEDIMIENTO
    n = len(Listado)
    tref = len(Referencia)
    pertenece = []
    
    i = 0
    while not(i>=1):
        secuencia = Listado[i]
        indices   = []
        
        # calcula la inversa
        m = len(secuencia)
        inversa = ''
        j = m-1
        while not(j<0):
            inversa = inversa + secuencia[j]
            j = j-1
            
        # Analiza las partes, mitad
        mitad  = m//2
        veces1 = 0
        veces2 = 0
       
        j = 0    # primera mitad
        while not(j>=mitad):
            seccion = inversa[j:j+tref]
            if (seccion == Referencia):
                veces1 = veces1 + 1
                indices.append(j)
            j = j + 1
    
        j = mitad    # segunda mitad
        while not(j>=m):
            seccion = inversa[j:j+tref]
            if (seccion == Referencia):
                veces2 = veces2 + 1
                indices.append(j)
            j = j + 1
    
        # Revisa si pertenece a especie
        total = veces1 + veces2
        if (veces2==2 and total>=4):
            pertenece.append([secuencia, indices])
    
        # siguiente secuencia de listado
        i = i + 1 
    
    # SALIDA
    # print(pertenece)
    tp = len(pertenece)
    print('las secuencias que pertenecen son: ', tp)
    i = 0
    while not(i>=tp):
        print('Secuencia: ',pertenece[i][0])
        print('indices de inversa:',pertenece[i][1])
        i = i + 1
    

    Tarea: Convertir a funciones las secciones de:

    - Inversa de la secuencia creainversa(secuencia)

    - Conteo de referencias en mitades de secuencia cuentareferencia(mitadsecuencia)

    - Crear vector de índices donde se encuentra la referencia entregaindices(inversa)

  • s1Eva_IT2018_T2 Desempeño de jugadores mundial futbol

    Ejercicio: 1Eva_IT2018_T2 Desempeño de jugadores mundial futbol

    Revisar las sugerencias en el enunciado, dividir el problema y simplificar las tablas para las pruebas de algoritmos, con lo que que se obtiene:

    a) el país con mas goles promedio:  Argentina
    b) los jugadores efectivos de:  Brasil 0
    c) jugadores amarrabalon:  ['Lionel Messi']
    d) jugador con más pases acertados:  Lionel Messi
    e) promedios mundiales:  [  33.66666667   88.33333333   64.          179.33333333]
    f) : Lionel Messi no está por encima del promedio mundial
    >>> 
    

    visualizar la tabla de paises_jugadores es:

    >>> pais_jugadores
    [['Cristiano Ronaldo'], 
     ['Neymar Jr.'], 
     ['Lionel Messi']]
    

    Algoritmo en Python

    las instrucciones desarrolladas por literal son:

    # CCPG1001 Fundamentos de Programación FIEC-ESPOL
    # 1Eva_IT2018_T2 Desempeño de jugadores mundial futbol
    import numpy as np
    
    # INGRESO
    desempeno = np.array([[ 32, 24, 45],
                          [ 90, 84, 91],
                          [ 54, 60, 78],
                          [187,239,112]])
    
    paises = ['Portugal', 'Brasil', 'Argentina']
    prtgl  = ['Cristiano Ronaldo']
    brsl   = ['Neymar Jr.' ]
    argntn = ['Lionel Messi']
    
    pais_jugadores = [prtgl, brsl, argntn]
    
    analizapais = 'Brasil'
    analizaposeebalon = 76
    analizajugador = 'Lionel Messi'
    
    # PROCEDIMIENTO
    tamano = np.shape(desempeno)
    tdf    = tamano[0]
    tdc    = tamano[1]
    tp     = len(paises)
    
    # tabla ubicapais[unpais] = [desde,hasta,cuantos]
    ubicapais = np.zeros(shape=(tp,3),dtype=int)
    desde  = 0
    unpais = 0
    while not(unpais>=tp):
        jugadores = pais_jugadores[unpais]
        cuantos   = len(jugadores)
        hasta     = desde + cuantos
        ubicapais[unpais,0] = desde
        ubicapais[unpais,1] = hasta
        ubicapais[unpais,2] = cuantos
        desde  = hasta
        unpais = unpais + 1
        
    # Agrupa jugadores
    todosjugadores = []
    unpais =  0
    while not(unpais>=tp):
        jugadores = pais_jugadores[unpais]
        cuantos   = len(jugadores)
        quien = 0
        while not(quien>=cuantos):
            todosjugadores.append(jugadores[quien])
            quien = quien + 1
        unpais = unpais +1
    
    # a) pais con mas goles promedio
    fila = 0 # fila goles anotados
    golesanotados = desempeno[fila]
    prmGolAnota = np.zeros(tp,dtype = float)
    unpais = 0
    while not(unpais>=tp):
        desde   = ubicapais[unpais,0]
        hasta   = ubicapais[unpais,1]
        cuantos = ubicapais[unpais,2]
        
        golpais = golesanotados[desde:hasta]
        prmGolAnota[unpais] = np.sum(golpais)/cuantos
        
        unpais = unpais + 1
        
    goleador = np.argmax(prmGolAnota)
    nombregoleador = paises[goleador]
    
    # b) Contar jugadores con mayor efectividad
    # al promedio de analizapais
    # donde = paises.index(buscapais)
    donde  = -1
    unpais = 0
    while not(unpais>=tp or donde>=0):
        if (paises[unpais] == analizapais):
            donde = unpais
        unpais = unpais + 1
    
    # efectividad del pais analizado
    fila = tdf-1 # tiros al arco (última de desempeno)
    tirosdirectos = desempeno[fila]
    
    desde = ubicapais[donde,0]
    hasta = ubicapais[donde,1]
    
    anotados = golesanotados[desde:hasta]
    directos = tirosdirectos[desde:hasta]
    efectivopais = np.sum(anotados)/np.sum(directos)
    
    #jugadores efectivos del pais analizado
    cuentaefectivos = 0
    quien = desde
    while not(quien>=hasta):
        unaefectividad = golesanotados[quien]/tirosdirectos[quien]
        if (unaefectividad > efectivopais):
            cuentaefectivos = cuentaefectivos+1
        quien = quien + 1
    
    # c) posesion balón
    fila = 2 # fila de posesión de balón
    poseebalon = desempeno[fila]
    amarrabalon = []
    quien = 0
    while not(quien>=tdc):
        if (poseebalon[quien]>analizaposeebalon):
            amarrabalon.append(todosjugadores[quien])
        quien = quien +1
        
    # d) jugador con más pases acertados
    fila = tdf-2
    pasesacertados = desempeno[fila]
    quienacierta   = np.argmax(pasesacertados)
    nombreacierta  = todosjugadores[quienacierta]
    
    # e) promedios mundiales
    promediomundial = np.sum(desempeno,axis =1)/tdc
    
    # f) jugadores superior a promedio mundial
    # donde = todosjugadores.index(analizajugador)
    donde = -1
    quien = 0
    while not(unpais>=tp or donde>=0):
        if (todosjugadores[quien] == analizajugador):
            donde = unpais
        quien = quien + 1
    
    # verifica cumplimiento de parámetros
    cumple = ' está '
    fila = 0
    while not(fila>=tdf):
        caracteristica = desempeno[fila,donde]
        if (caracteristica< promediomundial[fila]):
            cumple = ' no está '
        fila = fila+1
    mensaje = analizajugador + cumple + 'por encima del promedio mundial'
    
    # SALIDA
    print('a) pais con mas goles promedio: ', nombregoleador)
    print('b) jugadores efectivos de: ', analizapais, cuentaefectivos)
    print('c) jugadores amarrabalon: ', amarrabalon)
    print('d) jugador con más pases acertados: ', nombreacierta)
    print('e) promedios mundiales: ', promediomundial)
    print('f) :', mensaje)

    Tarea: Realice las modificaciones necesarias para realizar las funciones para las secciones de:

    - crear tabla ubicapais(paises_jugadores)

    - agrupajugadores(paises_jugadores)

    use las funciones realizadas en el programa.

    Considerar cuando la respuesta de los algoritmos de búsqueda es -1, no se encontró el elemento en el conjunto. En la propuesta no se valida ésta situación, por ejemplo, si se pone 'espana' y no se encuentra en la tabla.

  • s3Eva_IIT2017_T2 biblioteca videojuegos

    Ejercicio: 3Eva_IIT2017_T2 biblioteca videojuegos

    Propuesta de solución en Python:

    archivo de prueba: videojuegos.csv

    # CCPG1001-Fundamentos de Programación - FIEC-ESPOL
    # 3Eva_IIT2017_T2 biblioteca videojuegos
    
    import numpy as np
    
    def juegosConsolas(nomArchivo, categoria, decada):
        productos = []
        equipos   = []
        listado   = []
        if (decada>99):
            decada = decada%100
        
        archivo = open(nomArchivo,'r')
        # encabezado
        linea = archivo.readline()
        # primera linea de datos
        linea = archivo.readline()
        while not(linea==''):
            linea  = linea.strip('\n')
            partes = linea.split(',')
            njuego = partes[0]
            anio   = int(partes[1])
            cons   = partes[2]
            calf   = float(partes[3])
            lista  = partes[4].split(';')
            categ  = lista[0]
            tags   = lista[1:]
            
            if (anio>=decada
                and anio<=(decada+10)
                and (categ==categoria)):
                
                if not(njuego in productos):
                    productos.append(njuego)
                if not(cons in equipos):
                    equipos.append(cons)
                listado.append([njuego,cons,calf])
                
            linea = archivo.readline()
        archivo.close()
        respuesta = (productos,equipos, listado)
        
        return(respuesta)
    
    def crearMatriz(nomArchivo, categoria, decada):
        indices = juegosConsolas(nomArchivo,
                                 categoria,
                                 decada)
        filas    = indices[0]
        columnas = indices[1]
        datos    = indices[2]
        n = len(filas)
        m = len(columnas)
        matriz = np.zeros(shape=(n,m), dtype=float)
        q = len(datos)
        
        for i in range(0,q,1):
            f = filas.index(datos[i][0])
            c = columnas.index(datos[i][1])
            valor = datos[i][2]
            matriz[f,c] = valor
            
        return(matriz)
    
    def mejoresJuegos(nomArchivo, categoria, decada):
        indices  = juegosConsolas(nomArchivo,
                                  categoria,
                                  decada)
        matriz   = crearMatriz(nomArchivo,
                               categoria,
                               decada)
        subtotal = np.sum(matriz, axis=0)
        conteo   = np.count_nonzero(matriz,axis=0)
        prom = subtotal/conteo
        
        indicesMax = prom.argsort()[-5::]
        n = len(indicesMax)
    
        narchivo = 'Mejores.txt'
        archivo = open(narchivo,'w')
        for i in range(0,n,1):
            cual = indicesMax[i]
            linea = indices[1][cual] + ',' + str(prom[cual]) + '\n'
            archivo.write(linea)
        archivo.close()
        
        respuesta = 'archivo creado'
        return(respuesta)
    
    def colecciones(nomArchivo, palabras):
        respuesta = []
        
        archivo = open(nomArchivo,'r')
        # encabezado
        linea = archivo.readline()
    
        # primera linea de datos
        linea = archivo.readline()
    
        while not(linea==''):
            linea  = linea.strip('\n')
            partes = linea.split(',')
            lista  = partes[4].split(';')
            categ  = lista[0]
            tags   = lista[1:]
            if (palabras == tags):
                if not(njuego  in respusta):
                    respuesta.append(njuego)
        
        return(respuesta)
    
    # PROGRAMA ---------------------------
    # INGRESO
    nomArchivo = 'videojuegos.csv'
    categoria  = 'RPG'
    decada = 80
    
    # PROCEDIMIENTO
    respuesta1 = juegosConsolas(nomArchivo, categoria, decada)
    respuesta2 = crearMatriz(nomArchivo, categoria, decada)
    respuesta3 = mejoresJuegos(nomArchivo, categoria, decada)
    
    # SALIDA
    print('juegos y consolas de: ', decada, categoria)
    print(respuesta1[0])
    print(respuesta1[1])
    print('matriz: ')
    print(respuesta2)
    print('seleccionados: ')
    print(respuesta3)