Как проверить, есть ли в строке определенное количество согласных и гласных?
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