Skip to content

Latest commit

 

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 

README.md

🔤 Strings Mix

Codewars Language Framework

📘 Description

Dans ce kata, l'objectif est de comparer deux chaînes de caractères afin de visualiser leurs différences en se basant uniquement sur les lettres minuscules de a à z.

L'idée consiste à :

  1. compter le nombre d'occurrences de chaque lettre dans les deux chaînes
  2. conserver uniquement les lettres dont la fréquence maximale est strictement supérieure à 1
  3. produire une représentation textuelle indiquant dans quelle chaîne la fréquence est la plus élevée

🔗 Kata Codewars
https://www.codewars.com/kata/5629db57620258aa9d000014

• • •

⚙️ Règles

Soient deux chaînes :


s1
s2

On procède de la manière suivante :

  1. Ne considérer que les lettres minuscules a..z
  2. Compter leur fréquence dans s1 et s2
  3. Déterminer la fréquence maximale pour chaque lettre
  4. Ignorer les lettres dont la fréquence maximale est ≤ 1

Chaque groupe doit être préfixé selon l'origine de la fréquence maximale :

Préfixe Signification
1: fréquence maximale dans s1
2: fréquence maximale dans s2
=: fréquence maximale identique dans s1 et s2

Chaque lettre est répétée autant de fois que sa fréquence maximale.

• • •

🧠 Principe

Pour chaque lettre a..z :


freq1 = nombre d'occurrences dans s1
freq2 = nombre d'occurrences dans s2
max = max(freq1, freq2)

Si :


max > 1

alors on génère une sous-chaîne :


prefix + lettre répétée max fois

Exemples :


1:aaaa
2:bbb
=:ccc

• • •

🔎 Tri du résultat

Les groupes obtenus doivent être triés selon les règles suivantes :

1️⃣ ordre décroissant de longueur


aaaa > bbb > cc

2️⃣ ordre lexicographique croissant si la longueur est identique

Le tri s'effectue en utilisant le codepoint des caractères.

Les groupes sont ensuite séparés par /.

• • •

🧩 Exemple simple

Entrée


s1 = "A aaaa bb c"
s2 = "& aaa bbb c d"

Comptage


s1 : a = 4, b = 2, c = 1
s2 : a = 3, b = 3, c = 1, d = 1

On ignore les lettres dont la fréquence maximale est ≤ 1.


a -> max = 4 (s1)
b -> max = 3 (s2)

Résultat


"1:aaaa/2:bbb"

• • •

🧩 Exemple

Entrée


s1 = "my&friend&Paul has heavy hats! &"
s2 = "my friend John has many many friends &"

Résultat


"2:nnnnn/1:aaaa/1:hhh/2:mmm/2:yyy/2:dd/2:ff/2:ii/2:rr/=:ee/=:ss"

• • •

🧩 Autre exemple

Entrée


s1 = "Are the kids at home? aaaaa fffff"
s2 = "Yes they are here! aaaaa fffff"

Résultat


"=:aaaaaa/2:eeeee/=:fffff/1:tt/2:rr/=:hh"

• • •

🧩 Exemple d’utilisation

MixStrings.Mix("A aaaa bb c", "& aaa bbb c d");

Résultat :

"1:aaaa/2:bbb"

• • •

🧪 Tests

Les tests unitaires sont disponibles dans le projet :

Les tests doivent vérifier notamment :

  • le comptage correct des fréquences
  • la gestion des lettres minuscules uniquement
  • l'exclusion des lettres avec fréquence ≤ 1
  • la génération correcte des préfixes
  • le tri correct du résultat

• • •

🧠 Concepts abordés

Ce kata permet de travailler plusieurs notions importantes :

  • manipulation de chaînes de caractères
  • comptage de fréquences
  • tri multi-critères
  • structures de données (dictionnaires)
  • algorithmes de comparaison

• • •

🏷️ Catégories

  • Fundamentals
  • Strings

• • •

🧾 Résumé

Ce kata consiste à comparer deux chaînes de caractères en analysant les fréquences des lettres minuscules.

La fonction doit :

  • compter les occurrences des lettres a..z
  • conserver uniquement celles apparaissant plus d'une fois
  • indiquer dans quelle chaîne la fréquence est la plus élevée
  • produire une représentation triée du résultat.