Acronymes

Sujet

Comme dans tout lieu de travail, les employés de la bibliothèque ont pris l’habitude d’utiliser des acronymes (exemples d’acronymes : IOI, RATP, BEPC, LOL...) pour les titres de livres les plus utilisés, ce qui leur permet de parler plus vite !

Seulement vous ne connaissez pas encore tous les acronymes, aussi lorsqu’on vous demande d’aller chercher un livre sans vous donner le titre complet, vous êtes bien embêté(e) !

Étant donné un acronyme, vous devez trouver tous les titres qui correspondent et les afficher "joliment".

Contraintes

Tous les titres de livres ainsi que les acronymes contiennent au plus 200 caractères.

Entrée

Sortie

Exemple


entrée :

PP
7
PEDro paramO
Poemes PALINDROMES
LA Condition HUMAINE
PERE et fils
petite
Promenade Au phare
peter pan

sortie :

Pedro Paramo
Poemes Palindromes
Peter Pan

Solution

Méthode lente

acronyme = list(input().lower())
nb_titres = int(input())
for _ in range(nb_titres):
    titre = input().lower()
    mots = titre.split()
    if [mot[0] for mot in mots] == acronyme:
        print(" ".join(map(str.capitalize, mots)))

Cette méthode est lente, en effet elle calcule la totalité de l'acronyme d'un titre pour le comparer ensuite ; on pourrait pourtant avoir une réponse anticipée.

Créons une version fonctionnelle, un peu plus technique, mais qui répond plus vite en cas d'incompatibilité.

Variante fonctionnelle

from itertools import zip_longest

def filtre_titre(titre: str, acronyme: str) -> str:
    """
    Renvoie une version capitalizée de titre,
    uniquement si elle correspond à l'acronyme,
    sinon la chaîne vide ''

    >>> filtre_titre("sALut toI", "ST")
    'Salut Toi'
    
    >>> filtre_titre("Autre chose", "AZERTY")
    ''

    """
    mots = list(titre.split())
    if all(mot[0].upper() == lettre 
            for mot, lettre in zip_longest(mots, acronyme, fillvalue=" ")):
                return " ".join(map(str.capitalize, mots))
    return '' # sinon
    

acronyme = input()
nb_titres = int(input())
for _ in range(nb_titres):
    titre = filtre_titre(input(), acronyme)
    if titre != '':
        print(titre)

Les variantes ne sont pas forcément plus rapides, il faut d'abord que l'algorithme soit plus efficace, et là, oui, une variante fonctionnelle a ses avantages. En particulier avec Python, où les fonctions internes sont bien écrites et avec un langage rapide ; le C.