Guide for Passant llista


Això és una guia per ajudar-te a començar amb aquest problema — no és la solució.
Mostra el codi per a: Consideracions generals Java 11 Python 3

Com abordar aquest problema

Se't dona una llista de "Nom Cognom", un per línia, i has d'imprimir-los ordenats pel cognom (i \ pel nom si hi ha empat de cognom). A l'hora d'imprimir cada persona, només cal afegir el cognom si \ el seu nom de pila no és únic dins de tota la classe; si el nom ja identifica clarament a la \ persona, n'hi ha prou amb el nom.

Idea general:

  1. Llegeix totes les línies de l'entrada (fins que s'acabi), separant cada una en nom i cognom, i \ guarda-les totes en una llista.
  2. Fes servir una estructura de tipus taula de hash (un diccionari / HashMap) per comptar quantes \ vegades apareix cada nom de pila dins de tota la llista.
  3. Ordena la llista de persones per cognom, i quan coincideixi el cognom, per nom.
  4. Recorre la llista ja ordenada: per cada persona, si el comptador del seu nom és més gran que 1, \ imprimeix "Nom Cognom"; si és 1, imprimeix només el "Nom".

Paranys habituals:

  • Cal fer el recompte de noms sobre tota la llista abans de decidir què s'imprimeix per a cada \ persona (no es pot decidir mirant-ne només una part).
  • L'ordenació és pel cognom; el nom només es fa servir per desempatar quan dos cognoms coincideixen.
  • L'entrada pot tenir fins a 200 línies i no se't diu explícitament quantes seran: llegeix fins que \ s'acabi l'entrada.

Pista per a Python

Fes servir un dict (o collections.Counter) per comptar noms de pila, i sorted amb una clau \ composta per ordenar per cognom i després per nom:

import sys
from collections import Counter

persones = []
for linia in sys.stdin:
    linia = linia.strip()
    if not linia:
        continue
    nom, cognom = linia.split()
    persones.append((nom, cognom))

comptador_noms = Counter(nom for nom, cognom in persones)

persones_ordenades = sorted(persones, key=lambda p: (p[1], p[0]))

for nom, cognom in persones_ordenades:
    if comptador_noms[nom] > 1:
        print(f"{nom} {cognom}")
    else:
        print(nom)

Tornar al problema