कुछ गेम के लिए जहां किसी को ढीले अक्षरों के समूह से एनाग्राम ढूंढने की आवश्यकता होगी, मैंने सभी संभावित एनाग्राम खोजने के लिए क्रमपरिवर्तन एल्गोरिदम लागू करने और ज्ञात पत्र स्थितियों के लिए आवश्यक होने पर फ़िल्टर करने के लिए समाप्त किया (-match
रास्ते में बढ़िया है)। लेकिन लंबे शब्दों के लिए यह बहुत गड़बड़ी साबित हुआ, क्योंकि गंदगी की एक बड़ी सूची को स्किम करने से वास्तव में उन उचित शब्दों को प्रकट नहीं किया जाता है जो छुपाए गए थे।पावरहेल, किस तरह के सेट चौराहे अंतर्निहित?
तो मैंने सोचा कि अगर मैं अंग्रेजी शब्दों की एक बड़ी सूची है (कहीं प्राप्य होना चाहिए) होगा मैं सिर्फ क्रमपरिवर्तन की मेरी सूची में उचित शब्दों की सूची के साथ सभी वास्तविक शब्द एक दूसरे को काटना और (उम्मीद) मिल सकता है क्रमपरिवर्तन सूची से।
के बाद से अलग ढंग से पी एस काम में कई ऑपरेटरों संग्रह के साथ मैंने सोचा कि मैं वैसे ही जैसे
$wordlist -contains $permlist
कुछ करना और चौराहे वापस मिल सकता है। दुर्भाग्य से यह इतना आसान नहीं है। अन्य विकल्प मैं के बारे में सोचा है एक सूची से अधिक पुनरावृति करने के लिए हो सकता है और प्रत्येक आइटम के लिए एक -contains
करना होगा:
$permlist | ? { $wordlist -contains $_ }
यह शायद काम करेगा, लेकिन यह भी बहुत धीमी गति से, मुझे लगता है कि है (खासकर जब $wordlist
एक gc wordlist.txt
का परिणाम है)। या मैं एक विशाल नियमित अभिव्यक्ति का निर्माण कर सकता हूं:
$wordlist -matches (($permlist | %{ "^$_`$" }) -join "|")
लेकिन शायद यह बहुत तेज़ नहीं होगा। मैं शायद findstr
का उपयोग विशाल विशाल रेगेक्स के साथ भी कर सकता हूं लेकिन यह गलत लगता है।
क्या कोई अंतर्निहित समाधान है जिसका मैं उपयोग कर सकता हूं और यह अब तक मेरे प्रयासों से बेहतर है? अन्यथा मैं शायद शब्द सूची को हैशटेबल में रखूंगा और पुनरावृत्त -contains
दृष्टिकोण का उपयोग करूँगा जो तब पर्याप्त तेज़ होना चाहिए।
ठीक है, यह मेरे दृष्टिकोण के बारे में होता। निश्चित रूप से सुंदर नहीं है। (और निश्चित रूप से cmdline से अनचाहे उपयोग के लिए उपयुक्त नहीं है)। – Joey