এটি বাচ্চাদের জন্য ক্রিয়াকলাপের সেটগুলির একটি শব্দ গেম। নিয়মের নীচে / usr / শেয়ার / ডিক / শব্দ ব্যবহার করে সেরা ট্রিপলেট সন্ধান করার কোড রয়েছে code আমি ভেবেছিলাম এটি একটি আকর্ষণীয় অপ্টিমাইজেশান সমস্যা ছিল এবং আমি ভাবছি যে লোকেরা উন্নতি পেতে পারে।
বিধি
- নীচের প্রতিটি সেট থেকে একটি চিঠি চয়ন করুন।
- নির্বাচিত বর্ণগুলি (এবং অন্য কোনও) ব্যবহার করে একটি শব্দ চয়ন করুন।
- শব্দটি স্কোর করুন।
- নির্বাচিত সেট থেকে প্রতিটি অক্ষর সেট সহ প্রদর্শিত নম্বর পায় (অন্তর্ভুক্ত পুনরাবৃত্তি করে)।
AEIOU
গণনা 0- অন্যান্য সমস্ত অক্ষর -2
- উপরের ১-২ পদক্ষেপের পুনরাবৃত্তি করুন (পদক্ষেপ 1 এ পুনরায় ব্যবহারের অক্ষর নেই) আরও দু'বার।
- ফাইনাল স্কোর তিনটি শব্দ স্কোরের যোগফল।
সেট
(1 স্কোর 1 পয়েন্ট সেট করুন, 2 স্কোর 2 পয়েন্ট সেট করুন)
- LTN
- যদি RDS
- GBM
- CHP র
- FWV
- YKJ
- QXZ
কোড:
from itertools import permutations
import numpy as np
points = {'LTN' : 1,
'RDS' : 2,
'GBM' : 3,
'CHP' : 4,
'FWV' : 5,
'YKJ' : 6,
'QXZ' : 7}
def tonum(word):
word_array = np.zeros(26, dtype=np.int)
for l in word:
word_array[ord(l) - ord('A')] += 1
return word_array.reshape((26, 1))
def to_score_array(letters):
score_array = np.zeros(26, dtype=np.int) - 2
for v in 'AEIOU':
score_array[ord(v) - ord('A')] = 0
for idx, l in enumerate(letters):
score_array[ord(l) - ord('A')] = idx + 1
return np.matrix(score_array.reshape(1, 26))
def find_best_words():
wlist = [l.strip().upper() for l in open('/usr/share/dict/words') if l[0].lower() == l[0]]
wlist = [l for l in wlist if len(l) > 4]
orig = [l for l in wlist]
for rep in 'AEIOU':
wlist = [l.replace(rep, '') for l in wlist]
wlist = np.hstack([tonum(w) for w in wlist])
best = 0
ct = 0
bestwords = ()
for c1 in ['LTN']:
for c2 in permutations('RDS'):
for c3 in permutations('GBM'):
for c4 in permutations('CHP'):
for c5 in permutations('FWV'):
for c6 in permutations('YJK'):
for c7 in permutations('QZX'):
vals = [to_score_array(''.join(s)) for s in zip(c1, c2, c3, c4, c5, c6, c7)]
ct += 1
print ct, 6**6
scores1 = (vals[0] * wlist).A.flatten()
scores2 = (vals[1] * wlist).A.flatten()
scores3 = (vals[2] * wlist).A.flatten()
m1 = max(scores1)
m2 = max(scores2)
m3 = max(scores3)
if m1 + m2 + m3 > best:
print orig[scores1.argmax()], orig[scores2.argmax()], orig[scores3.argmax()], m1 + m2 + m3
best = m1 + m2 + m3
bestwords = (orig[scores1.argmax()], orig[scores2.argmax()], orig[scores3.argmax()])
return bestwords, best
if __name__ == '__main__':
import timeit
print timeit.timeit('print find_best_words()', 'from __main__ import find_best_words', number=1)
ম্যাট্রিক্স সংস্করণটি হ'ল খাঁটি অজগরটিতে একটি লেখার পরে আমি অভিধান নিয়ে এসেছি (অভিধানগুলি ব্যবহার করে এবং প্রতিটি শব্দকে স্বাধীনভাবে স্কোর করে), এবং অন্যটি মায়ারিক্সের পরিবর্তে ম্যাট্রিক্স গুণনের পরিবর্তে সূচক ব্যবহার করি।
পরবর্তী অপ্টিমাইজেশন হ'ল সম্পূর্ণভাবে স্কোরিং থেকে স্বরগুলি সরিয়ে ফেলা (এবং একটি পরিবর্তিত ord()
ফাংশন ব্যবহার করুন ) তবে আমি আরও অবাক হই যে আরও দ্রুত পন্থা রয়েছে কিনা।
সম্পাদনা : টাইমাইট.টাইমাইট কোড যুক্ত হয়েছে
সম্পাদনা : আমি একটি অনুগ্রহ যুক্ত করছি, যা আমি সবচেয়ে বেশি পছন্দ করি তার যেকোন উন্নতি করব (বা সম্ভবত একাধিক উত্তর, তবে যদি বিষয়টি হয় তবে আমাকে আরও কিছু খ্যাতি অর্জন করতে হবে)।