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