Come verificare se una stringa contiene un certo numero di consonanti e vocali?

Aug 17 2020

Sto cercando di controllare la risposta del seguente problema a livello di codice. Un calcolo manuale a mano deve essere possibile ma non è la mia domanda.

Data una stringa "aeeiuchklpr"di lunghezza 11. Il carattere "e" compare due volte. Non è un errore di battitura. Quante 6 permutazioni della stringa data ci sono? I vincoli sono indicati come segue

  • il primo carattere deve essere "h"
  • l'ultimo carattere deve essere una vocale
  • il numero di consonanti deve essere esattamente 4
  • il numero di vocali deve essere esattamente 2

Tentativo

Non so come controllare gli ultimi due requisiti sopra. Ecco il mio tentativo

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

Risposte

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

Implementazione leggermente diversa come one-liner, utilizzando uno schema limitato:

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

rendimenti

3120