2. Natació (4 punts)

El club de natació del barri té informació sobre els resultats que han fet totes les persones nadadores. Aquesta informació es guarda en una llista de llistes. Cada subllista correspon a una persona. Aquesta subllista consta de diferent informació: el primer element és el nom, el segon la seva categoria i després hi ha un nombre variable d’enters que representen el temps que ha fet en les diferents proves que ha competit. Per exemple,

>>> ned = ['Joana', 'aleví', 56, 59, 45, 67, 49]

fa referència a una nedadora que es diu Joana, és de la categoria aleví i tenim 5 temps diferents que ha fet en les competicions: [56, 59, 45, 67, 49].

Un exemple de les dades del club de natació és:

>>> l = [['Joana', 'aleví', 56, 59, 45, 67, 49], ['Rosa', 'infantil', 36, 59, 45, 67, 49, 54, 49],
... ['Joan', 'aleví', 58, 49, 55, 67, 51, 52, 49], ['Maria', 'infantil', 36, 49, 45, 47, 49, 54, 49, 39, 33],
... ['Pere', 'aleví', 39, 35, 37, 39], ['Rut', 'infantil', 36, 39, 35, 47, 39, 44],
... ['Roger', 'benjamí', 68, 69, 65, 67, 71, 62, 69], ['Maria', 'benjamí', 46, 49, 45, 47, 49, 49, 49, 43],
... ['Judit', 'aleví', 56, 59, 44, 34, 45, 67, 49]]

Es demana que al fitxer natacio.py les següents funcions:

  1. Una funció anomenada

    natacio.marca_natacio(l_neda)

    tal que a partir d’una llista l_neda com la descrita amb la informació de les persones nedadores del club retorna una nova llista de subllistes. Cada subllista ens dona la informació resumida de cada esportista, de manera que és una llista de tres elements: el nom de l’esportista, la categoria i el temps menor del qual se’n té registre.

    No es demana cap mena d’ordre en la llista resultant.

    Els següents tests mostren exemples del que ha de fer la funció:

    
    >>> l = [['Joana', 'aleví', 56, 59, 45, 67, 49], ['Rosa', 'infantil', 36, 59, 45, 67, 49, 54, 49],
    ... ['Joan', 'aleví', 58, 49, 55, 67, 51, 52, 49], ['Maria', 'infantil', 36, 49, 45, 47, 49, 54, 49, 39, 33],
    ... ['Pere', 'aleví', 39, 35, 37, 39], ['Rut', 'infantil', 36, 39, 35, 47, 39, 44],
    ... ['Roger', 'benjamí', 68, 69, 65, 67, 71, 62, 69], ['Maria', 'benjamí', 46, 49, 45, 47, 49, 49, 49, 43],
    ... ['Judit', 'aleví', 56, 59, 44, 34, 45, 67, 49]]
    
    >>> r = marca_natacio(l[:6])
    >>> r.sort()
    >>> r
    [['Joan', 'aleví', 49], ['Joana', 'aleví', 45], ['Maria', 'infantil', 33], ['Pere', 'aleví', 35], ['Rosa', 'infantil', 36], ['Rut', 'infantil', 35]]
    
    >>> r = marca_natacio(l[:2])
    >>> r.sort()
    >>> r
    [['Joana', 'aleví', 45], ['Rosa', 'infantil', 36]]
    
    >>> r = marca_natacio(l)
    
    >>> r.sort()
    >>> r
    [['Joan', 'aleví', 49], ['Joana', 'aleví', 45], ['Judit', 'aleví', 34], ['Maria', 'benjamí', 43], ['Maria', 'infantil', 33], ['Pere', 'aleví', 35], ['Roger', 'benjamí', 62], ['Rosa', 'infantil', 36], ['Rut', 'infantil', 35]]
    

    Disposes dels jocs de proves al fitxer test-marca-natacio.txt.

  2. Una funció anomenada

    natacio.marca_ordenada(l_neda)

    que cridi la funció anterior, però retorni la llista resultant ordena de manera creixent per la categoria i entre els/les nedadors/es de la mateixa categoria de menys temps a més. És obligatori cridar la funció anterior.

    Els següents tests mostren exemples del que ha de fer la funció:

    
    >>> l = [['Joana', 'aleví', 56, 59, 45, 67, 49], ['Rosa', 'infantil', 36, 59, 45, 67, 49, 54, 49],
    ... ['Joan', 'aleví', 58, 49, 55, 67, 51, 52, 49], ['Maria', 'infantil', 36, 49, 45, 47, 49, 54, 49, 39, 33],
    ... ['Pere', 'aleví', 39, 35, 37, 39], ['Rut', 'infantil', 36, 39, 35, 47, 39, 44],
    ... ['Roger', 'benjamí', 68, 69, 65, 67, 71, 62, 69], ['Maria', 'benjamí', 46, 49, 45, 47, 49, 49, 49, 43],
    ... ['Judit', 'aleví', 56, 59, 44, 34, 45, 67, 49]]
    
    >>> r = marca_ordenada(l[:6])
    >>> r
    [['Pere', 'aleví', 35], ['Joana', 'aleví', 45], ['Joan', 'aleví', 49], ['Maria', 'infantil', 33], ['Rut', 'infantil', 35], ['Rosa', 'infantil', 36]]
    
    >>> r = marca_ordenada(l[:2])
    >>> r
    [['Joana', 'aleví', 45], ['Rosa', 'infantil', 36]]
    
    >>> r = marca_ordenada(l)
    >>> r
    [['Judit', 'aleví', 34], ['Pere', 'aleví', 35], ['Joana', 'aleví', 45], ['Joan', 'aleví', 49], ['Maria', 'benjamí', 43], ['Roger', 'benjamí', 62], ['Maria', 'infantil', 33], ['Rut', 'infantil', 35], ['Rosa', 'infantil', 36]]
    

    Disposes dels jocs de proves al fitxer test-natacio.txt