"সহজ", "মাঝারি", বা "হার্ড" হিসাবে হ্যাঙ্গম্যানের অসুবিধা স্তরের শব্দগুলির শ্রেণিবদ্ধকরণের জন্য অ্যালগরিদম


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
আমি আপনাকে এটির জন্য একটি ওয়েব অনুসন্ধান করার পরামর্শ দিচ্ছি - সম্ভবত এখানে আলগোরিদম বা অভিধান রয়েছে যা শব্দের জটিলতার প্রতিবেদন / প্রতিবেদন করতে পারে port আমি জানি আরও দীর্ঘ পাঠ্য রয়েছে।
হট লিক্স

3
সম্পর্কিত: youtube.com/watch?v=bBLm9P-ph6U (কিউআই এক্সএল - হ্যাঙ্গম্যানের মধ্যে অনুমান করা সবচেয়ে কঠিন শব্দ)
ক্লজ জর্জেনসেন

5
আপনি যা-ই করেন না কেন, এক্সটিনিশনস্পেক্ট্রোফোটোপলারিস্টকোসিসিওকুলোগ্রাগোগ্রোগিরনেটোমিটার অন্তর্ভুক্ত করবেন।
হট লিকস

2
যে সকল ব্যবহারকারী রুবির সাথে পরিচিত নন, তাদের জন্য সম্ভবত আপনি ব্যাখ্যা করতে চান যে আপনার পদ্ধতির প্রথম লাইনটি কী করে? n = w.chars.to_a.uniq.lengthএটি কি অনন্য বর্ণের সংখ্যা গণনা করে?
টি Nguyen

উত্তর:


91

1। পরিচিতি

এই সমস্যাটি নিয়মতান্ত্রিকভাবে পৌঁছানোর জন্য এখানে একটি উপায়: আপনার যদি একটি অ্যালগরিদম থাকে যা হ্যাঙ্গম্যান ভালভাবে বাজায়, তবে আপনি প্রতিটি শব্দটির অসুবিধাকে সেই ভুল অনুমানের সংখ্যা হিসাবে নিতে পারেন যে শব্দটি অনুমান করে যদি আপনার প্রোগ্রামটি গ্রহণ করে।

২. হ্যাঙ্গম্যান কৌশল বাদে

কিছু অন্যান্য উত্তর এবং মন্তব্যে অন্তর্নিহিত একটি ধারণা রয়েছে যে দ্রোকারের অনুকূল কৌশলটি তাদের সিদ্ধান্তগুলি ইংরেজিতে বর্ণগুলির ফ্রিকোয়েন্সি বা কিছু কর্পাসের শব্দের ফ্রিকোয়েন্সি ভিত্তিতে করা উচিত। এটি একটি প্ররোচক ধারণা, তবে এটি একেবারেই সঠিক নয়। সমাধানকারীর দ্বারা নির্বাচিত শব্দের বন্টনকে সঠিকভাবে মডেল করা হলে সল্ভারটি সবচেয়ে ভাল কাজ করে এবং একটি মানব সেটার তাদের বিরলতা বা ঘন ঘন ব্যবহৃত অক্ষরের পরিহারের ভিত্তিতে শব্দগুলি বেছে নিতে পারে। উদাহরণ হিসেবে বলা যায়, যদিও Eইংরেজিতে সবচেয়ে ঘন ঘন ব্যবহৃত অক্ষর, যদি সেটার সবসময় শব্দ থেকে চয়ন করে JUGFUL, RHYTHM, SYZYGY, এবং ZYTHUMতারপর, একটি নিখুঁত সমাধানকারী মনন দ্বারা শুরু হয় না 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. ওয়ার্ডলিস্ট পছন্দ

