"आसान", "मध्यम", या "हार्ड" के रूप में जल्लाद कठिनाई स्तरों के लिए शब्दों को वर्गीकृत करने के लिए एल्गोरिथम


114

एक जल्लाद खेल के लिए एक शब्द की "कठिनाई" निर्धारित करने के लिए एक अच्छा एल्गोरिथ्म क्या है, ताकि खेल एक निर्दिष्ट कठिनाई स्तर से मेल खाने के लिए शब्दों का चयन कर सके?

कठिनाई आवश्यक अनुमानों की संख्या से संबंधित प्रतीत होगी, अक्षरों के उपयोग की सापेक्ष आवृत्ति (जैसे कई असामान्य अक्षरों वाले शब्द अनुमान लगाने में कठिन हो सकते हैं), और संभवतः शब्द की लंबाई।

इसके लिए कुछ व्यक्तिपरक कारक भी हैं (क्षतिपूर्ति करने का प्रयास), जैसे कि एक शब्द की संभावना खिलाड़ी की शब्दावली में है, और इसे पहचाना जा सकता है, केवल पत्र आवृत्तियों के आधार पर अनुमान लगाने की रणनीति से आगे बढ़ने की अनुमति देता है जो सूची की सूची के आधार पर अनुमान लगाने के लिए है ज्ञात मिलान शब्द।

अब के लिए मेरा प्रयास माणिक में नीचे है। वर्गीकरण को बेहतर बनाने के बारे में कोई सुझाव?

def classify_word(w)
  n = w.chars.to_a.uniq.length # Num. unique chars in w
  if n < 5 and w.length > 4
    return WordDifficulty::Easy
  end
  if n > w.length / 2
    return WordDifficulty::Hard
  else
    return WordDifficulty::Medium
  end
end

मैं एक जल्लाद खेल लिख रहा हूं मैं चाहूंगा कि मेरे बच्चे खेलें; मैं "होमवर्क" का प्रयास करने के लिए बहुत पुराना हूं, यही वजह है कि प्रश्न इतने नीचे वोट प्राप्त कर रहा है ... शब्द बड़े शब्द डेटाबेस से यादृच्छिक रूप से खींचे जाते हैं, जिसमें कई अस्पष्ट शब्द शामिल हैं, और कठिनाई स्तर द्वारा फ़िल्टर किया जा रहा है शब्द के लिए निर्धारित।


