पायथन 2, 14508 11700 11088 10164 9486 9746 7860 145 बाइट्स * 36 अद्वितीय = 5220
मैंने शीर्षक देखा और सोचा कि यह चिंताजनक पायथन के लिए एक दिलचस्प चुनौती थी। ये मेरे नोट हैं क्योंकि मैंने इस समस्या से निपट लिया।
मेरी पहली कोशिश ने 31 को कम कर दिया:
print''.join(chr([69,108,105,122,97,98,101,116,104,32,111,98,110,111,120,105,111,117,115,108,121,32,113,117,111,116,101,100,32,40,106,117,115,116,32,116,111,111,32,114,111,119,100,121,32,102,111,114,32,109,121,32,112,101,97,99,101,41,58,32,34,84,72,69,32,81,85,73,67,75,32,66,82,79,87,78,32,70,79,88,32,74,85,77,80,83,32,79,86,69,82,32,84,72,69,32,76,65,90,89,32,68,79,71,44,34,32,103,105,118,105,110,103,32,109,101,32,97,32,108,111,111,107,46][r])for r in range(124))
मुझे लगा कि मैं बेहतर कर सकता हूं। का उपयोग करके map
, uniques 26 के लिए नीचे आया:
print''.join(map(chr,(69,108,105,122,97,98,101,116,104,32,111,98,110,111,120,105,111,117,115,108,121,32,113,117,111,116,101,100,32,40,106,117,115,116,32,116,111,111,32,114,111,119,100,121,32,102,111,114,32,109,121,32,112,101,97,99,101,41,58,32,34,84,72,69,32,81,85,73,67,75,32,66,82,79,87,78,32,70,79,88,32,74,85,77,80,83,32,79,86,69,82,32,84,72,69,32,76,65,90,89,32,68,79,71,44,34,32,103,105,118,105,110,103,32,109,101,32,97,32,108,111,111,107,46)))
इस समय, मैंने प्रश्न पाठ में ध्यान दिया कि स्कोर uniques * bytes
सिर्फ एक ही नहीं था ! इसका मतलब था कि ऊपर दिए गए मेरे स्कोर 14508 और 11700 थे। बहुत प्रतिस्पर्धात्मक नहीं। तो अब मैं पाठ को हेक्स स्ट्रिंग के रूप में संग्रहीत करके बाइट्स को कम करता हूं:
# 308*36 = 11088
print''.join(chr(int('456c697a6162657468206f626e6f78696f75736c792071756f74656420286a75737420746f6f20726f77647920666f72206d79207065616365293a202254484520515549434b2042524f574e20464f58204a554d5053204f56455220544845204c415a5920444f472c2220676976696e67206d652061206c6f6f6b2e'[i*2:i*2+2],16)) for i in range(124))
आकार कम हो गया था लेकिन अधिक अद्वितीय वर्ण। लेकिन अगर मैंने 32 ऑफसेट के साथ एक पैक 2 अंक दशमलव स्ट्रिंग का उपयोग किया है:
# 308*33 = 10164
print''.join(chr(int('37767390656669847200796678798873798583768900818579846968000874858384008479790082798768890070798200778900806965676909260002524037004953413543003450475546003847560042534548510047543750005240370044335857003647391202007173867378710077690065007679797514'[i*2:i*2+2])+32) for i in range(124))
यह बाइट्स की एक ही संख्या है, लेकिन 3 uniques बचाता है।
मैं एक नई योजना तैयार करता हूं। अगर मैं 7 बिट अक्षरों के साथ एक अजगर लंबे पूर्णांक को पैक करता हूं, तो मैं हर एक को शिफ्ट करके निकाल सकता हूं:
# 306*31 = 9486
h=1073974643401006528619595312441225198653732186368270382545648881135648217524502741093886285232362673460172159947573049818819511630304840724474679255867143965214892747087773876949021986013520804726327302180335979259392708372721217579101211940864406962137554744750
w=''
while h:w=chr(h&127)+w;h>>=7
print w
खैर, यह स्कोर घटकर 9486 हो गया। एक दिलचस्प प्रयोग, लेकिन कहीं-कहीं काफी अच्छा। अब क्या होगा अगर मैं फ़ंक्शन नामों से छुटकारा पाऊंगा और स्ट्रिंग प्रारूपण पर भरोसा करूंगा?
# 443 * 22 = 9746
print('%c'*124)%(69,108,105,122,97,98,101,116,104,32,111,98,110,111,120,105,111,117,115,108,121,32,113,117,111,116,101,100,32,40,106,117,115,116,32,116,111,111,32,114,111,119,100,121,32,102,111,114,32,109,121,32,112,101,97,99,101,41,58,32,34,84,72,69,32,81,85,73,67,75,32,66,82,79,87,78,32,70,79,88,32,74,85,77,80,83,32,79,86,69,82,32,84,72,69,32,76,65,90,89,32,68,79,71,44,34,32,103,105,118,105,110,103,32,109,101,32,97,32,108,111,111,107,46)
मेरे पास अब केवल 22 इकाइयां हैं, लेकिन स्कोर में सुधार नहीं हुआ है।
ठीक है, क्या होगा अगर मैंने स्पष्ट तरीके से लिया और बस स्ट्रिंग मुद्रित किया:
# 131*60 = 7860
print'Elizabeth obnoxiously quoted (just too rowdy for my peace): "THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG," giving me a look.'
7860 का स्कोर। मुझे पहले ऐसा करना चाहिए था। लेकिन मैंने इतना कुछ नहीं सीखा होगा।
मुझे लगता है कि अगर मैं गतिशील रूप से ऊपरी केस भागों का उत्पादन करता हूं तो मैं 26 को कम कर सकता हूं:
# 145*36 = 5220
print'Elizabeth obnoxiously quoted (just too rowdy for my peace): '+'"the quick brown fox jumps over the lazy dog,"'.upper()+' giving me a look.'
मुझे लगता है कि पायथन 5220 से ज्यादा बेहतर नहीं होगा। पायथन में अद्वितीय पात्रों को न्यूनतम करने का कार्य हालांकि शिक्षाप्रद था।
अपडेट: mbomb007 में 5005 स्कोर करने वाला एक बेहतर पायथन समाधान है। अच्छा काम।