व्हॉट्सएप में गोल्फिंग के लिए टिप्स


14

व्हॉट्सएप में गोल्फिंग के लिए आपके पास क्या सामान्य सुझाव हैं? मैं उन विचारों की तलाश कर रहा हूं, जिन्हें कोड-गोल्फ समस्याओं पर लागू किया जा सकता है और जो कि व्हाट्सएप के लिए कम से कम कुछ हद तक विशिष्ट हैं (उदाहरण के लिए "टिप्पणियां हटाएं" एक उत्तर नहीं है)।

कृपया प्रति उत्तर एक टिप पोस्ट करें।


82
अनावश्यक व्हाट्सएप को हटा दें।
केएसएफटी

1
s / [^ [: space:]] // g
डिजिटल ट्रामा

जवाबों:


11

मुझे पूरी तरह से यकीन नहीं है कि यह एक मजाक सवाल है या नहीं, इसलिए मुझे आशा है कि मैं इसे गंभीरता से लेने के लिए मजाक नहीं करूंगा, लेकिन ...

टिप 1: अपना कार्यक्रम समाप्त न करें

युक्ति कहती है कि एक कार्यक्रम को तीन लाइन-फीड्स द्वारा समाप्त किया जाना चाहिए [LF][LF][LF], जहां पहला प्रवाह नियंत्रण छोटा सा भूत है, और अगले दो छोड़ दिए गए कमांड हैं, लेकिन कई दुभाषिए सिर्फ उचित अंत के बिना आपके कोड को चलाएंगे। आपको किसी भी प्रोग्राम में 3 अक्षर बचाता है।


6

टिप 2: संभव के रूप में हीप का उपयोग करें

मैंने अपने छोरों और इस तरह की गिनती के लिए ढेर का उपयोग किया, लेकिन एहसास हुआ कि यह वास्तव में बेहद अक्षम था; पहले एक पते को धकेलना, वर्तमान संख्या प्राप्त करना, एक को जोड़ना / जोड़ना, पुन: धक्का देना, आदि।

अब मैं सिर्फ लूप काउंटर के रूप में कार्य करने के लिए स्टैक पर एक मूल्य धक्का देता हूं, फिर [Space][LF][Tab]जब मुझे इसकी आवश्यकता होती है तो इसे वापस पाने के लिए स्वैप कमांड का उपयोग करें । इसमें / इसके आसपास काम करने में बहुत समय लगता है, लेकिन जब आप इसे प्राप्त करते हैं तो यह वास्तव में आपके चार गिनती को कम कर सकता है।


5

मनमाने ढेर के पते का उपयोग करें

कई दुभाषियों ने आपको 0 या 1 पर शुरू करने और गिनने के बजाय मनमाने ढंग से पते पढ़ने / लिखने की अनुमति दी। आप एक मौजूदा स्टैक वैल्यू (3 बाइट्स) को एक नए मान (न्यूनतम 4 बाइट्स) को पुश करने के बजाय एक पते के रूप में उपयोग करने के लिए डुप्लिकेट कर सकते हैं


+1। ध्यान दें कि यह केवल गैर-नकारात्मक ढेर-पते पर लागू होता है। इसलिए यदि स्टैक के शीर्ष एक नकारात्मक पूर्णांक है, तो आप इसे हीप-पता के रूप में उपयोग नहीं कर सकते।
केविन क्रूज़सेन

5

खाली अनुक्रम एक वैध लेबल है

[LF][Space][Space][LF](फ्लो कंट्रोल - मार्क विद द लेबल '') एक खाली लेबल बनाता है जो जंप या सबरूटीन कॉल के लिए एक वैध लक्ष्य है। हर बार जब इसे लेबल घोषित किया जाता है तो एक बाइट बचाता है और इसे बाइट कहा जाता है।

( एक सच मशीन को लागू करने के लिए व्हाट्सएप जवाब में देखा गया )


5

एक निश्चित राशि से सभी वर्णों को कम करें और लूप में प्रिंट करने से पहले सही जोड़ें

हैलो वर्ल्ड चैलेंज के लिए अपने जवाब में इसी तरह के दृष्टिकोण का उपयोग करने वाले @LukStorms को क्रेडिट ।

( STNक्रमशः स्पेस, टैब और न्यू-लाइन के लिए उपयोग किया जाता है।)

अक्षरों के लिए मानों को धक्का देना हमेशा 11 बाइट्स होता है (अर्थात 'A' अक्षर के लिए मान 65 को SSSTSSSSSTNधकेलना, चरित्र 'z' के लिए मान 122 को धक्का देना SSSTTTTSTSN) है। जब आप बड़ी मात्रा में पाठ का उत्पादन करना चाहते हैं तो यह महंगा हो सकता है। इसके बजाय, आप उन सभी पात्रों के मूल्यों को कम कर सकते हैं जिन्हें आप एक निश्चित राशि से प्रिंट करना चाहते हैं, और फिर उन्हें मुद्रित करने के लिए लूप में इस निश्चित राशि को जोड़ते हैं।