12
क्यों घटता है? यह एक सभ्य प्रश्न है। मैं एक कठिनाई कार्य करना चाहूंगा f(w) = (# unique letters) * (7 - # vowels) * (sum of the positions of unique letters in a list, ordered by frequency)। वहां से, आप फ़ंक्शन की सीमा को तीन खंडों में विभाजित कर सकते हैं और अपनी कठिनाइयों को बुला सकते हैं।
ब्लेंडर

2
मैं आपको इसके लिए एक वेब खोज करने का सुझाव दूंगा - संभवत: ऐसे एल्गोरिदम या शब्दकोश हैं जो शब्द की जटिलता की गणना / रिपोर्ट करने के लिए उद्देश्य रखते हैं। मुझे पता है कि लंबे समय तक पाठ हैं।
गर्म चाट

3
संबंधित: youtube.com/watch?v=bBLm9P-ph6U (QI XL - जल्लाद में सबसे कठिन शब्द)
क्लॉस जोर्जेंसन

5
आप जो भी करते हैं, उसमें EXTINCTIONSPECTROPHOTOPOLERISCOPEOCCULOGRAVOGYROKYNETOMETER शामिल होना सुनिश्चित करें।
हॉट लिप्स

2
उन उपयोगकर्ताओं के लिए जो रूबी से परिचित नहीं हो सकते हैं, शायद आप यह समझाना चाहते हैं कि आपकी विधि की पहली पंक्ति क्या करती है? n = w.chars.to_a.uniq.lengthक्या यह अद्वितीय अक्षरों की संख्या की गणना करता है?
टी नगीनन

जवाबों:


91

1। परिचय

इस समस्या से व्यवस्थित तरीके से संपर्क करने का एक तरीका है: यदि आपके पास एक एल्गोरिथम है जो जल्लाद की भूमिका निभाता है, तो आप प्रत्येक शब्द की कठिनाई को गलत अनुमानों की संख्या मान सकते हैं जो कि उस शब्द का अनुमान लगाने पर आपके प्रोग्राम को ले जाएगा।

2. जल्लाद की रणनीति पर

एक विचार है जो कुछ अन्य उत्तरों और टिप्पणियों में निहित है, कि सॉल्वर के लिए इष्टतम रणनीति अंग्रेजी में अक्षरों की आवृत्ति पर या कुछ कॉर्पस में शब्दों की आवृत्ति पर उनके निर्णयों को आधार बनाना होगा। यह एक मोहक विचार है, लेकिन यह बिल्कुल सही नहीं है। सॉल्वर सबसे अच्छा करता है अगर वह सेटर द्वारा चुने गए शब्दों के वितरण को सही ढंग से मॉडल करता है , और एक मानव सेटर अच्छी तरह से अपनी दुर्लभता या अक्सर उपयोग किए जाने वाले पत्रों से बचने के आधार पर शब्दों का चयन कर सकता है। उदाहरण के लिए, हालांकि Eअंग्रेजी में सर्वाधिक उपयोग होने वाले पत्र है, अगर सेटर हमेशा शब्द से चुनता है JUGFUL, RHYTHM, SYZYGY, और ZYTHUM, फिर एक आदर्श solver का अनुमान लगाकर शुरू नहीं करता हैE !

सेटर को मॉडलिंग करने का सबसे अच्छा तरीका संदर्भ पर निर्भर करता है, लेकिन मुझे लगता है कि कुछ प्रकार के बायेसियन आगमनात्मक निष्कर्ष एक संदर्भ में अच्छी तरह से काम करेंगे जहां सॉल्वर एक ही सेटर के खिलाफ या इसी तरह के बसने वालों के समूह के खिलाफ कई गेम खेलता है।

3. एक जल्लाद एल्गोरिदम

यहाँ मैं एक ऐसे सॉल्वर की रूपरेखा तैयार करूँगा जो बहुत अच्छा है (लेकिन एकदम सही से बहुत दूर)। यह सेटर को एक निश्चित शब्दकोष से समान रूप से शब्द चुनने के रूप में प्रस्तुत करता है। यह एक लालची एल्गोरिथ्म है : प्रत्येक चरण में यह उस पत्र का अनुमान लगाता है जो यादों की संख्या को कम करता है, अर्थात ऐसे शब्द जिनमें अनुमान शामिल नहीं है। उदाहरण के लिए, यदि कोई अनुमान अभी तक नहीं लगाया गया है, और संभव शब्द हैं DEED, DEADऔर DAREफिर:

  • यदि आप अनुमान लगाते हैं DयाE , कोई चूक नहीं है;
  • यदि आप अनुमान लगाते हैं A, तो एक मिस ( DEED) है;
  • यदि आप अनुमान लगाते हैं R, तो दो मिस ( DEEDऔर DEAD) हैं;
  • यदि आप किसी अन्य पत्र का अनुमान लगाते हैं, तो तीन मिस हैं।

तो या तो Dया Eइस स्थिति में एक अच्छा अनुमान है।

( टिप्पणी में कर्नल पैनिक के लिए धन्यवाद कि सही अनुमान लगाने वाले जल्लाद में स्वतंत्र हैं - मैं अपने प्रयास में इसे पूरी तरह से भूल गया!)

4. कार्यान्वयन

यहाँ पायथन में इस एल्गोरिथ्म का कार्यान्वयन है:

from collections import defaultdict
from string import ascii_lowercase

def partition(guess, words):
    """Apply the single letter 'guess' to the sequence 'words' and return
    a dictionary mapping the pattern of occurrences of 'guess' in a
    word to the list of words with that pattern.

    >>> words = 'deed even eyes mews peep star'.split()
    >>> sorted(list(partition('e', words).items()))
    [(0, ['star']), (2, ['mews']), (5, ['even', 'eyes']), (6, ['deed', 'peep'])]

    """
    result = defaultdict(list)
    for word in words:
        key = sum(1 << i for i, letter in enumerate(word) if letter == guess)
        result[key].append(word)
    return result

def guess_cost(guess, words):
    """Return the cost of a guess, namely the number of words that don't
    contain the guess.

    >>> words = 'deed even eyes mews peep star'.split()
    >>> guess_cost('e', words)
    1
    >>> guess_cost('s', words)
    3

    """
    return sum(guess not in word for word in words)

def word_guesses(words, wrong = 0, letters = ''):
    """Given the collection 'words' that match all letters guessed so far,
    generate tuples (wrong, nguesses, word, guesses) where
    'word' is the word that was guessed;
    'guesses' is the sequence of letters guessed;
    'wrong' is the number of these guesses that were wrong;
    'nguesses' is len(guesses).

    >>> words = 'deed even eyes heel mere peep star'.split()
    >>> from pprint import pprint
    >>> pprint(sorted(word_guesses(words)))
    [(0, 1, 'mere', 'e'),
     (0, 2, 'deed', 'ed'),
     (0, 2, 'even', 'en'),
     (1, 1, 'star', 'e'),
     (1, 2, 'eyes', 'en'),
     (1, 3, 'heel', 'edh'),
     (2, 3, 'peep', 'edh')]

    """
    if len(words) == 1:
        yield wrong, len(letters), words[0], letters
        return
    best_guess = min((g for g in ascii_lowercase if g not in letters),
                     key = lambda g:guess_cost(g, words))
    best_partition = partition(best_guess, words)
    letters += best_guess
    for pattern, words in best_partition.items():
        for guess in word_guesses(words, wrong + (pattern == 0), letters):
            yield guess

5. उदाहरण के परिणाम

इस रणनीति का उपयोग करके एक संग्रह में प्रत्येक शब्द का अनुमान लगाने की कठिनाई का मूल्यांकन करना संभव है। यहाँ मैं अपने सिस्टम डिक्शनरी में छः अक्षरों वाले शब्दों पर विचार करता हूँ:

>>> words = [w.strip() for w in open('/usr/share/dict/words') if w.lower() == w]
>>> six_letter_words = set(w for w in words if len(w) == 6)
>>> len(six_letter_words)
15066
>>> results = sorted(word_guesses(six_letter_words))

इस शब्दकोश में अनुमान लगाने के लिए सबसे आसान शब्द (साथ में अनुमान लगाने के लिए आवश्यक अनुमानों के अनुक्रम के साथ) निम्नानुसार हैं:

>>> from pprint import pprint
>>> pprint(results[:10])
[(0, 1, 'eelery', 'e'),
 (0, 2, 'coneen', 'en'),
 (0, 2, 'earlet', 'er'),
 (0, 2, 'earner', 'er'),
 (0, 2, 'edgrew', 'er'),
 (0, 2, 'eerily', 'el'),
 (0, 2, 'egence', 'eg'),
 (0, 2, 'eleven', 'el'),
 (0, 2, 'enaena', 'en'),
 (0, 2, 'ennead', 'en')]

और सबसे कठिन शब्द ये हैं:

>>> pprint(results[-10:])
[(12, 16, 'buzzer', 'eraoiutlnsmdbcfg'),
 (12, 16, 'cuffer', 'eraoiutlnsmdbpgc'),
 (12, 16, 'jugger', 'eraoiutlnsmdbpgh'),
 (12, 16, 'pugger', 'eraoiutlnsmdbpcf'),
 (12, 16, 'suddle', 'eaioulbrdcfghmnp'),
 (12, 16, 'yucker', 'eraoiutlnsmdbpgc'),
 (12, 16, 'zipper', 'eraoinltsdgcbpjk'),
 (12, 17, 'tuzzle', 'eaioulbrdcgszmnpt'),
 (13, 16, 'wuzzer', 'eraoiutlnsmdbpgc'),
 (13, 17, 'wuzzle', 'eaioulbrdcgszmnpt')]

इसका कारण यह है कि आप कठिन हैं क्योंकि आपने अनुमान लगाया है -UZZLE, आपके पास अभी भी सात संभावनाएं शेष हैं:

>>> ' '.join(sorted(w for w in six_letter_words if w.endswith('uzzle')))
'buzzle guzzle muzzle nuzzle puzzle tuzzle wuzzle'

6. वर्डलिस्ट की पसंद

बेशक, अपने बच्चों के लिए शब्दसूची तैयार करते समय आप अपने कंप्यूटर के सिस्टम शब्दकोश से शुरू नहीं करेंगे, आप उन शब्दों की एक सूची के साथ शुरू करेंगे, जो आपको लगता है कि वे जानने की संभावना है। उदाहरण के लिए, आप विभिन्न अंग्रेजी कॉर्पोरा में सबसे अधिक इस्तेमाल किए जाने वाले शब्दों की विकिपीडिया की सूची पर एक नज़र डाल सकते हैं ।

उदाहरण के लिए, 2006 के प्रोजेक्ट गुटेनबर्ग में 10,000 सबसे आम शब्दों में 1,700 छह-अक्षर शब्दों में से , सबसे कठिन शब्द हैं:

[(6, 10, 'losing', 'eaoignvwch'),
 (6, 10, 'monkey', 'erdstaoync'),
 (6, 10, 'pulled', 'erdaioupfh'),
 (6, 10, 'slaves', 'erdsacthkl'),
 (6, 10, 'supper', 'eriaoubsfm'),
 (6, 11, 'hunter', 'eriaoubshng'),
 (6, 11, 'nought', 'eaoiustghbf'),
 (6, 11, 'wounds', 'eaoiusdnhpr'),
 (6, 11, 'wright', 'eaoithglrbf'),
 (7, 10, 'soames', 'erdsacthkl')]

(सॉम्स फोर्से जॉन गॉल्सवर्थी द्वारा फोर्सेट सागा में एक चरित्र है ; शब्द-सूची को निचले-मामले में बदल दिया गया है, इसलिए मेरे लिए उचित नाम जल्दी से निकालना संभव नहीं था।)


1
अक्सर उपयोग की जाने वाली शब्द सूचियों पर अच्छी कॉल। invokeit.wordpress.com/frequency-word-lists में अंग्रेजी और स्वीडिश है, इसलिए दोनों के लिए अच्छा है।
ग्रससेल

1
मुझे उम्मीद bingleहै कि इससे अधिक कठिन मूल्यांकन किया जाएगा singleया tingle- bingleएक कम सामान्य शब्द है और b एक कम आम पत्र है
ब्लूराजा - डैनी पफ्लुगुफ़े

5
कूल एल्गोरिदम (और कोड लिखने से पहले अंग्रेजी में समझाने के लिए धन्यवाद!)। लेकिन मुझे लगता है कि आपको गलत अनुमानों की संख्या को कम करने की कोशिश करनी चाहिए । इस प्रकार, यदि शब्दकोश [बल्ले, बाजी, टोपी, गर्म, यम] थे, तो मैं 'T' (B, A या H के बजाय) का अनुमान लगाऊंगा। अगर मैं सही हूं, तो यह मेरे लिए कुछ भी खर्च नहीं करता है। अगर मैं गलत हूं, तो केवल 'यम' ही रहता है।
कर्नल पैनिक

8
यह वास्तव में एक शांत एल्गोरिथ्म है, लेकिन मुझे लगता है कि रणनीति को प्रतिबिंबित नहीं करता है कि मानव खिलाड़ियों को करने की संभावना है - हर एक शब्द को जानने के बजाय, मानव (सामान्य रूप से) सबसे आम शब्दों को पहचानने जा रहे हैं, और अन्यथा दमन को पहचानने की कोशिश करेंगे और उपसर्ग (जैसे आयन, आईएनजी) और असफल होना जो केवल सामान्य अक्षरों का अनुमान लगाते हैं (स्वर से शुरू करना, फिर टी / आर / एस / एन / आदि करना)। यकीन नहीं है कि इसे कैसे कोड किया जाए लेकिन यह :) के बारे में सोचने के लिए कुछ है :)
पेटाशु

