MATL में गोल्फ के लिए टिप्स


20

MATL लुइस मेंडो द्वारा बनाई गई एक गोल्फिंग भाषा है । Matl, अत्यधिक प्रतिस्पर्धी साबित हो गया है अक्सर पिटाई ऐसी Pyth, CJam और जेली के रूप में अन्य गोल्फ भाषाओं में प्रस्तुतियाँ।

MATL में गोल्फिंग के लिए कुछ उपयोगी टिप्स क्या हैं? (हमेशा की तरह, प्रति उत्तर एक टिप, कृपया!)


5
यदि आप कुछ मतलूब / अष्टक जानते हैं तो यह निश्चित रूप से एक बड़ा फायदा है। मैटलाब में गोल्फ के लिए टिप्स और ऑक्टेव में गोल्फ के लिए टिप्स से कुछ ट्रिक्स MATL में भी उपयोग किए गए हैं।
दोष

सुझाव: ऐसा लग रहा है accumarray( XQ) काफी शक्तिशाली हो सकता है (संभवतः MATLAB / ऑक्टेव की तुलना में अधिक है क्योंकि उन लंबाई फ़ंक्शन हैंडल में संख्यात्मक सांख्यिक कोड हैं), लेकिन मुझे यह अच्छे उदाहरणों के साथ वर्णन करने के लिए पर्याप्त रूप से नहीं पता है। यदि यह वास्तव में उपयोगी है, तो क्या कोई व्यक्ति इसका उपयोग करने के तरीके के बारे में विचारों के साथ उत्तर दे सकता है?
सूंदर -

जवाबों:


7

जानिए पूर्वनिर्धारित शाब्दिक अर्थ

यद्यपि उनमें से कुछ क्लिपबोर्ड पर कॉपी किए जाने पर जानकारी रखते हैं, लेकिन इन सभी का पूर्वनिर्धारित मूल्य है।

  • F, 0 धक्का (वास्तव में गलत )
  • T, 1 धक्का (वास्तव में सच )
  • H, 2 धक्का (पूर्वनिर्धारित क्लिपबोर्ड मूल्य)
  • I, 3 धक्का (पूर्वनिर्धारित क्लिपबोर्ड मूल्य)
  • K, 4 धक्का (पूर्वनिर्धारित क्लिपबोर्ड मूल्य)
  • J, 0 + 1j पुश करता है (पूर्वनिर्धारित क्लिपबोर्ड मूल्य)

सुनिश्चित नहीं है कि मैंने सभी पूर्वनिर्धारित मूल्यों को कवर किया है।


बस पूर्णता के लिए (और यदि आप अपने जवाब में जोड़ना चाहते हैं): क्लिपबोर्ड के प्रत्येक स्तर का Lएक पूर्वनिर्धारित मूल्य भी होता है, लेकिन वे विशेष उपयोगों (सामान्य, सामान्य मूल्यों के बजाय) के लिए अभिप्रेत हैं। उदाहरण के लिए, 1Lदेता है [1 0](जो सूचकांक के रूप में प्रयोग किया जाता है 1:end), 2Lदेता है [0 -1 1](के लिए 1:-1:end)। इसके अलावा, फ़ंक्शंस lऔर Oडिफ़ॉल्ट रूप से 0 इनपुट लेते हैं 0और 1क्रमशः
लुइस मेंडो

मैं नहीं देखता कि यह कैसे उपयोगी है ... क्या मैं अभी नहीं लिख सकता हूँ 4?
साइओस

@ कैओस विभाजक के रूप में एक स्थान से बचने के लिए उपयोगी है। यदि आप धक्का देना चाहते हैं 1, तो 4, 14नहीं करेंगे। आप की आवश्यकता होगी 1 4। या 1Kएक बाइट बचाने के लिए
लुइस मेंडो

@LuisMendo आह, मैं देखता हूं। मुझे लगता है कि मुझे लगता है कि यह 1-अंकीय संख्या केवल विधि का उपयोग कर रहा था (निश्चित रूप से क्यों नहीं)
Cyoce

1
एक और मामला जब काम के Kबजाय 4है: 1-4इसका मतलब है: धक्का 1, फिर धक्का -4; जबकि 1-Kइसका मतलब है: 1स्टैक में नीचे जो कुछ भी है उससे धक्का , घटाना, फिर धक्का4
लुइस मेंडो

