मैं उत्सुक हूँ अगर मैं ठीक से कोड गोल्फ कर रहा हूँ। मैंने पायथन में एक एकल कथन में एक छोटे से हैशिंग कार्यक्रम बनाने के लिए खुद को चुनौती दी। मैंने पहली बार शुरुआत की:
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
। आउटपुट एक मानव-पठनीय स्ट्रिंग है जो यह परिभाषित करता है कि दिए गए स्ट्रिंग के प्रत्येक क्रमपरिवर्तन का परिणाम किसी भिन्न स्ट्रिंग के लिए किसी अन्य परिणाम का डुप्लिकेट है या नहीं। यदि सभी क्रमपरिवर्तन के लिए कोई डुप्लिकेट नहीं हैं, तो कार्यक्रम सफलता का संकेत देता है। नौ पात्रों को मेरे बॉक्स पर बार-बार आसानी से गणना किए जाने वाले पात्रों की सबसे बड़ी लंबाई के रूप में चुना गया था।
संशोधन II जैसा कि एक अध्ययनशील पाठक द्वारा बताया गया है, वर्णित उद्देश्य को साथ दिए गए कोड के माध्यम से प्राप्त नहीं किया गया है। परीक्षण का मामला स्पष्ट रूप से अपर्याप्त है।
print"x"
इसके बजायprint("x")
list()
?