2
महान विश्लेषण। जैसा कि @Pashashu बताते हैं, इसे और भी बेहतर बनाने के लिए अगला कदम सिर्फ आम शब्दों का शब्दकोश लेने के बजाय, शब्दों का पूरा शब्दकोश लेने के लिए, लेकिन समानता के बारे में टिप्पणी के साथ होगा, और बस शब्द के सामान्यता में वजन के साथ पत्र-वितरण-कठिनाई। लेकिन यह सिर्फ वैकल्पिक सुधार के लिए है - यह पहले से ही एक उत्कृष्ट समाधान है क्योंकि यह खड़ा है।
बेन ली

21

वास्तव में एक सरल तरीका यह होगा कि शब्द में स्वरों की कमी, अद्वितीय अक्षरों की संख्या और प्रत्येक अक्षर की समानता के आधार पर एक अंक की गणना करें:

letters = 'etaoinshrdlcumwfgypbvkjxqz'
vowels = set('aeiou')

def difficulty(word):
    unique = set(word)
    positions = sum(letters.index(c) for c in word)

    return len(word) * len(unique) * (7 - len(unique & vowels)) * positions

words = ['the', 'potato', 'school', 'egypt', 'floccinaucinihilipilification']

for word in words:
    print difficulty(word), word

और आउटपुट:

432 the
3360 potato
7200 school
7800 egypt
194271 floccinaucinihilipilification

आप तब शब्दों को स्कोर कर सकते हैं:

        score < 2000   # Easy
 2000 < score < 10000  # Medium
10000 < score          # Hard

हाय ब्लेंडर, क्या आप मुझे बता सकते हैं कि जादू नंबर 7 के लिए क्या है? 6 या 50 क्यों नहीं? यदि मैं किसी अन्य कुलीन संख्या में रखता हूं तो क्या होता है?
पवन

@ पवन: वास्तव में कुछ भी नहीं। सभी शब्दों के अंकों को एक ही राशि से स्थानांतरित किया जाएगा।
ब्लेंडर

हाँ, मैंने उस शिफ्ट पर ध्यान दिया जब मैं एक ऑनलाइन अजगर निष्पादन के साथ खेल रहा था। मैंने कुछ देखा और वह यह है कि जब मैं घृणा की तुलना में कल्पनात्मक चीज़ों में टाइप करता हूँ, तो घृणास्पद को विलक्षण से कम मूल्य का होता है, क्योंकि कल्पनात्मक शब्द एक शब्द है जो अधिक सही ढंग से वर्तनी है और इस तरह एक शब्द के खेल में कम कठिनाई स्तर में दिखाई देना चाहिए। इससे मुझे एहसास हुआ कि कठिनाई व्यक्तिपरक है, लेकिन यह मुझे सोच रहा था कि कुछ शब्दों को रेखांकित करने के लिए किसी तरह का अध्ययन किया जाना चाहिए, दूसरों पर जादू करना सबसे मुश्किल है, है ना? क्या आप मुझे इस तरह के एक अध्ययन के लिए इंगित कर सकते हैं pls?
पावन

