আমি যদি কোড গল্ফিং সঠিকভাবে করি তবে আমি আগ্রহী। আমি পাইথনের একটি একক বিবৃতিতে একটি ছোট হ্যাশিং প্রোগ্রাম করার জন্য চ্যালেঞ্জটি সেট করেছিলাম। আমি প্রথম দিয়ে শুরু করেছি:
from itertools import permutations
from string import ascii_lowercase
from random import sample
def test():
chars = sample(ascii_lowercase, 9)
sums = list(map(h, permutations(chars)))
if len(set(sums)) == len(sums):
print("unique results for permutations of given string")
else:
print("duplicate entries present in test results")
def h(s):
r = 0
for i in range(len(s)):
r += ord(s[i]) << (i * len(s))
return r
test()
আমি তখন ফাংশনটি পুনরাবৃত্ত করে:
def h(s, i=0):
if i < len(s) - 1: return h(s, i+1) + ord(s[i]) << (i * len(s))
else: return ord(s[i]) << (i * len(s))
কোডটি পুনরাবৃত্তি করার জন্য আমি এটি একটি ল্যাম্বডা দিয়ে ছোট করার চেষ্টা করেছি (এটি কার্যকর হয়নি):
def h(s, i=0, f=lambda s,i: ord(s[i]) << (i * len(s))):
if i < len(s) - 1: return h(s, i+1) + f(s,i)
else: return f(s,i)
অবশেষে আমি একটি ল্যাম্বডা দিয়ে শেষ করেছি:
h=lambda s,i=0:h(s,i+1)+ord(s[i])<<(i*len(s))if i<len(s)-1 else ord(s[i])<<(i*len(s))
আমি চেয়েছিলাম প্রোগ্রামটি একটি বিবৃতি হোক, তাই প্রথমে আমি এলাম:
def test():
chars = sample(ascii_lowercase, 9)
sums = list(map((lambda s,i=0,f=lambda s,i,f:f(s,i+1,f)+ord(s[i])<<(i*len(s))if i<len(s)-1 else ord(s[i])<<(i*len(s)):f(s,i,f)), permutations(chars)))
if len(set(sums)) == len(sums):
print("unique results for permutations of given string")
else:
print("duplicate entries present in test results")
এবং সর্বশেষে আমি এখানে দিয়ে শেষ করেছি:
print((lambda x=list(map((lambda s,i=0,f=lambda s,i,f:f(s,i+1,f)+ord(s[i])<<(i*len(s))if i<len(s)-1 else ord(s[i])<<(i*len(s)):f(s,i,f)), permutations(sample(ascii_lowercase, 9)))): "unique results for permutations of given string" if len(set(x)) == len(x) else "duplicate entries present in test results")())
কোডগলফের সমস্যাগুলি কী এভাবে কাজ করা হয়? আমি সত্যিই এই ধরণের জিনিসটি কখনও করি নি, এখনই আমি কেবল এটি সঠিকভাবে করছি কিনা তা জানতে চাই।
সংশোধন: এই প্রোগ্রামটি আপনার জন্য সমস্ত কাজ করে; সুতরাং আমি এখানে ফাংশনটি উল্লেখ করব: ইনপুট হিসাবে, প্রোগ্রামটি একটি প্রদত্ত স্ট্রিংয়ের সমস্ত অনুমতি গ্রহণ করে; এখানে স্ট্রিংটি এলোমেলোভাবে বেছে নেওয়া নয়টি অক্ষর ascii_lowercase
। আউটপুট হ'ল একটি মানব-পঠনযোগ্য স্ট্রিং যা প্রদত্ত স্ট্রিংয়ের প্রতিটি অনুক্রমের ফলাফলটি ভিন্ন স্ট্রিংয়ের জন্য অন্য ফলাফলের নকল কিনা তা নির্ধারণ করে। যদি সমস্ত আদেশের জন্য কোনও সদৃশ না থাকে তবে প্রোগ্রামটি সাফল্যের ইঙ্গিত দেয়। আমার বাক্সে বারবার সহজেই গণনা করা অক্ষরের বৃহত্তম দৈর্ঘ্য হিসাবে নয়টি অক্ষর বাছাই করা হয়েছিল।
দ্বিতীয় সংশোধনী একজন অধ্যয়নরত পাঠকের দ্বারা উল্লেখ করা হয়েছে যে বর্ণিত উদ্দেশ্যটি সংযুক্ত কোডের মাধ্যমে পাওয়া যায় না। পরীক্ষার কেসটি স্পষ্টতই অপর্যাপ্ত।
print"x"
পরিবর্তেprint("x")
list()
?