Résumé en français : un isogram (En français on parle d'heterogramme) est un mot qui ne contient aucune lettre répétée. Ecrire une fonction qui renvoie vrai ou faux suivant que le mot est un heterogramme, sans tenir compte de la casse (majuscule/minuscule)
En JavaScript, on définit un ensemble de la façon suivante :
new Set([5, 5, 1, 5, 1])
Set(2) { 5, 1 }
new Set('abracadabra')
Set(5) { 'a', 'b', 'r', 'c', 'd' }
L'idée principale : On aura un heterogramme si la taille de l'ensemble des lettres utilisées pour écrire le mot est égal à la taille du mot initial.
isogram = mot => mot.length == new Set(mot.toLowerCase()).size
[Function: isogram]
isogram('Dermatoglyphics')
true
isogram('aba')
false
isogram('moOse')
false
Remarquez que le mot a besoin d'être mis en minuscule (ou majuscule) uniquement pour créer l'ensemble des lettres, pas pour trouver sa taille initiale. len
permet en Python de donner la taille d'une chaine, d'une liste ou d'un dictionnaire.
Une autre idée peut être de rechercher s'il existe au moins une lettre en double, par exemple en utilisant 2 boucles, en voici une version :
function isogram(mot) {
mot = mot.toLowerCase();
for (i = 0; i < mot.length - 1; i++) {
for (j = i + 1; j < mot.length; j++) {
if (mot[i] == mot[j]) return false;
}
}
return true;
}
isogram('Dermatoglyphics')
true
isogram('aba')
false
Ecrivons une expression régulière (Regex) qui va tester si une correspondance (match
en anglais) existe entre un caractère (noté .
en Regex) et ce même caractère un peu plus loin.
L'expression régulière est (exemple ici avec le mot couleur):
(.).*\1
isogram = mot => !/(.).*\1/i.test(mot.toLowerCase())
[Function: isogram]
isogram('Dermatoglyphics')
true