या कम से कम उस तरह का एक अध्ययन क्या कहलाएगा क्योंकि मुझे पहले प्रतिशत प्रयास में गलत तरीके से शब्द के प्रतिशत के साथ शब्दों के संग्रह को खोजने में कठिनाई हो रही है - जो कि मैं अब कर रहा हूं।
पावन

9

किसी शब्द की कठिनाई का अनुमान लगाने के लिए आप मोंटे कार्लो विधि का उपयोग कर सकते हैं :

  • हर बार अपनी लक्षित भाषा में पत्र की आवृत्ति से भारित, हर बार एक यादृच्छिक पत्र का अनुमान लगाकर एक गेम का अनुकरण करें, और गणना करें कि आपके यादृच्छिक खिलाड़ी को समाधान पर पहुंचने के लिए कितने अनुमान लगे। ध्यान दें कि चूंकि प्रत्येक अनुमान एक पत्र को समाप्त करता है, यह प्रक्रिया परिमित है, और यह 1 से 26 तक एक संख्या देता है, समावेशी।
  • दोहराएँ इस प्रक्रिया को 2*Nकई बार है, जहां Nकी संख्या है अद्वितीय आपके शब्द में अक्षरों ,
  • 2*Nरन के परिणामों के औसत से स्कोर की गणना करें ,
  • जटिलता का स्तर निर्धारित करें: दस से कम स्कोर एक आसान शब्द को इंगित करता है, और सोलह से ऊपर का स्कोर एक कठिन शब्द इंगित करता है; बाकी सब माध्यम है।

2
मुझे लगता है कि आपको केवल गलत अनुमानों को गिनना चाहिए । सही अनुमानों के लिए कोई जुर्माना नहीं है।
कर्नल पैनिक

दोहराव की संख्या क्यों? मुझे लगता है कि इस रणनीति (अधिकांश यादृच्छिक रणनीतियों की तरह) में छोटे शब्दों के लिए अधिक भिन्नता है ।
कर्नल पैनिक

@ कोलोनपेलनिक मुझे लगता है कि अनुमानों की कुल संख्या को गिनना बेहतर है, क्योंकि यह स्वाभाविक रूप से उत्तर में विभिन्न अक्षरों की संख्या को शामिल करता है। छोटे शब्दों के उच्चतर होने के बारे में आप सही हो सकते हैं। शायद दोहराव की संख्या तब तय की जानी चाहिए। हालांकि, मुझे लगता है कि 2N एक ठीक शुरुआत होगी।
dasblinkenlight

4

समान विषय के आसपास पिछली समान चर्चा: अंग्रेजी शब्द की कठिनाई का निर्धारण करें

मुझे लिंक के अंत में जवाब पसंद है ^। बच्चों के जल्लाद खेल के लिए, स्क्रैबल करता है जैसे एक दृष्टिकोण लागू करें।

प्रत्येक अक्षर के लिए एक बिंदु मान असाइन करें, फिर केवल अक्षरों को जोड़ें।


1
यह, आसान स्तरों पर दुर्लभ या अस्पष्ट शब्दों से बचने के साथ, अब के लिए आगे की तरह लगता है। एक जटिलता जिसका मैंने उल्लेख नहीं किया है कि शब्द विशाल शब्दकोशों से चुने गए हैं, जिनमें से परिभाषा के अनुसार शब्द का उपयोग शायद ही कभी किया जाना चाहिए :-)
grrussel