5

&मेटा-समारोह (वैकल्पिक इनपुट / आउटपुट विशिष्टता)

किसी फ़ंक्शन को पास करने के लिए इनपुट तर्कों की संख्या निर्दिष्ट करने का पारंपरिक तरीका $मेटा-फ़ंक्शन का उपयोग करना है

2$:     % Two-input version of :

इसी प्रकार, आउटपुट तर्कों की संख्या निर्दिष्ट करने के लिए आप #मेटा-फंक्शन का उपयोग करके या तो आउटपुट तर्कों की संख्या निर्दिष्ट कर सकते हैं ,

2#S     % Two-output version of sort

या यदि आप एक संख्या है कि पारित से अधिक उत्पादन तर्क एक समारोह के लिए परिभाषित की संख्या, केवलmod(N, numberOfOutputs) + 1 उत्पादन आपूर्ति की है।

4#S     % Get only the second output of sort

आप #केवल विशिष्ट आउटपुट तर्क प्राप्त करने के लिए इनपुट के रूप में एक तार्किक सरणी निर्दिष्ट कर सकते हैं ।

TFT#u   % Three output version of unique and discard the second output

ये सभी इनपुट / आउटपुट स्पेसिफिकेशन आसान हैं लेकिन ये आपकी बाइट-काउंट को बहुत तेज़ी से बढ़ाते हैं। इस समस्या से निपटने के लिए, Matl शुरू की &में मेटा-समारोह 17.0.0 रिलीज । यह &मेटा-फ़ंक्शन किसी फ़ंक्शन के लिए किसी विशेष इनपुट या आउटपुट विनिर्देश के लिए एक शॉर्टकट के रूप में कार्य करता है। आइए देखें इसका क्या मतलब है।

ऊपर हमारे उदाहरण में, हम दो-इनपुट संस्करण का उपयोग करना चाहते थे :(समान रूप से अंतरित मूल्यों का एक वेक्टर बनाता है)। के लिए इनपुट तर्क की डिफ़ॉल्ट संख्या जबकि :है 1(से एक सरणी बनाता है [1...N]), यह है बहुत आम है कि एक उपयोगकर्ता जो दूसरी इनपुट की आवश्यकता है रेंज की शुरुआत मान निर्दिष्ट करने के लिए चाहते हैं। तो :, हम के &लिए एक शॉर्टकट होना परिभाषित किया है 2$

10      % Push 10 to the stack
12      % Push 12 to the stack
2$:     % Create an array: [10, 11, 12] 

अब निम्नलिखित बन जाता है, एक बाइट की बचत !

10 12 &:

हम कैसे निर्धारित कर सकते हैं कि तर्कों की वैकल्पिक संख्या क्या है?

इनपुट / आउटपुट विनिर्देश जो &अनुवाद करता है वह कार्य विशिष्ट है जैसे कि हम बाइट-बचत का अनुकूलन करते हैं।

प्रत्येक फ़ंक्शन के लिए सहायता विवरण के इनपुट / आउटपुट तर्क अनुभाग को इंगित करने के लिए अद्यतन किया गया है कि इनपुट / आउटपुट की यह वैकल्पिक संख्या क्या है (यदि कोई हो)। इनपुट या आउटपुट तर्कों की संभावित संख्या को एक सीमा के रूप में प्रदर्शित किया जाता है और प्रत्येक के लिए डिफ़ॉल्ट मान कोष्ठक में दिखाए जाते हैं। इनपुट / आउटपुट युक्ति जिसे प्रतिस्थापित किया जा सकता है, कोष्ठकों के भीतर वर्ण के &बाद दिखाया /गया है।

यहाँ इनपुट / आउटपुट तर्क अनुभाग के लिए सहायता विवरण है :

 +- Min-Max range of # of inputs
 |        +----- Alt. Default # of inputs
 |        |
 V        V
1--3 (1 / 2); 1 <--- Possible / Default # of outputs
      ^       
      |       
  Default # of inputs

आपने कैसे निर्धारित किया कि &प्रत्येक फ़ंक्शन के लिए क्या मतलब है?

