Gestion d’occurrences avec Counter en Python

Utilisation d’un module disponible nativement dans Python pour un code plus efficace.

→ Challenge Correction: Greenoïd #3 - An alternative reality

Troisième corrigé des challenges de l’histoire originale Greenoïd, créée à l’occasion de la Battle Dev Thales 2024.

Dans ce challenge, il fallait déterminer la lettre qui revenait le plus souvent, et donc, combien de fois elle revenait.

Pour compte les occurrences des différentes lettres, on va utiliser Counter, qui fait partie du module collections. Counter fonctionne comme un dictionnaire où les clés sont les éléments de la collection, et les valeurs représentent le nombre de fois que ces éléments apparaissent. Exactement ce qu’il nous faut pour ce challenge ! Et beaucoup plus simple et efficace que de créer des boucles ou conditions complexes.

On va aussi créer un dictionnaire pour les correspondances entre les lettres et les tâches des robots.

Voici le code :

from collections import Counter

# Exemple de données d'entrée
robots = 'DHDDDCHCDDDHDCDHPDPDCHHPDPDCCPDDDDPDCHPDDPDDDDPPCHPCCPCDHHDPDPDDDDCHDPCDDHDDDDPDDPDCDPDDPDHPDPHDDDDHDDDDHPDDCDCCHD'

# Dictionnaire pour mapper les lettres à leur description
tasks = {
    'C': 'CREATE',
    'H': 'HEAL',
    'P': 'PRESERVE',
    'D': 'DESTROY'
}

# Compter les occurrences de chaque lettre
compteur = Counter(robots)

# Trouver la lettre avec le plus grand nombre d'occurrences
task_max = max(compteur, key=compteur.get)

# Afficher le résultat
print(f"{tasks[task_max]}_{compteur[task_max]}")

Un peu d’explications concernant cette ligne :

task_max = max(compteur, key=compteur.get)

La fonction max() permet de trouver l’élément le plus grand dans une collection. Par défaut, elle compare les éléments eux-mêmes. En utilisant l’argument key=compteur.get, on modifie cette comparaison pour qu’elle se base non pas sur les éléments (les lettres) mais sur les valeurs associées à ces éléments dans le dictionnaire compteur. Cela signifie que Python va comparer les nombres d’occurrences des lettres et renvoyer celle qui apparaît le plus souvent.

Note interne : pour l’intérêt de l’histoire, ce challenge était en réalité truqué ! C’est toujours le D qui est la lettre la + présente pour que ce soit toujours les robots « DESTROY » qui soient sur représentés 😉

Pour aller + loin, la documentation officielle de Counter.


Qui a codé ce superbe contenu ?

Keep learning

Other content to discover