Fusión de listas ordenadas S97463


Statement
 

pdf   zip   tar

Escribe la siguiente función, que fusiona dos listas de frutas en orden descendente. Las listas pueden contener frutas con nombres repetidos, posiblemente con precios diferentes.

/**
 * @brief Fusiona dos listas ordenadas preservando el orden.
 * 
 * @param a Lista en orden descendente (puede contener nombres repetidos).
 * @param b Lista en orden descendente (puede contener nombres repetidos).
 * 
 * @return Lista en orden descendente con los elementos de a y b.
 */
list<Fruit> fusio_ordenada(const list<Fruit>& a, const list<Fruit>& b);

Una fruta va antes que otra cuando su precio es mayor, y si el precio es el mismo, cuando el nombre es lexicográficamente anterior. La comparación entre dos frutas la implementa ya el método is_greater_than que aparece a continuación. La declaración completa de la clase Fruit es la siguiente:

class Fruit {
 public:
       Fruit(string name, int price); // Construye una fruta

string name()  const; // devuelve el nombre
   int price() const; // devuelve el precio

    // Determina si una fruta tiene un precio mayor o si con el mismo 
    // precio, el nombre es anterior a `other`
  bool is_greater_than(const Fruit& other) const; 
};    

Observación

Debes implementar la función fusio_ordenada en el fichero fusio.cc, compilar (está preparado para poder compilar y depurar con VSCode), y finalmente enviar únicamente el fichero fusio.cc.

Los ficheros públicos (icono del gatito) contienen:

main.cc el programa principal, con la entrada/salida hecha
fruit.hh la clase Fruit, con los métodos mencionados
Makefile para compilar con make cómodamente
.vscode carpeta para compilar y depurar con VSCode

Entrada

La función recibe dos listas de frutas no modificables, ordenadas descendentemente. Las listas pueden contener frutas con nombres repetidos, posiblemente con precios diferentes. (De la lectura de las listas, que están separadas por una línea vacía, ya se encarga el programa principal.)

Salida

La función devuelve la lista resultante de fusionar las dos listas preservando el orden original. (De la escritura de la lista resultante también se encarga el programa principal.)

Public test cases
  • Input

    nectarine 9
    mango 7
    fig 6
    lemon 5
    watermelon 5
    kiwi 3
    banana 2
    cherry 1
    orange 1
    
    strawberry 8
    raspberry 7
    apple 5
    quince 5
    date 3
    pear 3
    grape 2
    honeydew 1
    tangerine 1
    
    

    Output

    nectarine 9
    strawberry 8
    mango 7
    raspberry 7
    fig 6
    apple 5
    lemon 5
    quince 5
    watermelon 5
    date 3
    kiwi 3
    pear 3
    banana 2
    grape 2
    cherry 1
    honeydew 1
    orange 1
    tangerine 1
    
  • Information
    Author
    Pau Fernández
    Language
    Spanish
    Translator
    Pau Fernández
    Original language
    Catalan
    Other languages
    Catalan
    Official solutions
    C++
    User solutions
    C++