Bagaimana cara memeriksa apakah sebuah string berisi sejumlah konsonan dan vokal?

Aug 17 2020

Saya mencoba memeriksa jawaban dari masalah berikut secara terprogram. Penghitungan manual dengan tangan harus memungkinkan tetapi itu bukan pertanyaan saya.

Diberikan string "aeeiuchklpr"dengan panjang 11. Karakter "e" muncul dua kali. Ini bukan salah ketik. Berapa banyak 6-permutasi dari string yang diberikan? Batasan diberikan sebagai berikut

  • karakter pertama harus "h"
  • karakter terakhir harus berupa vokal
  • jumlah konsonan harus tepat 4
  • jumlah vokal harus tepat 2

Mencoba

Saya tidak tahu cara memeriksa dua persyaratan terakhir di atas. Ini usahaku

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

Jawaban

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

Penerapan yang sedikit berbeda sebagai satu baris, menggunakan pola terbatas:

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

hasil

3120