बिंदु मान काम कर सकते हैं, संभवतः पत्र आवृत्ति का उपयोग करके । हालाँकि, कुछ आमतौर पर इस्तेमाल किए जाने वाले शब्दों में वास्तव में विषम बिंदु मूल्य हो सकते हैं।
1

3

कुछ समय पहले मैंने स्पष्ट एल्गोरिथ्म का उपयोग करते हुए एक जल्लाद सॉल्वर लिखा था: सभी संभव शब्दों का एक प्रारंभिक शब्दकोश दिया, प्रत्येक मोड़ पर हम उस पत्र को चुनते हैं जो शब्दकोश में शेष सबसे अधिक शब्दों में होता है, फिर गैर-मिलान शब्दों को हटा दें (निर्भर करता है) प्रतिक्रिया) शब्दकोश से।

एल्गोरिथ्म इस रूप में बहुत सीधा नहीं है, क्योंकि अक्सर कई पत्र होते हैं जो प्रत्येक शब्दकोश में समान संख्या में होते हैं। इस मामले में, पत्र की पसंद एक शब्द के लिए कितने अनुमानों की आवश्यकता होती है, इससे एक महत्वपूर्ण अंतर हो सकता है। हम उस अधिकतम पत्र को ले जाते हैं जहाँ उस पत्र के स्थान के बारे में परिणामी जानकारी (यदि वास्तव में शब्द में है) प्रणाली के बारे में अधिकतम जानकारी देता है (अधिकतम जानकारी के साथ पत्र )। उदाहरण के लिए, यदि दो शेष संभावित शब्द 'विश्वकोश' और 'विश्वकोश' हैं, तो अक्षर 'c' में ई, n, y, l, o, p, e, d, i (यानी) के रूप में प्रदर्शित होने की समान संभावना है। शब्द में होने की गारंटी), लेकिन हमें पहले 'सी' के बारे में पूछना चाहिए क्योंकि इसमें एक गैर-सूचना जानकारी एन्ट्रापी है।

स्रोत (C ++, GPL) यहाँ है

इस सब का परिणाम शब्दों की एक सूची है, प्रत्येक के लिए आवश्यक अनुमानों की संख्या के साथ: कठिनाई । Txt (630KB)। इस एल्गोरिथ्म के लिए सबसे कठिन शब्द "इच्छा" है (14 असफल अनुमानों के साथ); i और डबल l का अनुमान बहुत जल्दी लगाया जाता है, लेकिन फिर विकल्पों में बिल, डिल, फिल, गिल, हिल, किल, मिल, पिल, रेल, तक, वसीयत शामिल हैं, और तब से एकमात्र विकल्प में प्रत्येक अक्षर का अनुमान लगाना है मोड़। कुछ हद तक जवाबी तौर पर, लंबे समय तक शब्दों का अनुमान बहुत जल्दी लगाया जाता है (ऐसा नहीं है कि उनमें से चुनने के लिए हो सकता है)।

बेशक, जल्लाद के एक मानव खेल में, मनोविज्ञान (और शब्दावली की चौड़ाई) इस एल्गोरिथम खातों की तुलना में बहुत अधिक भूमिका निभाता है ...


3

बस कर दो! शब्द के खिलाफ जल्लाद खेलते हैं। गिनती करें कि कितने बीहड़ (यानी गलत अनुमान) इसे हरा देते हैं।

आपको खेलने के लिए एक रणनीति की आवश्यकता होगी। यहां एक मानवीय (ईश) रणनीति है। शब्दकोश से, उन सभी शब्दों को मिटा दें जो अब तक प्रकट नहीं हुए हैं। शेष शब्दों के बीच सबसे अधिक बार पत्र लगता है।

यदि आपकी रणनीति यादृच्छिक होती है, तो आप अपने उपाय को अपेक्षित संख्या के रूप में परिभाषित कर सकते हैं, और अनुमान लगा सकते हैं कि अनुभवजन्य रूप से।


एक अन्य निर्धारक रणनीति, एक जल्लाद बॉट से मैंने कुछ साल पहले लिखा था। उस पत्र का अनुमान लगाएं जो अनुमान गलत होने की स्थिति में शेष शब्दों की संख्या को कम करता है (यानी सबसे खराब स्थिति को अनुकूलित करें)। आज मैं इस रणनीति को बहुत अधिक यांत्रिक होने के लिए नापसंद करता हूं, मैं ऊपर वाले को पसंद करता हूं।


