Comment vérifier si une chaîne contient un certain nombre de consonnes et de voyelles?
J'essaie de vérifier la réponse au problème suivant par programme. Un calcul manuel à la main doit être possible mais ce n'est pas ma question.
Étant donné une chaîne
"aeeiuchklpr"
de longueur 11. Le caractère "e" apparaît deux fois. Ce n'est pas une faute de frappe. Combien y a-t-il de 6 permutations de la chaîne donnée? Les contraintes sont données comme suit
- le premier caractère doit être "h"
- le dernier caractère doit être une voyelle
- le nombre de consonnes doit être exactement 4
- le nombre de voyelles doit être exactement 2
Tentative
Je ne sais pas comment vérifier les deux dernières exigences ci-dessus. Voici ma tentative
Select[Permutations[StringSplit["aeeiuchklpr", ""], {6}],
First[#] == "h" &&
(Last[#] == "a" || Last[#] == "e" || Last[#] == "i" ||
Last[#] == "u") &] // Length
Réponses
6 Hausdorff
VowelQ[s_String] := MatchQ[s, "a" | "e" | "i" | "o" | "u"];
Select[Permutations[StringSplit["aeeiuchklpr", ""], {6}],
First[#] == "h" && VowelQ[Last@#] && Count[VowelQ /@ #, True] == 2 &] // Length
3120
3 ArminVollmer
Implémentation légèrement différente en tant que one-liner, utilisant un motif restreint:
Count[Permutations[
Characters["aeeiuchklpr"], {6}], {"h", m__,
vowels = ("a" | "e" | "i" | "o" | "u")} /; Count[{m}, vowels] == 1]
rendements
3120