एक लंबी संख्या को छोटा करना


10

कोड गोल्फिंग के दौरान लंबी संख्या के साथ काम करते समय, आपके कोड की लंबाई कम होना मुश्किल हो सकता है, तो क्या आपके पास नंबर कम और प्रबंधित करने में आसान बनाने के लिए कोई सुझाव है?

उदाहरण के लिए, निम्नलिखित पायथ कोड "हैलो वर्ल्ड" प्रिंट करता है, लेकिन 44 बाइट्स पर, यह असंतोषजनक है:

Vcjkj85942000775441864767076 2 7=k+kCiN2)k

तो मैं लंबी संख्या को छोटा कैसे करूंगा 85942000775441864767076?

जवाबों:


10

इस प्रश्न के लिए एकदम सही समय। @isaacg ने आज एक नई सुविधा जोड़ी है, जो इस तरह की संख्या को बहुत कम करने की अनुमति देता है।

मूल तकनीक संख्या को आधार 256 में बदलने और इसे चार्ट में बदलने के लिए है। आप कोड का उपयोग करके ऐसा कर सकते हैं ++NsCMjQ256N। फिर आप परिणामी स्ट्रिंग के साथ संयोजन का उपयोग कर सकते हैं C, जो बिल्कुल विपरीत करता है (परिणाम को चार्ट में अंतर करने और आधार-256 नंबर के रूप में व्याख्या करने के लिए)। तो आपको 13 वर्ण मिलते हैं C"2ìÙ½}ü¶d":। कुछ वर्ण अनपेक्षित हैं।

लेकिन ध्यान दें कि मैंने 13 CHARS कहा, बाइट्स नहीं। अगर मैं वर्णों को कॉपी करता हूं और https://mothereff.in/byte-counter के साथ गणना करता हूं , तो यह 13 चार्ट और 18 बाइट्स कहता है। यह वर्णों के वर्ण कूटबन्धन के कारण है, जो कि डिफ़ॉल्ट रूप से UTF-8 है। और UTF-8 केवल 2 ^ 7 अलग-अलग 1-बाइट वर्ण की अनुमति देता है। हर चार cके साथ ord(c) > 127वास्तव में दो हो जाता है का उपयोग करके संग्रहीत बजाय एक के बाइट्स।

और यहाँ आओ @ isaacg की नई सुविधा खेलने में है। उसने UTF-8 से iso-8859-1 में डिफ़ॉल्ट कोड-प्रारूप को बदल दिया। iso-8859 केवल 1 बाइट के साथ 256 वर्णों का प्रतिनिधित्व कर सकता है। तो अब आप वास्तव में 13 BYTES तक पहुंच सकते हैं। यह केवल मानक कंपाइलर के साथ ही संभव है , यह ऑनलाइन कंपाइलर में काम नहीं करता है।

पहले आप इस स्क्रिप्ट का उपयोग करके संख्या को हेक्स-मान में बदलना चाहते हैं jdm.[2.Hd"0"jQ256:। यह आपको देता है 12 32 ec d9 bd 07 7d fc b6 64। बाद में एक हेक्स-एडिटर (जैसे कि लिनक्स के लिए हेक्सेडिट) का उपयोग करके उन नंबरों को अपने कोड-फाइल में कॉपी करें।

हेक्साडिट प्रदर्शन

नोटिस:

  • स्पष्ट रूप से आप "अंत में हटा देते हैं , अगर स्ट्रिंग कोड का अंतिम भाग है।
  • यह केवल तभी काम करता है जब आप संख्याओं के आधार-256 प्रतिनिधित्व में कोई 34(बाइट 22) न हो, क्योंकि यह "चार है और स्ट्रिंग को समाप्त कर देगा। हालांकि बचना काम करता है ( 5C 22)।
  • Btw, जब आप एक हेक्स-संपादक के साथ एक फ़ाइल खोलते हैं, तो आप संभवतः बाइट 0Aया 0d 0aअंत में देखेंगे , जिसे आप हटा सकते हैं। यह केवल रेखा के अंत को इंगित करता है।

मुझे अपनी मशीन पर ऑफ़लाइन दुभाषिया लगाना होगा, लेकिन यह शानदार है, धन्यवाद! :)
बीटा डेके

1
स्ट्रिंग में मान की नल बाइट भी शामिल नहीं हो सकती है 00। इसके अलावा, \बाइट 5c, इसके बाद बाइट के आधार पर किसी अन्य `` के साथ बच निकलने या नहीं होने की आवश्यकता हो सकती है।
isaacg
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.