Как проверить, есть ли в строке определенное количество согласных и гласных?
Aug 17 2020
Я пытаюсь программно проверить ответ на следующую проблему. Ручной расчет должен быть возможен, но это не мой вопрос.
Дана строка
"aeeiuchklpr"
длины 11. Символ «e» встречается дважды. Это не опечатка. Сколько существует 6-перестановок данной строки? Ограничения задаются следующим образом
- первый символ должен быть "h"
- последний символ должен быть гласным
- the number of consonants must be exactly 4
- the number of vowels must be exactly 2
Attempt
I don't know how to check the last two requirement above. Here is my attempt
Select[Permutations[StringSplit["aeeiuchklpr", ""], {6}],
First[#] == "h" &&
(Last[#] == "a" || Last[#] == "e" || Last[#] == "i" ||
Last[#] == "u") &] // Length
Ответы
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
Slightly different implementation as a one-liner, using a restricted pattern:
Count[Permutations[
Characters["aeeiuchklpr"], {6}], {"h", m__,
vowels = ("a" | "e" | "i" | "o" | "u")} /; Count[{m}, vowels] == 1]
yields
3120