Anagrames V80480


Statement
 

pdf   zip

Dues paraules són anagrames si tenen exactament les mateixes lletres i en les mateixes quantitats. Per exemple, eat, ate i tea són anagrames entre elles, i també ho són listen, silent i enlist.

Feu un programa que llegeixi una seqüència de paraules i les classifiqui en grups d’anagrames. Per a cada grup, cal escriure les paraules ordenades alfabèticament. Els grups s’han d’escriure en un cert ordre (explicat a sota).

Observació

En aquest problema el centre d’interès és l’eficiència. Cal trobar una forma intel·ligent d’agrupar les paraules per evitar comparacions innecessàries.

Pista: Si ordenem les lletres d’una paraula, obtenim una mena de “signatura”. Per exemple, si ordenem les lletres de eat, ate i tea, obtenim aet en tots tres casos. Dues paraules són anagrames si i només si tenen la mateixa signatura. Aquesta signatura es pot fer servir com a clau d’un map.

Per ordenar les lletres d’un string s, es pot fer servir la funció sort de la llibreria <algorithm>:

#include <algorithm>
...
sort(s.begin(), s.end());

La sortida del programa ha d’estar ordenada per la signatura de cada grup, que correspon a l’ordre de les claus del map.

Entrada

L’entrada és una seqüència de paraules (en minúscules, sense espais interns), una per línia, acabada per fi d’entrada.

Sortida

Per a cada grup d’anagrames, s’escriu una línia amb la signatura del grup (les lletres ordenades), seguida de : i un espai, i a continuació les paraules del grup ordenades alfabèticament i separades per espais. Els grups s’escriuen en ordre de signatura.

Public test cases
  • Input

    eat
    tea
    ate
    listen
    silent
    enlist
    google
    elgoog
    stressed
    desserts
    japones
    esponja
    

    Output

    aejnops: esponja japones
    aet: ate eat tea
    deerssst: desserts stressed
    eggloo: elgoog google
    eilnst: enlist listen silent
    
  • Information
    Author
    Pau Fernández
    Language
    Catalan
    Other languages
    Spanish
    Official solutions
    C++
    User solutions
    C++