बहूत सावधानी से। StackExchange API का उपयोग करके , हम उन सभी MATL उत्तरों को डाउनलोड करने में सक्षम थे जो कभी PPCG चुनौती में उपयोग किए गए हैं। प्रत्येक उत्तर को पार्स करके, हम तब आवृत्ति निर्धारित करने में सक्षम थे जिसके साथ प्रत्येक फ़ंक्शन के लिए प्रत्येक इनपुट / आउटपुट कल्पना का उपयोग किया गया था। इस जानकारी का उपयोग करते हुए हम तब इनपुट / आउटपुट विनिर्देश को पहचानने में सक्षम थे कि &मेटा-फ़ंक्शन को प्रत्येक फ़ंक्शन के लिए प्रतिनिधित्व करना चाहिए। कभी-कभी कोई स्पष्ट विजेता नहीं था, इसलिए कई कार्यों को वर्तमान में &परिभाषित नहीं किया गया है।

यहां वह स्क्रिप्ट है जिसका हमने उपयोग किया (दुर्भाग्य से यह MATLAB में लिखा गया है और MATL नहीं है )।

और यहाँ / उपयोग के हिस्टोग्राम का एक उदाहरण है$#


1
यह सुविधा @Suever द्वारा सुझाई गई थी। मूल &रूप से "डिफ़ॉल्ट के संबंध में 1 से इनपुट की संख्या में वृद्धि" का मतलब था। उनका सुझाव अधिक उपयोगी निकला
लुइस मेंडो

5

MATL की सत्य / असत्य परिभाषाओं से परिचित हों

जबकि true( T) और false( F) स्पष्ट रूप से सत्य और मिथ्या आउटपुट का प्रतिनिधित्व करते हैं, क्रमशः सत्य / मिथ्या की परिभाषा पर व्यापक रूप से सहमत हमें MATL में थोड़ा अधिक लचीलापन देता है।

परिभाषा बताती है:

if (x)
    disp("x is truthy");
else
    disp("x is falsy");
end

इसलिए हम एक त्वरित MATL सत्य / मिथ्या परीक्षण लिख सकते हैं जो सभी इनपुटों के माध्यम से लूप करेगा और प्रदर्शित करेगा कि क्या वे सत्य या झूठे माने गए थे

