कैसे जांचें कि क्या एक स्ट्रिंग में कुछ निश्चित व्यंजन और स्वर हैं?

Aug 17 2020

मैं निम्नलिखित समस्या के उत्तर को प्रोग्रामेटिक रूप से जाँचने का प्रयास कर रहा हूँ। हाथ से मैन्युअल गणना संभव है लेकिन यह मेरा सवाल नहीं है।

"aeeiuchklpr"लंबाई की एक स्ट्रिंग को देखते हुए 11. चरित्र "ई" दो बार होता है। यह एक टाइपो नहीं है। दिए गए तार के कितने 6-क्रमपरिवर्तन हैं? अड़चनें इस प्रकार दी गई हैं

  • पहला वर्ण "h" होना चाहिए
  • अंतिम चरित्र एक स्वर होना चाहिए
  • व्यंजन की संख्या ठीक 4 होनी चाहिए
  • स्वरों की संख्या ठीक 2 होनी चाहिए

प्रयास

मुझे नहीं पता कि ऊपर की अंतिम दो आवश्यकता को कैसे जांचना है। यहाँ मेरा प्रयास है

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

प्रतिबंधित पैटर्न का उपयोग करके एक-लाइनर के रूप में थोड़ा अलग कार्यान्वयन:

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

पैदावार

3120