¿Cómo comprobar si una cadena contiene un cierto número de consonantes y vocales?
Aug 17 2020
Estoy tratando de verificar la respuesta del siguiente problema mediante programación. Un cálculo manual a mano debe ser posible pero no es mi pregunta.
Dada una cadena
"aeeiuchklpr"
de longitud 11. El carácter "e" aparece dos veces. No es un error tipográfico. ¿Cuántas 6 permutaciones de la cadena dada hay? Las restricciones se dan como sigue
- el primer carácter debe ser "h"
- el último carácter debe ser una vocal
- el número de consonantes debe ser exactamente 4
- el número de vocales debe ser exactamente 2
Intento
No sé cómo verificar los dos últimos requisitos anteriores. Aqui esta mi intento
Select[Permutations[StringSplit["aeeiuchklpr", ""], {6}],
First[#] == "h" &&
(Last[#] == "a" || Last[#] == "e" || Last[#] == "i" ||
Last[#] == "u") &] // Length
Respuestas
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
Implementación ligeramente diferente como una sola línea, usando un patrón restringido:
Count[Permutations[
Characters["aeeiuchklpr"], {6}], {"h", m__,
vowels = ("a" | "e" | "i" | "o" | "u")} /; Count[{m}, vowels] == 1]
rendimientos
3120