অবশ্যই আপনার বাচ্চার জন্য ওয়ার্ডলিস্টগুলি প্রস্তুত করার সময় আপনি আপনার কম্পিউটারের সিস্টেম অভিধান দিয়ে শুরু করবেন না, আপনি এমন শব্দের একটি তালিকা দিয়ে শুরু করবেন যা আপনি মনে করেন যে তারা সম্ভবত জানেন। উদাহরণস্বরূপ, আপনি বিভিন্ন ইংরেজি কর্পোরায় সর্বাধিক ব্যবহৃত শব্দগুলির উইকশনারি তালিকাগুলির উপর নজর রাখতে পারেন ।

উদাহরণস্বরূপ, ২০০ Gu সালের হিসাবে প্রজেক্ট গুটেনবার্গের ১০,০০০ সর্বাধিক প্রচলিত শব্দের মধ্যে ১,7০০ ছয় অক্ষরের শব্দের মধ্যে দশটি সবচেয়ে কঠিন দশটি হ'ল:

[(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
ঘন ঘন ব্যবহৃত শব্দ তালিকায় ভাল কল Good invokeit.wordpress.com / ফ্রিকোয়েন্সি-ওয়ার্ড-তালিকাগুলিতে ইংরাজী এবং সুইডিশ রয়েছে, দুটোই পেয়ে খুব সুন্দর।
গ্রাসেল

1
আমি প্রত্যাশা করব বা তার bingleচেয়েও বেশি রেট দেওয়া হবে - এটি একটি কম সাধারণ শব্দ এবং এটি একটি কম সাধারণ চিঠিsingletinglebingle b
ব্লুরাজা - ড্যানি ফ্লুঘুফুট

5
শীতল অ্যালগরিদম (এবং কোড লেখার আগে ইংরেজিতে ব্যাখ্যা করার জন্য ধন্যবাদ!) তবে আমি মনে করি আপনার ভুল অনুমানের সংখ্যা হ্রাস করার চেষ্টা করা উচিত । সুতরাং, অভিধানটি যদি [ব্যাট, বাজি, টুপি, গরম, ইয়াম] হয় তবে আমি 'টি' (বি, এ বা এইচ এর পরিবর্তে) অনুমান করব। আমি যদি ঠিকই থাকি তবে এতে আমার কোনও মূল্য লাগে না। আমি যদি ভুল হয়ে থাকি তবে কেবল 'ইয়াম' থেকে যায়।
কর্নেল আতঙ্ক

8
এটি সত্যিই দুর্দান্ত একটি অ্যালগরিদম, তবে আমি মনে করি যে মানব খেলোয়াড়রা যে কৌশলটি সম্পাদন করতে পারে তা প্রতিফলিত করে না - প্রতিটি একক শব্দকে জানার পরিবর্তে মানুষ বেশিরভাগ সাধারণ শব্দকে (সম্ভাব্যভাবে) স্বীকৃতি দিতে চলেছে এবং অন্যথায় প্রত্যয়গুলি সনাক্ত করার চেষ্টা করবে এবং উপসর্গ (যেমন আয়ন, আইএনএন) এবং ব্যর্থ যে কেবল সাধারণ অক্ষর অনুমান করে (স্বর দিয়ে শুরু করে, তারপরে t / r / s / n / ইত্যাদি)। কীভাবে এটি কোড করবেন তা নিশ্চিত নন তবে এটি সম্পর্কে ভাবার বিষয় :)
পাতাসু

2
দুর্দান্ত বিশ্লেষণ। @ পাতাসু উল্লেখ করেছেন যে, এটিকে আরও আরও উন্নত করার পরবর্তী পদক্ষেপটি কেবল সাধারণ শব্দের একটি অভিধান নেওয়ার চেয়ে শব্দের একটি সম্পূর্ণ অভিধান নেওয়া কিন্তু সাধারণতার সম্পর্কে টীকাগুলি সহ, এবং কেবলমাত্র শব্দটির সাধারণতার সাথে তাত্পর্যপূর্ণভাবে ওজন করা উচিত চিঠি বিতরণ-অসুবিধা। তবে এটি কেবল alচ্ছিক উন্নতির জন্য - এটি ইতিমধ্যে একটি দুর্দান্ত সমাধান হিসাবে এটি দাঁড়িয়েছে।
বেন লি

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 না কেন? আমি যদি আরব্রিট্রি নম্বর রাখি তবে কী হবে?
Pavan

@ পাভান: আসলে কিছুই নেই। সমস্ত শব্দগুলির স্কোর একই পরিমাণে স্থানান্তরিত হবে।
ব্লেন্ডার

হ্যাঁ আমি যখন একটি অনলাইন পাইথন এক্সিকিউটারের সাথে চারপাশে খেলছিলাম তখন আমি শিফটটি লক্ষ্য করেছি। আমি কিছু লক্ষ্য করেছি এবং এটি হ'ল আমি যখন ঘৃণার তুলনায় ফ্যানাস্টাস্টিকের মতো কিছু টাইপ করি, তখন ফ্যান্টাস্টিকাল এমন শব্দ হওয়া সত্ত্বেও ঘৃণিতের ফ্যানাস্টাস্টিকের চেয়ে কম মান থাকে তবে এইভাবে একটি শব্দ গেমের একটি নিম্নতর স্তরে উপস্থিত হওয়া উচিত। এটি আমাকে বুঝতে পেরেছিল যে অসুবিধাগুলি বিষয়বস্তুযুক্ত, তবে আমার মনে হয়েছে যে কোন শব্দটির অন্যের উপর উচ্চারণ করা সবচেয়ে বেশি কঠিন, তা রূপরেখার জন্য কিছুটা গবেষণা করা উচিত? আপনি কি আমাকে এই ধরনের একটি অধ্যয়ন pls নির্দেশ করতে পারেন?
Pavan

বা কমপক্ষে এ জাতীয় গবেষণাটি কী বলা হবে যেহেতু প্রথম চেষ্টাতে শব্দটির বানান ভুল করে ফেলেছে এমন শতাংশের সাথে শব্দের সংকলন সন্ধান করতে আমার অসুবিধা হচ্ছে - যা এখন আমি পরে করছি।
Pavan

9

আপনি কোনও শব্দের অসুবিধা অনুমান করতে মন্টি কার্লো পদ্ধতিটি ব্যবহার করতে পারেন :

  • আপনার টার্গেট ল্যাঙ্গুয়েজে চিঠির ফ্রিকোয়েন্সি দ্বারা ভারিত প্রতিবার একটি এলোমেলো চিঠিটি অনুমান করে একটি গেম অনুকরণ করুন এবং এটি সমাধানে পৌঁছাতে আপনার এলোমেলো খেলোয়াড়কে কতটা অনুমান করেছে তা গণনা করুন। নোট করুন যেহেতু প্রতিটি অনুমান একটি চিঠি অপসারণ করে, তাই এই প্রক্রিয়া সীমাবদ্ধ, এবং এটি সংখ্যার 1 থেকে 26 পর্যন্ত একটি সংখ্যা দেয়।
  • এই প্রক্রিয়া 2*Nবার পুনরাবৃত্তি করুন , আপনার শব্দে অনন্য অক্ষরের Nসংখ্যা কোথায় ,
  • 2*Nরানের ফলাফলের গড় গড় দিয়ে স্কোর গণনা করুন ,
  • জটিলতার স্তরটি নির্ধারণ করুন: দশেরও কম স্কোর একটি সহজ শব্দকে নির্দেশ করে এবং ষোলোর উপরে স্কোরগুলি একটি কঠিন শব্দকে নির্দেশ করে; অন্য সব কিছু মাঝারি।

2
আমি মনে করি আপনার কেবলমাত্র ভুল অনুমানগুলি গণনা করা উচিত । সঠিক অনুমানের জন্য কোনও জরিমানা নেই।
কর্নেল আতঙ্ক

কেন পুনরাবৃত্তি সংখ্যা? আমি মনে করি এই কৌশলটি (সবচেয়ে র্যান্ডমাইজড কৌশলগুলির মতো) ছোট শব্দগুলির জন্য আরও বেশি বৈকল্পিক রয়েছে ।
কর্নেল আতঙ্ক

@ কলোনেলপ্যানিক আমি মনে করি মোট অনুমানের সংখ্যা গণনা করা ভাল, কারণ এটি উত্তরে স্বতন্ত্র বর্ণগুলির সংখ্যা স্বাভাবিকভাবেই অন্তর্ভুক্ত করে। আপনি সংক্ষিপ্ত শব্দ উচ্চতর হতে পারে তার বৈকল্পিক সম্পর্কে সঠিক হতে পারে। সম্ভবত পুনরাবৃত্তি সংখ্যা নির্দিষ্ট করা উচিত। তবে আমি মনে করি 2N শুরু করা হবে an
ডাসব্লিংকনলাইট

4

একই বিষয়ে পূর্ববর্তী অনুরূপ আলোচনা: একটি ইংরেজি শব্দের অসুবিধা নির্ধারণ করুন

আমি লিঙ্ক ^ এর শেষে উত্তরটি পছন্দ করি ^ বাচ্চাদের হ্যাঙ্গম্যান গেমের জন্য, স্ক্র্যাবলের মতো কেবল একটি পদ্ধতির প্রয়োগ করুন।

প্রতিটি অক্ষরে একটি পয়েন্ট মান নির্ধারণ করুন, তারপরে কেবল অক্ষরগুলি যুক্ত করুন।


1
এটি একত্রে সহজ স্তরের বিরল বা অস্পষ্ট শব্দ এড়ানোর সাথে সাথে আপাতত এগিয়ে যাওয়ার পথে বলে মনে হচ্ছে। একটি জটিলতা যা আমি উল্লেখ করিনি তা হ'ল শব্দগুলি বিশাল অভিধান থেকে বেছে নেওয়া হয়েছে, যার বেশিরভাগ সংজ্ঞাটি খুব কমই ব্যবহার করা উচিত :-)
গ্রাসেল

পয়েন্ট মানগুলি কাজ করতে পারে, সম্ভবত অক্ষরের ফ্রিকোয়েন্সি ব্যবহার করে । যদিও, কিছু সাধারণত ব্যবহৃত শব্দের আসলে অদ্ভুতভাবে উচ্চ পয়েন্টের মান থাকতে পারে।
নিউক্লিয়ারম্যান

3

কিছুক্ষণ আগে আমি স্পষ্ট অ্যালগরিদম ব্যবহার করে একটি হ্যাঙ্গম্যান সলভার লিখেছিলাম: সমস্ত সম্ভাব্য শব্দের একটি প্রাথমিক অভিধান দেওয়া হয়েছে, প্রতিটি মোড়কে আমরা অভিধানে থাকা বেশিরভাগ শব্দের মধ্যে যে অক্ষরটি উপস্থিত হয় তা চয়ন করি, তারপরে মিল না পাওয়া শব্দগুলি সরিয়ে ফেলুন (উপর নির্ভর করে প্রতিক্রিয়া) অভিধান থেকে।

অ্যালগরিদম এটির মতো সোজা সোজা নয়, কারণ প্রায়শই বেশ কয়েকটি বর্ণ রয়েছে যা প্রতিটি অভিধানে একই সংখ্যায় শব্দের সাথে দেখা দেয়। এই ক্ষেত্রে, চিঠির পছন্দ একটি শব্দের জন্য কত অনুমান প্রয়োজন তা উল্লেখযোগ্য পার্থক্য করতে পারে। আমরা সেই ম্যাক্সিমাকে বাছাই করি যেখানে সেই চিঠির স্থান নির্ধারণের ফলাফল (যদি প্রকৃতপক্ষে শব্দটিতে থাকে) সিস্টেম সম্পর্কে সর্বাধিক তথ্য দেয় (সর্বাধিক তথ্য এনট্রপি সহ চিঠি )। উদাহরণস্বরূপ, যদি দুটি সম্ভাব্য শব্দগুলি 'এনসাইক্লোপিডিয়া' এবং 'এনসাইক্লোপিডিক' হয় তবে 'গ' বর্ণটি ই, এন, ওয়াই, এল, ও, পি, ই, ডি, আই হিসাবে উপস্থিত হওয়ার একই সম্ভাবনা রয়েছে (অর্থাত এটি হ'ল) শব্দটিতে থাকার নিশ্চয়তা রয়েছে), তবে আমাদের প্রথমে 'সি' সম্পর্কে জিজ্ঞাসা করা উচিত কারণ এটির ননজারো তথ্য এনট্রপি রয়েছে।

উত্স (সি ++, জিপিএল) এখানে রয়েছে

: এই সব ফলাফলের জন্য প্রতিটি এক প্রয়োজনীয় অনুমান সংখ্যা সঙ্গে, শব্দের একটি তালিকা দেওয়া হল difficulty.txt (630KB)। এই অ্যালগরিদমের সন্ধানের জন্য সবচেয়ে শক্ত শব্দটি হ'ল "হবে" (14 ব্যর্থ অনুমান সহ); আই এবং ডাবল এলটি খুব দ্রুত অনুমান করা হয়, তবে তারপরে অপশনগুলির মধ্যে বিল, ডিল, ফিল, গিল, হিল, কিল, মিল, পিল, রিল, অবধি, উইল অন্তর্ভুক্ত থাকে এবং তারপরে কেবলমাত্র প্রতিটি অক্ষরের অনুমান করা যায় চালু করুন। কিছুটা বিপরীতভাবে, দীর্ঘতর শব্দগুলি অনেক বেশি দ্রুত অনুমান করা হয় (কেবলমাত্র তাদের মধ্যে এটি বেছে নিতে পারে না)।

অবশ্যই, হ্যাঙ্গম্যানের একটি মানব খেলায় মনোবিজ্ঞান (এবং শব্দভাণ্ডারের প্রশস্ততা) এই অ্যালগরিদম অ্যাকাউন্টগুলির চেয়ে অনেক বড় ভূমিকা পালন করে ...


3

এটা করতে! শব্দের বিপরীতে হ্যাঙ্গম্যান খেলুন। এটি মারতে কতটি জব্দ (যেমন ভুল অনুমান) লাগে তা গণনা করুন।

আপনার খেলতে কৌশল দরকার। এখানে একটি মানবিক কৌশল রয়েছে (ইশ)। অভিধান থেকে, এখনও পর্যন্ত প্রকাশের সাথে খাপ খায় না এমন সমস্ত শব্দ ব্যবহার করুন। বাকী শব্দের মধ্যে চিঠিটি সবচেয়ে ঘন ঘন অনুমান করুন।

যদি আপনার কৌশলটি এলোমেলোভাবে করা হয় তবে আপনি জরিপের প্রত্যাশিত সংখ্যার হিসাবে আপনার পরিমাপটিকে সংজ্ঞায়িত করতে পারেন এবং অনুমানগতভাবে এটি অনুমান করতে পারেন।


হ্যাঙ্গম্যান বট থেকে আমি কয়েক বছর আগে লিখেছিলাম আরেকটি নির্বিচার কৌশল । অনুমানটি ভুল (যেমন, সবচেয়ে খারাপ ক্ষেত্রে অনুকূলিত করা) ক্ষেত্রে বাকী শব্দের সংখ্যা হ্রাস করে এমন চিঠিটি অনুমান করুন। আজ আমি খুব যান্ত্রিক হওয়ার জন্য এই কৌশলটি অপছন্দ করি, আমি উপরেরটিটিকে পছন্দ করি।


হাহা, আমি ঠিক একই জিনিস পরামর্শ যাচ্ছিলাম। তবে একটি গুরুতর সংস্করণ: একটি সাধারণ বট লিখুন যা কিছু সাধারণ কৌশল ব্যবহার করে অনুমান করে, তারপরে একটি অভিধান থেকে শব্দের উপরে পুরো সময়টি চালান।
টিখন জেলভিস

হ্যাঁ এটাই আমি বোঝাতে চাইছি!
কর্নেল আতঙ্ক

2

প্রথমে অবশ্যই আপনি অনন্য বর্ণের একটি তালিকা তৈরি করেছেন। তারপরে ফ্রিকোয়েন্সি অনুসারে বাছাই করুন (ইংরেজী বা যে কোনও ভাষায় - এর জন্য তালিকা রয়েছে ), কম ঘন ঘন বর্ণের উচ্চতর অসুবিধা রয়েছে difficulty

তারপরে আপনাকে সিদ্ধান্ত নেওয়া দরকার যে আপনি যোগ, গুণ বা অন্য কোনও স্কিম ব্যবহার করে স্কোরগুলি একত্রিত করছেন কিনা।


(প্রকৃতপক্ষে, আপনাকে ফ্রিকোয়েন্সি অনুসারে বাছাই করার প্রয়োজন হতে পারে না তবে কেবল ফ্রিকোয়েন্সি স্কোরগুলি সংগ্রহ করতে পারে Though যদিও এটি হতে পারে যে বাছাই করা আরও কিছু তথ্য সরবরাহ করে - এটি আপনার জন্য কিছু মনে করে কিনা তা দেখার চেষ্টা করা উচিত))
হট লিক্স

এবং আপনি কোনওভাবে লেটার কম্বোসের জন্য অ্যাকাউন্ট করতে চাইতে পারেন - অর্থাত্ যদি কোনও প্রশ্ন থাকে তবে অবশ্যই একটি ইউ থাকে এবং ইউ একটি সম্ভবত আরও একটি Q তৈরি করে। সুতরাং এটি বোঝার অর্থ হতে পারে, যেমন, একটি ফ্রিকোয়েন্সি পিওভের কাছ থেকে ক্যুটিকে একটি অক্ষর হিসাবে বিবেচনা করুন।
হট লিকস

1

আপনি হতাশ হচ্ছেন কারণ আপনি আমাদের জন্য একটি খুব জটিল অ্যালগরিদম তৈরি করতে বলছেন।

আপনি কেন কেবল তিনটি অ্যারে (সহজ, মাঝারি এবং শক্ত) তৈরি করে না এবং প্রতিটিকে একশত বা এত শব্দ দিয়ে পপুলেট করবেন না কেন? এটি প্রায় 20 মিনিট সময় নিতে পারে।

আমি প্রতিশ্রুতি দিচ্ছি যে আপনার বাচ্চারা কয়েকশো গেমের মাধ্যমে আগুন নেওয়ার অনেক আগেই হ্যাং ম্যানকে বিরক্ত করবে ...: ডি


3
এটি এত জটিল হতে হবে না । উদাহরণস্বরূপ, ব্লেন্ডারের মন্তব্যটি দেখুন। আপনার উত্তরটি সত্যই মূল প্রশ্নের সমাধান করে না এবং বিশেষভাবে কার্যকর নয়।
টিখন জেলভিস

4
“আপনি কেবল তিনটি অ্যারে (সহজ, মাঝারি এবং শক্ত) তৈরি করে না এবং প্রতিটিকে একশ বা এত শব্দ দিয়ে পপুলেশন করেন না কেন?”: “সমস্যাটি ইতিমধ্যে সমাধান হয়ে গেছে ধরে ধরে সমস্যার সমাধান করুন” পদ্ধতিও বলা হয়।
পাস্কেল কুয়াক

সমালোচনা গ্রহণ করা হয়েছে, আপনাকে ধন্যবাদ ... আমি একাডেমিক দৃষ্টিকোণ থেকে অনুমান করি, আপনি একদম ঠিক বলেছেন, আমার উত্তর কিছুই সমাধান করে না। তবে ব্যবহারিক দৃষ্টিকোণ থেকে, এটি হ'ল আপনার বাচ্চাদের জন্য একটি হ্যাঙ্গম্যান খেলা তৈরির সবচেয়ে সহজ উপায়, আমার উত্তরটি সস্তার ও দ্রুত সমাধান করে।
বিবাগি

1
@ প্যাসালকুয়াক বা আপনি বলতে পারেন যে "অ্যালগরিদমের চেয়ে উপযুক্ত তালিকা বাছাই করার ক্ষেত্রে মানুষ আরও ভাল" ধরে নিয়ে সমস্যার সমাধান করার উপায় approach প্রদত্ত প্রশ্নকর্তা বাচ্চাদের জন্য একটি খেলা চান, এটি আরও ভাল বলে মনে হচ্ছে যে "টুপি, বিড়াল, সূর্য" সহজ তালিকায় রয়েছে এবং "জাইলোফোন, কিছুই নয়, স্কুল" কঠিন তালিকায় রয়েছে, এমনকি যদি সেগুলি কম অনুমানের সাথে পাওয়া যায় তবে গড়.
ড্যারেন কুক

1
@ পাসলকুয়াক একটি জটিল সমস্যা বাইপাস করার কোনও সমস্যা নেই যদিও আপনি যদি এটিকে সরিয়ে নিতে পারেন তবে একটি সহজ সমাধান। মজাদার জন্য জটিল অ্যালগরিদম তৈরিতে কোনও ভুল নেই, তবে সহজ সমাধানটি অন্তত একটি উল্লেখের দাবিদার।
ডেভিড

1

ঠিক আছে, সম্ভাব্যভাবে এতে অনেক কিছু জড়িত থাকতে পারে:

  1. সবাই যেমন বলেছিল, স্বতন্ত্র চিঠির ফ্রিকোয়েন্সি;
  2. একটি শব্দের দৈর্ঘ্য অবশ্যই গণনা করা উচিত তবে লিনিয়ার উপায়ে নয় - দীর্ঘ শব্দটি এলোমেলো অনুমানগুলি অক্ষরগুলিতে আঘাত করতে পারে, তবে একটি সংক্ষিপ্ত শব্দ পাওয়া শক্ত হতে পারে;
  3. এছাড়াও, শব্দগুলি নিজেরাই বিবেচনা করা উচিত - "দ্বিপক্ষীয়" এসও-র লোকদের জন্য একটি শব্দ হতে পারে, তবে প্রযুক্তিগত জনগণের জন্য নাও হতে পারে।

আসলে, আপনি বেশ কয়েকটি কৌশল সহ-বিকাশের চেষ্টা করতে পারেন , তার অর্ধেকটি কোনও শব্দের মূল্য নির্ধারণ করার জন্য এবং তাদের অর্ধেক গেম জয়ের চেষ্টা করার জন্য। প্রথম দলটি স্কোরটি সর্বাধিক করার চেষ্টা করবে এবং প্রথমটি স্কোরকে হ্রাস করার চেষ্টা করবে। কিছুক্ষণ পরে একটি প্যাটার্ন থাকতে পারে এবং তারপরে কোনও শব্দের মূল্য নির্ধারণের অর্ধেকটি আপনাকে কিছু মানদণ্ড দিতে পারে।


একটি শব্দের ব্যবহারের ফ্রিকোয়েন্সি একটি ভাল পয়েন্ট is ফ্রিকোয়েন্সি অনুসারে অনন্য অক্ষরগুলি স্কোরের উপর ভিত্তি করে আমার প্রথম প্রচেষ্টা "ইউটেকটিক" একটি "সহজ" শব্দ ছিল। গুগল ngrams storage.googleapis.com/books/ngrams/books/datasetsv2.html বলে মনে হয় সম্ভবত সাহায্য সাধারণ ব্যবহার, আজ শব্দের শনাক্ত করে।
গ্রাসেল

1

শব্দের একটি তালিকা দিয়ে শুরু করুন এবং প্রতিটির জন্য একটি গুগল অনুসন্ধান চালু করুন। হিটের সংখ্যাটি শব্দটির অসুবিধার একটি (মোটা) প্রক্সি হিসাবে পরিবেশন করুন।

একটি পরিমার্জিত সংস্করণে আপনি থিসৌরসের উপর ভিত্তি করে রিলেশন সম্পর্কিত প্রতিশব্দ দ্বারা শব্দগুলিকে গ্রুপ করবেন এবং গুগল অনুসন্ধানের ফলাফল গণনা করে কোনও বিভাগের সবচেয়ে কঠিন শব্দটি নির্ধারণ করবেন।

এন-গ্র্যামের ধারণাটি আরও একধাপ এগিয়ে নিয়ে যাওয়া, কোনও শব্দের অসুবিধা গদ্যের উচ্চারণগুলির ফ্রিকোয়েন্সি দ্বারা নির্ধারণ করা যেতে পারে। অবশ্যই উচ্চারণের পরিসংখ্যানের মানের উপর নির্ভর করে। আপনাকে সম্ভবত লেক্সেমস এবং ফাংশন শব্দের মধ্যে নির্ধারিত করতে হবে (নির্ধারক, কনজাকশন ইত্যাদি) এবং শব্দটির শব্দের সংখ্যার দ্বারা সাধারণকরণ (আই লিখিতরূপে ওভারকিলের মতো মনে হয়)।


0

আমি ব্যবহারকারীদের উপর নির্ভর করে শিখেছি এবং পরিবর্তন করে এমন একটি অ্যালগরিদম তৈরির ধারণাটি পছন্দ করি। শুরুতে, আপনি তালিকাটি উপস্থিত হওয়ার প্রস্তাবিত যে কোনও অ্যালগোরিদম প্রয়োগ করতে পারেন, তারপরে যত বেশি লোকেরা খেলা খেলেন, অনুমানের সংখ্যার উপর নির্ভর করে আপনি প্রতিটি শব্দের একটি ওজন নির্ধারণ করেন (যা নিয়মিতভাবে ট্র্যাকও করা হয় এবং গণনা করা হয়) )। এটি জটিল তবে জনপ্রিয় শব্দের বিষয়টিকে জটিল রেটিং দেওয়া থেকে বিরত রাখে তবে তা মানুষের কাছে সুপরিচিত।


0

স্ক্র্যাবল পয়েন্টগুলিতে একটি শব্দের প্রতিটি অক্ষরের মান গণনা করুন: ই = 1, ডি = 2, ভি = 4, এক্স = 8 এবং আরও। এগুলি যুক্ত করুন এবং গড় অক্ষরের মান পেতে অক্ষরের সংখ্যা দ্বারা ভাগ করুন এবং শব্দটি স্কোর করতে এটি ব্যবহার করুন। একটি বৃহত অভিধানে প্রতিটি শব্দের গড় গড় গণনা করুন এবং চতুর্ভুজগুলির মধ্যে ব্রেক পয়েন্ট নির্ধারণ করুন। সর্বনিম্ন চৌকোটি "সহজ" শব্দগুলিকে, দুটি মাঝের চৌকোটিশগুলিকে "মাঝারি" শব্দ এবং সর্বাধিক চৌম্বক "শক্ত" শব্দগুলিকে কল করুন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.