Como verificar se uma string contém um certo número de consoantes e vogais?

Aug 17 2020

Estou tentando verificar a resposta do seguinte problema de forma programática. Um cálculo manual à mão deve ser possível, mas não é minha pergunta.

Dada uma string "aeeiuchklpr"de comprimento 11. O caractere "e" ocorre duas vezes. Não é um erro de digitação. Quantas 6 permutações da string dada existem? As restrições são fornecidas como segue

  • o primeiro caractere deve ser "h"
  • o último caractere deve ser uma vogal
  • o número de consoantes deve ser exatamente 4
  • o número de vogais deve ser exatamente 2

Tentativa

Não sei como verificar os dois últimos requisitos acima. Aqui está minha tentativa

Select[Permutations[StringSplit["aeeiuchklpr", ""], {6}],
  First[#] == "h" &&
    (Last[#] == "a" || Last[#] == "e" || Last[#] == "i" || 
      Last[#] == "u") &] // Length

Respostas

6 Hausdorff Aug 17 2020 at 12:26
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 Aug 18 2020 at 18:23

Implementação ligeiramente diferente como uma linha, usando um padrão restrito:

Count[Permutations[
  Characters["aeeiuchklpr"], {6}], {"h", m__, 
   vowels = ("a" | "e" | "i" | "o" | "u")} /; Count[{m}, vowels] == 1]

rendimentos

3120