Haha, मैं बस एक ही बात का सुझाव देने जा रहा था। लेकिन एक गंभीर संस्करण: एक साधारण बॉट लिखो जो कुछ सरल रणनीति का उपयोग करके अनुमान लगाता है, फिर बस एक शब्द से शब्दों पर एक संपूर्ण गुच्छा चलाएं।
तिखन जेल्विस

हाँ, यही मेरा मतलब है!
कर्नल पैनिक

2

सबसे पहले, निश्चित रूप से, आप अनूठे अक्षरों की एक सूची तैयार करेंगे। फिर आवृत्ति द्वारा क्रमबद्ध करें (अंग्रेजी या जो भी भाषा में - इसके लिए सूची हैं ), कम लगातार पत्रों के साथ एक उच्च कठिनाई होती है।

फिर आपको यह तय करने की आवश्यकता है कि क्या आप किसी अन्य योजना को जोड़कर, गुणा करके या उपयोग करके स्कोर को जोड़ते हैं।


(असल में, आप की आवश्यकता हो सकती नहीं प्रकार आवृत्ति द्वारा, लेकिन सिर्फ आवृत्ति स्कोर जमा हालांकि यह हो सकता है कि छँटाई कुछ और जानकारी प्रदान करता है -।। अगर यह आपके लिए कुछ कर रहा है देखने के लिए एक कोशिश के लायक)
गर्म licks

और आप किसी भी तरह से लेटर कोम्बोस के लिए हिसाब कर सकते हैं - यानी, अगर कोई क्यू है तो लगभग निश्चित रूप से एक यू है, और एक यू एक क्यू अधिक संभावना बनाता है। तो यह समझ में आ सकता है, उदाहरण के लिए, आवृत्ति POV से एक एकल पत्र के रूप में QU का संबंध है।
हॉट लिक्स

1

आप अस्वीकृत हो रहे हैं क्योंकि आप हमसे आपके लिए एक बहुत ही जटिल एल्गोरिदम बनाने के लिए कह रहे हैं।

आप केवल तीन सरणियाँ (आसान, मध्यम और कठिन) क्यों नहीं बनाते हैं और प्रत्येक को सौ या इतने शब्दों से आबाद करते हैं? इसमें लगभग 20 मिनट लगेंगे।

मैं वादा करता हूं कि आपके बच्चे कुछ सौ खेलों के माध्यम से जलने से पहले हैंग मैन से ऊब जाएंगे ...: डी


3
यह उस जटिल होना जरूरी नहीं है । उदाहरण के लिए, ब्लेंडर की टिप्पणी पर एक नज़र डालें। आपका उत्तर वास्तव में मूल प्रश्न को संबोधित नहीं करता है और विशेष रूप से उपयोगी नहीं है।
तिखन जेल्विस

4
"आप केवल तीन सरणियाँ (आसान, मध्यम, और कठिन) क्यों नहीं बनाते हैं और प्रत्येक को एक या सौ शब्दों के साथ आबाद करते हैं?": "समस्या को पहले से हल की गई विधि मानकर समस्या को हल करें" भी कहा जाता है।
पास्कल कूउक

आलोचना की गई, धन्यवाद ... मैं एक अकादमिक दृष्टिकोण से अनुमान लगाता हूं, आप बिल्कुल सही हैं, मेरा जवाब कुछ भी हल नहीं करता है। लेकिन व्यावहारिक दृष्टिकोण से, अर्थात्, अपने बच्चों के लिए जल्लाद खेल बनाने का सबसे आसान तरीका, मेरा जवाब इसे हल करता है, सस्ते और जल्दी से।
बीबी ५५

1
@PascalCuoq या आप कह सकते हैं कि यह "एल्गोरिदम की तुलना में उपयुक्त सूचियों को चुनने के लिए मनुष्य बेहतर हैं, यह मानकर समस्या को हल करना" है। यह देखते हुए कि प्रश्नकर्ता बच्चों के लिए एक खेल चाहता है, यह बेहतर लगता है कि "टोपी, बिल्ली, सूरज" आसान सूची में हैं, और "ज़ाइलोफोन, शून्य, स्कूल" कठिन सूची में हैं, भले ही वे कम अनुमानों के साथ मिलें। औसतन।
डैरेन कुक

1
@PascalCuoq एक जटिल समस्या को दरकिनार करते हुए कुछ भी गलत नहीं है हालांकि एक सरल समाधान अगर आप इसके साथ दूर हो सकते हैं। मज़े के लिए जटिल एल्गोरिदम बनाने में कुछ भी गलत नहीं है, लेकिन सरल समाधान कम से कम एक उल्लेख के योग्य है।
डेविड

1