` ? 'truthy' } 'falsey' ]DT

यहाँ एक ऑनलाइन संस्करण है।

MATL में इसका क्या मतलब है

यह वास्तव में MATL में अनुवाद करता है (और इसलिए MATLAB और ऑक्टेव में) यह है कि एक शर्त को सच माना जाता है अगर यह गैर-खाली है और इसके सभी मूल्यों के वास्तविक घटक गैर-शून्य हैं । इसके दो हिस्से हैं जिन पर जोर दिया जाना चाहिए।

  1. गैर-शून्य : इसका मतलब ठीक है कि, शून्य के बराबर नहीं ( ==)। इसमें सकारात्मक संख्या, नकारात्मक संख्या, गैर-शून्य वर्ण आदि शामिल हैं। आप किसी दिए गए मूल्य को मूल्य में परिवर्तित करके आसानी से जांच सकते हैं logical( g) या आप इसका उपयोग कर सकते हैं~~

    F           % Falsy
    T           % Truthy
    0           % Falsy
    1           % Truthy
    2           % Truthy
    -1          % Truthy
    'a'         % Truthy
    ' '         % Truthy (ASCII 32)
    char(0)     % Falsy  (ASCII 0)  
    
  2. सभी मान : आमतौर पर हम स्केलर को सही या गलत मानते हैं, लेकिन MATL में, हम स्केलर, रो वैक्टर, कॉलम वैक्टर, या यहां तक ​​कि बहुआयामी मैट्रिसेस का मूल्यांकन कर सकते हैं और उन्हें सत्य माना जाता है यदि केवल और केवल उनका कोई मान हो तो गैर-शून्य (जैसा कि ऊपर परिभाषित किया गया है), अन्यथा वे मिथ्या हैं। यहाँ कुछ उदाहरण प्रदर्शित करने के लिए हैं

    [1, 1, 1]           % Truthy
    [1, 0, 0]           % Falsey
    [1, 1, 1; 1, 1, 1]  % Truthy
    [1, 0, 1; 1, 1, 1]  % Falsey
    'Hello World'       % Truthy
    

एक किनारे का मामला, जैसा कि ऊपर उल्लेख किया गया है, एक खाली सरणी है [], जिसे हमेशा गलत माना जाता है ( उदाहरण )

मैं इसे गोल्फ के लिए बेहतर कैसे उपयोग कर सकता हूं?

यदि चुनौती का उल्लेख है कि आपका आउटपुट सत्य या मिथ्या होना चाहिए, तो आप अपने उत्तर से कुछ बाइट्स शेव करने के लिए ऊपर दी गई परिभाषा का उपयोग कर सकते हैं। भ्रम को बचाने के लिए, यह अनुशंसा की जाती है कि आप अपने जवाब में ऊपर दिए गए ऑनलाइन ट्रुथ / फाल्सी टेस्ट का लिंक शामिल करें ताकि यह समझाया जा सके कि MATL सत्य / मिथ्या मूल्य कैसे काम करते हैं।

कुछ विशिष्ट उदाहरण:

  • में समाप्त होने वाला उत्तर A। चुनौती एक truthy या falsy उत्पादन की आवश्यकता है और आप में अपने जवाब को समाप्त करते हैं all( A) एक अदिश बनाने के लिए, तो आप इस आखिरी बाइट को हटा सकते हैं और आपका जवाब सही रहेगा (जब तक उत्पादन होता है []के बाद से []है falseलेकिन []Aहै true)।

  • यह सुनिश्चित करना कि एक सरणी में केवल एक अद्वितीय मूल्य होता है : के &=स्थान पर उपयोग करता है un1=। यदि किसी सरणी में सभी मान समान हैं, तो एक प्रसारित तत्व-वार समानता की तुलना N x Nसभी लोगों के मैट्रिक्स को उत्पन्न करेगी । यदि सभी मान समान नहीं हैं, तो इस मैट्रिक्स में कुछ 0मान होंगे और इसलिए उन्हें गलत माना जाएगा।


4

निहित इनपुट

अधिकांश फ़ंक्शन इनपुट की कुछ संख्या स्वीकार करते हैं। ये इनपुट स्टैक के ऊपर से लिए गए हैं। यदि स्टैक के शीर्ष में पर्याप्त तर्क नहीं हैं, तो यह इनपुट से शेष तर्क को आकर्षित करेगा। (प्रलेखन में खंड documentation.३ देखें) मैं मूल स्पष्टीकरण का हवाला देना चाहूंगा:

इंप्लिमेंट इनपुट्स को निम्नानुसार देखा जा सकता है: स्टैक अनिश्चित रूप से नीचे की ओर बढ़ाया जाता है, अर्थात्, 0, −1, ,2 पदों पर, ... उन मानों के साथ जिन्हें शुरू में परिभाषित नहीं किया गया है, लेकिन निहित इनपुट के माध्यम से मक्खी पर हल किया जाता है। । ये इनपुट यूजर से तभी मांगे जाते हैं, जब उनकी जरूरत होती है, जिस क्रम में उनकी जरूरत होती है। यदि एक ही समय में कई इनपुट की आवश्यकता होती है, तो वे सामान्य स्टैक ऑर्डर का पालन करते हैं, अर्थात, इनपुट जो सबसे बड़ा है (विस्तारित) स्टैक पहले दर्ज किया गया है।


2
इंप्लिक्ट इनपुट एक विशेषता है जो @flawr
लुइस

6
@flawr वास्तव में चतुर लड़का होना चाहिए। : डी
दोष

3

तार्किक सरणियों को अक्सर संख्यात्मक सरणियों के रूप में उपयोग किया जा सकता है

आप अक्सर TFशून्य और लोगों के सरणी शाब्दिकों के बजाय " " संकेतन का उपयोग कर सकते हैं। उदाहरण के लिए, FTFवही है [0,1,0], जो केवल मूल्यों का FTFउत्पादन करता logicalहै, doubleमूल्यों का नहीं । यह आमतौर पर कोई समस्या नहीं है, क्योंकि कोई भी अंकगणितीय ऑपरेशन तार्किक मानों को संख्याओं के रूप में मानेगा। उदाहरण के लिए, FTFQदेता है [1,2,1]( Q"1 से वृद्धि" है)।

कुछ मामलों में, बाइनरी में संख्या का रूपांतरण कम हो सकता है। उदाहरण के लिए, [1,0,1], TFTऔर 5Bएक जैसे हैं; फिर से सावधानी के साथ कि बाद के दो logicalमूल्य हैं।


ऐसा मामला जहां सूचक के रूप में उपयोग किए जाने पर TF(तार्किक) और [1 0](संख्यात्मक) के बीच अंतर होता है । logicalअनुक्रमणिका के रूप में उपयोग किए जाने वाले प्रकार की एक सरणी का अर्थ है: तत्संबंधी तत्वों को चुनें T, जिनके अनुरूप वे त्यागें F। इसलिए [10 20]TF)उत्पादन 10(पहले तत्व का चयन करें), जबकि [10 20][1 0])उत्पादन करता है [10 20](सूचकांक [1 0]की व्याख्या है 1:end, अर्थात, सरणी के सभी तत्वों को चुनें)।


3

आकार एन -1 के लूप के लिए

किदर जरा है

tnq:"...

साथ में

td"...

एक पूरी बाइट या अधिक तक बचाने के लिए ।


@ सच सच! मैंने सोचा था कि किसी को मूल वेक्टर की आवश्यकता हो सकती है जिसे लूप किया जा रहा है, लेकिन यह पहले दृष्टिकोण में भी संभव नहीं है। उस टिप्पणी को हटा देंगे।
Sanchises

लेकिन आप जरूरी नहीं कि 1 बाइट बचाएं; आप आप की जरूरत के आधार पर 1 या 2 को बचाने @/ X@पाश या नहीं के भीतर। शायद आप बस "बाइट्स को बचाने के लिए" कह सकते हैं
लुइस मेंडो

3

अंतर्निहित छोर का दोहन करने के लिए, लूप के भीतर से चीजों को स्थानांतरित करें

यदि उनके बाद कोई कोड नहीं है end, तो लूप स्टेटमेंट्स को छोड़ा] जा सकता है। वे MATL पार्सर से भरे हुए हैं।

इसलिए यदि आप लूप के बाद की चीजों को लूप के भीतर ले जा सकते हैं तो आप फाइनल को बचा सकते हैं ]

एक विशिष्ट उदाहरण के रूप में, निम्न कोड में पाया जाता है कि किसी संख्या के भाज्य में कितने अनुगामी शून्य हैं N(इसे यहां देखें ):

  • कोड से लूप 1करने के लिए N
  • उनमें से प्रत्येक संख्या के लिए यह अपने प्रमुख कारकों की गणना करता है, और यह निर्धारित करता है कि कितनी बार 5मौजूद है।
  • इसका उत्तर है कि संचित संख्या 5प्रकट होती है (यह काम करता है क्योंकि प्रत्येक के लिए 5कम से कम एक है 2)।

पहला विचार था :"@Yf5=]vs(ध्यान दें कि लूप के बाद स्टेटमेंट हैं):

:      % Range from 1 to implicit input
"      % For each number in that vector
  @    %   Push that number
  Yf   %   Vector of prime factors (with repetitions)
  5=   %   True for entries that equal `5`, and `false` for the rest
]      % End for
v      % Concatenate all vectors as a column vector
s      % Sum. Implicitly display

चूंकि vडिफ़ॉल्ट रूप से सभी स्टैक सामग्री को एकत्र करता है, इसलिए इसे लूप में स्थानांतरित किया जा सकता है। और इसके अलावा सहयोगी है, sइसे भी स्थानांतरित किया जा सकता है। यह ]कोड के अंत में निकलता है , और इस प्रकार इसे छोड़ा जा सकता है :"@Yf5=vs:

:      % Range from 1 to implicit input
"      % For each number in that vector
  @    %   Push that number
  Yf   %   Vector of prime factors (with repetitions)
  5=   %   True for entries that equal `5`, and `false` for the rest
  v    % Concatenate all vectors so far as a column vector
  s    % Sum. Inplicitly end loop and display

मैं इस चित्रलिपि-एक जैसे लिखित भाषा के बारे में नहीं जानता, लेकिन मैं शायद अगले तीन महीनों में इसका अध्ययन कर रहा हूं।
अब्रीराम

@ Agawa001 :-) आप पाएंगे कि यह मतलूब से काफी मिलता-जुलता है। आप यहां भी पूछ सकते हैं या टिप्पणी कर सकते हैं
लुइस मेंडो

3

एक खाली संख्यात्मक सरणी को परिभाषित करने के लिए छोटा रास्ता, अगर स्टैक खाली है

एक खाली संख्यात्मक सरणी को पुश करने के लिए जिसे आप आमतौर पर उपयोग करते हैं []। हालांकि, यदि स्टैक खाली है, तो आप एक बाइट का उपयोग करके बचा सकते हैं v। डिफ़ॉल्ट रूप से यह फ़ंक्शन सभी स्टैक सामग्री को लंबवत रूप से समेटता है, इसलिए यदि स्टैक खाली है तो यह खाली सरणी का उत्पादन करता है।

आप इसे यहां उदाहरण के लिए कार्रवाई में देख सकते हैं ।


2

MATLAB या ऑक्टेव की तुलना में कुछ फ़ंक्शन बढ़ाए गए हैं

यदि आप MATLAB या ऑक्टेव से आते हैं, तो आप पाएंगे कि कई MATL फ़ंक्शन उन भाषाओं में फ़ंक्शन के समान हैं। लेकिन उनमें से कुछ में कार्यक्षमता को बढ़ाया गया है।

एक उदाहरण के रूप में, MATLAB के reshapeफ़ंक्शन पर विचार करें , जो MATL में मेल खाता है e। कोड स्निपेट reshape([10 20 30 40 50 60], 2, 3)और reshape([10 20 30 40 50 60], 2, [])क्रमशः का अर्थ है "पंक्ति वेक्टर [10 20 30 40 50 60को 2 × 3 मैट्रिक्स में फिर से आकार दें", या "2-पंक्ति मैट्रिक्स में आवश्यकतानुसार कई कॉलम"। तो परिणाम, दोनों मामलों में, 2 डी सरणी है

10    30    50
20    40    60

असंगत आकारों के कारण कुछ त्रुटि reshape([10 20 30 40 50 60], 2, 2)या reshape([10 20 30 40 50 60], 5, [])त्रुटि होगी। हालांकि, Matl पहले मामले में तत्वों (निकाल देंगे इसे ऑनलाइन आज़माएं! शून्य से) या भरण दूसरे में ( ऑनलाइन यह कोशिश करो! ) का उत्पादन करने के लिए क्रमश:

10 30
20 40 

तथा

10 60
20  0
30  0
40  0
50  0

अन्य कार्य उनके MATLAB समकक्षों की तुलना में विस्तारित कार्यक्षमता होती है (संक्षिप्त सूची) S( sort), Yb( strsplit), m( ismember), h( horzcat), v( vertcat), Zd( gcd), Zm( lcm), YS( circshift), YA( dec2base), ZA( base2dec), Z"( blanks)।


1

पहले गैर-शून्य तत्व का सूचकांक प्राप्त करें, यदि कोई हो

fसमारोह सभी गैर शून्य एक सरणी के तत्वों के सूचकांक देता है। अक्सर आप पहले गैर-अक्षीय तत्व का सूचकांक चाहते हैं । यह होगा f1): लागू करें fऔर उसका पहला तत्व चुनें। लेकिन अगर मूल सरणी में कोई गैर-शून्य मान fनहीं है, तो एक खाली सरणी ( []) का उत्पादन होगा , और इसके पहले तत्व को चुनने की कोशिश एक त्रुटि देगा।

कम से कम एक , और []अन्यथा , पहले तत्व का सूचकांक प्राप्त करने के लिए एक आम, अधिक मजबूत आवश्यकता है । यह ifबाद में एक शाखा के साथ किया जा सकता है f, लेकिन यह बाइट-महंगा है। बेहतर तरीका यह है fX<कि, X<आउटपुट के लिए न्यूनतम फ़ंक्शन लागू करें fX<एक खाली सरणी देता है जब उसका इनपुट एक खाली सरणी होता है।

इसे ऑनलाइन आज़माएं! (ध्यान दें कि एक खाली सरणी बिल्कुल भी प्रदर्शित नहीं होती है)। या यहां काम पर इसका एक उदाहरण देखें ।


1

किसी दिए गए सरणी के रूप में एक सीमा उत्पन्न करें

TL; WR : fइसके बजाय का उपयोग करें n:यदि सरणी में केवल गैर-अक्षीय तत्व हैं।


यह अक्सर ऐसा होता है कि किसी को एक सरणी उत्पन्न करने की आवश्यकता होती है [1 2 ... L]जहां Lकिसी दिए गए सरणी के तत्वों की संख्या होती है। ऐसा करने का मानक तरीका है n:। उदाहरण के लिए, कोड tn:*इनपुट के रूप में एक संख्यात्मक वेक्टर लेता है और प्रत्येक प्रविष्टि को इसके सूचकांक से गुणा करता है।

यदि दी गई सारणी में केवल नॉनज़रो प्रविष्टियाँ होने की गारंटी दी गई है (उदाहरण के लिए, यह धनात्मक पूर्णांकों द्वारा बनाई गई है, या मुद्रण योग्य वर्णों के साथ एक स्ट्रिंग है), n:द्वारा प्रतिस्थापित किया जा सकता है f, जो गैर-अक्षीय प्रविष्टियों के सूचक के साथ एक सरणी का निर्माण करता है। तो उपरोक्त कोड बन जाता है tf*, जो 1 बाइट बचाता है।

कुछ और विस्तृत उदाहरण: 1 , 2 , 3


1

संख्यात्मक सरणी शाब्दिक रूप से कुशलतापूर्वक परिभाषित करना

यहाँ कुछ तरीके हैं जो संख्यात्मक सरणी शाब्दिकों को परिभाषित करते समय बाइट्स को बचाने के लिए उपयोग किए जा सकते हैं। उदाहरण के उत्तर के लिए लिंक दिए गए हैं जो उनका उपयोग करते हैं। इन्हें @Suever द्वारा बनाई गई एनालिटिक्स स्क्रिप्ट का उपयोग करके प्राप्त किया गया है ।

संघटन और पूर्वनिर्धारित शाब्दिक

छोटी संख्या के साथ सरणियों के लिए आप कभी-कभी संघनन (कार्यों hऔर v) का उपयोग कर सकते हैं , साथ ही विभाजकों के रूप में रिक्त स्थान का उपयोग करने से बचने के लिए पूर्वनिर्धारित शाब्दिक: तुलना [2 4], 2 4hऔर 2Kh, जिनमें से सभी सरणी को परिभाषित करते हैं [2 4]। इसी तरह, 2K1vएक खाली ढेर के साथ परिभाषित करता है [2; 4; 1]उदाहरण है

संख्यात्मक सरणी शाब्दिक के भीतर पत्र

थोड़ी बड़ी संख्या के लिए आप इस तथ्य का फायदा उठाते हुए रिक्त स्थान को बचा सकते हैं कि कुछ अक्षरों में सरणी शाब्दिक में संख्यात्मक अर्थ हैं। तो इसके बजाय [3 5 2 7;-4 10 12 5]आप उपयोग कर सकते हैं [IAHC;dX12A]उदाहरण है

विशेष रूप से, सरणी शाब्दिक के भीतर,

  • O, l, H I Kअपने सामान्य अर्थ है 0, ...,4
  • A, ..., Eमाध्य 5, ...,9
  • X माध्यम 10
  • a, ... dमतलब -1, ...,-4
  • Jऔर Gमाध्य 1jऔर-1j
  • P माध्यम pi
  • Y माध्यम inf
  • Nका मतलब है NaN

स्ट्रिंग और लगातार अंतर

बड़ी संख्या के लिए, एक स्ट्रिंग को परिभाषित करना और इसके निरंतर अंतरों की गणना करना (के साथ d) मदद कर सकता है: इसके बजाय [20 10 35 -6]आप उपयोग कर सकते हैं '!5?b\'d। यह काम करता है क्योंकि dमतभेदों की गणना के लिए वर्णों के कोड बिंदुओं का उपयोग करता है। उदाहरण है

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