यह निम्नलिखित कोड के साथ किया जा सकता है (मान लें कि इस मामले में निश्चित मूल्य 100 है):

  1. वर्णों के लिए सभी मानों को दबाएं (रिवर्स निश्चित मात्रा में 100) रिवर्स ऑर्डर में
  2. NSSN (एक लेबल_0 बनाएँ; मूल रूप से लूप शुरू करना)
    1. SSSTTSSTSSN (निर्धारित राशि को 100 पर पुश करें)
    2. TSSS (स्टैक के शीर्ष दो मानों को एक साथ जोड़ें)
    3. TNSS (पॉप और चरित्र के रूप में अब सही मूल्य प्रिंट)
    4. NSNN (लेबल_0 पर जाएं) लूप के अगले पुनरावृत्ति पर जाएं)

यह प्रोग्राम को एक त्रुटि के साथ बंद कर देगा ( जो कि मेटा के अनुसार अनुमति दी गई है ) जैसे ही यह TSSSस्टैक पर अधिक कुछ नहीं के साथ ऐड ( ) करने की कोशिश करता है । मैंने इसका उपयोग मेरे इस उत्तर को देखने के लिए किया है (देखें बाइट-काउंट को कम करने के लिए मैंने जिन 5 और 6 चीजों को किया है )।

क्या 100 की एक निश्चित राशि सबसे छोटा तरीका है, इस बात पर निर्भर करता है कि आप क्या छाप रहे हैं। उदाहरण के लिए @LukStorm ने अपने हैलो वर्ल्ड उत्तर में 107 का उपयोग किया।

ध्यान दें कि शीर्ष मूल्य (कॉपी करने SNS) एक ही आसन्न पात्रों में से दो के लिए (जैसे lमें Hello), या किसी अन्य स्थिति से कॉपी मूल्यों अभी भी इसके अलावा में यह करने के लिए गोल्फ से अधिक इस्तेमाल किया जा सकता बाइट्स।


4

अपरिभाषित लेबल पर जाने से प्रोग्राम समाप्त हो जाता है (कुछ दुभाषियों में)

यह कार्यान्वयन के विशिष्ट व्यवहार में आने लगता है, लेकिन मेरा मानना ​​है कि इसकी अनुमति है

TIO (और संभवतः अन्य दुभाषियों? विचारधारा पर कम से कम काम नहीं करता है) निष्पादन को रोक देगा जब एक लेबल पर कूदने का प्रयास किया जाता है जो मौजूद नहीं है। यदि आपको लूप से बाहर निकलने के लिए तुलना करने की आवश्यकता है, तो यह आपको ब्रेक लेबल को घोषित न करके बाइट्स को बचाने की अनुमति देता है। ( एक उदाहरण के लिए प्रिंट अदृश्य पाठ पर मेरी टिप्पणी देखें ।)


4

मान 0 को बिना बाइनरी अंकों के साथ एक संख्या के रूप में घोषित किया जा सकता है

व्हॉट्सएप के ट्यूटोरियल में उल्लेख किया गया है कि संख्याएं बिट्स / बाइनरी अंकों की व्यापक संख्या हो सकती हैं। इसका मतलब है कि बिना किसी बिट (आवश्यक संकेत बिट के परे) के साथ एक संख्या मान 0 का एक वैध प्रतिनिधित्व है [Space][Space][Space][LF]और [Space][Space][Space][Space][LF]दोनों मान 0 को स्टैक पर धकेलते हैं लेकिन पूर्व एक बाइट छोटा होता है।


0

पिछले पूर्णांक कॉपी करना नए बनाने से कम हो सकता है

( STNक्रमशः स्पेस, टैब और न्यू-लाइन के लिए उपयोग किया जाता है।)

STS+ संख्या तर्क का उपयोग स्टैक के शीर्ष पर स्टैक पर n वें आइटम को कॉपी करने के लिए (तर्क द्वारा दिया गया) किया जा सकता है । यह कुछ मामलों में बाइट्स को बचाने के लिए इस्तेमाल किया जा सकता है।

उदाहरण के लिए, मेरे इस जवाब में मैंने 4 आइटमों में बताया कि मैंने बाइट को कम करने के लिए कैसे 1 (0-अनुक्रमित) मान की प्रतिलिपि बनाई ( STSSTN) वर्ण 'p' ( SSSTTSSN) बनाने के लिए 12 को धकेलने की तुलना में कम है। "pop"आउटपुट के हिस्से में। (नोट: मैं वर्ण 'p' के लिए 112 के बजाय मान 12 का उपयोग करता हूं, क्योंकि मैंने एक निश्चित राशि द्वारा सभी मानों को कम करने के इस अन्य टिप को लागू किया है , जिसे हम लूप में वर्णों को मुद्रित करने से पहले जोड़ते हैं ।)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.