खैर, संभावित रूप से इसमें बहुत सी चीजें शामिल हो सकती हैं:

  1. जैसा कि सभी ने कहा, व्यक्तिगत पत्रों की आवृत्ति;
  2. एक शब्द की लंबाई निश्चित रूप से गिननी चाहिए, लेकिन एक रैखिक तरीके से नहीं - एक लंबा शब्द यादृच्छिक अनुमानों को अक्षरों को हिट कर सकता है, जबकि एक छोटी को पाने के लिए कठिन हो सकता है;
  3. इसके अलावा, स्वयं शब्दों पर विचार किया जाना चाहिए - "बीप्राइट" एसओ पर लोगों के लिए एक शब्द हो सकता है, लेकिन शायद गैर तकनीकी आबादी के लिए नहीं।

वास्तव में, आप कई रणनीतियों को सह-विकसित करने की कोशिश कर सकते थे , उनमें से आधे शब्द का मूल्य तय करने के लिए, और उनमें से आधे खेल को जीतने की कोशिश के लिए। बाद वाला समूह स्कोर को अधिकतम करने की कोशिश करेगा, जबकि पहले वाला स्कोर कम से कम करने की कोशिश करेगा। थोड़ी देर बाद एक पैटर्न हो सकता है और फिर एक शब्द के मूल्य तय करने के लिए आधा आपको कुछ बेंचमार्क दे सकता है।


किसी शब्द के उपयोग की आवृत्ति एक अच्छा बिंदु है। आवृत्ति द्वारा अद्वितीय अक्षरों को स्कोर करने के आधार पर मेरा पहला प्रयास "यूटेटिक" एक "आसान" शब्द था। Google ngrams का भंडारण .googleapis.com/books/ngrams/books/datasetsv2.html आज सामान्य उपयोग में शब्दों की पहचान करने में मदद करता है।
ग्रससेल

1

शब्दों की सूची से शुरू करें और प्रत्येक के लिए एक Google खोज लॉन्च करें। बता दें कि हिट की संख्या शब्द की कठिनाई का एक (मोटे) प्रॉक्सी के रूप में कार्य करती है।

एक परिष्कृत संस्करण में आप एक थिसॉरस पर आधारित एक पर्यायवाची संबंध द्वारा शब्दों को समूहित करेंगे और Google खोजों के परिणामों की गणना करके किसी श्रेणी का सबसे कठिन शब्द निर्धारित करेंगे।

एन-ग्राम्स की धारणा को एक कदम आगे ले जाते हुए, एक शब्द की कठिनाई को गद्य में इसके सिलेबल्स की आवृत्ति द्वारा मूल्यांकन किया जा सकता है। निश्चित रूप से शब्दांश की गुणवत्ता पर निर्भर करता है। आपको शायद लेक्समेस और फंक्शन शब्दों (निर्धारक, संयुग्मन इत्यादि) और शब्द में संख्याओं की संख्या द्वारा सामान्यीकृत करना होगा (शब्द मुझे लगता है जैसे ओवरकिल जैसा लगता है ...)।


0

मुझे एक एल्गोरिथ्म के निर्माण का विचार पसंद है जो उपयोगकर्ताओं के आधार पर सीखता है और बदलता है। शुरुआत में, आप सूची के साथ आने के लिए सुझाए गए किसी भी एल्गोरिदम को लागू कर सकते हैं, फिर जितना अधिक लोग खेल खेलते हैं, आप अनुमानों की संख्या के आधार पर प्रत्येक शब्द के लिए एक वजन प्रदान करते हैं (जो कि लगातार ट्रैक किया जाता है और गणना की जाती है। )। यह जटिल लेकिन लोकप्रिय शब्दों को मुश्किल रेटिंग दिए जाने से रोकता है लेकिन लोगों को अच्छी तरह से जानता है।


0

स्क्रैबल बिंदुओं में किसी शब्द के प्रत्येक अक्षर के मूल्य की गणना करें: E = 1, D = 2, V = 4, X = 8 और इसी तरह। औसत अक्षर मान प्राप्त करने के लिए उन्हें जोड़ें और अक्षरों की संख्या से विभाजित करें, और शब्द स्कोर करने के लिए इसका उपयोग करें। एक बड़े शब्दकोश में प्रत्येक शब्द के लिए औसत की गणना करें, और चतुर्थक के बीच विराम बिंदु निर्धारित करें। सबसे कम चतुर्थक "आसान" में शब्दों को कॉल करें, दो मध्यम चतुर्थक "मध्यम" में शब्द, और उच्चतम चतुर्थक "कठिन" में शब्द।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.