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


18

अब जब मैं कोड गोल्फ का आदी हो गया हूं, तो शायद यह समय है कि मैं कुछ गोल्फ भाषाओं को लेने की कोशिश करूं।

यह देखते हुए कि मैं जावास्क्रिप्ट, जाप में लगभग विशेष रूप से खेलता हूं शुरू करने के लिए तार्किक भाषा की तरह लगता है। मैं अगले अवसर पर दस्तावेज में डाइविंग करूँगा, लेकिन इस बीच, नीचे दिए गए उत्तरों में आपके पास Japt के लिए कोई भी सुझाव दें।

जैसा कि मैं सामान्य रूप से जाप और गोल्फ भाषाओं में शुरुआत कर रहा हूं, अगर आप अपने सुझावों को जावास्क्रिप्ट में "ट्रांसलेट" कर सकते हैं, जहां संभव हो, तो मुझे चीजों के साथ पकड़ बनाने में मदद करने में एक बड़ी मदद होगी।


हेह, इस पोस्ट करने के लिए धन्यवाद। मैं ऐसा करने से रोक रहा था क्योंकि मैं किसी बिंदु पर जाप को फिर से डिज़ाइन करना चाहूंगा, लेकिन यह जल्द ही कभी भी नहीं होगा, और यह शायद वैसे भी बहुत सारे सुझावों को गड़बड़ नहीं करेगा। खुद के लिए टिप: एक ट्यूटोरियल लिखें: पी
ETHproductions

जाप चैटरूम की यात्रा करना न भूलें :)
ओलिवर

जवाबों:


11

जावास्क्रिप्ट से जाप की ओर बढ़ते हुए

जैसा कि आप जानते हैं, Japt केवल जावास्क्रिप्ट का एक छोटा, विस्तारित संस्करण है। मैंने जाप बनाया क्योंकि मैं लंबी संपत्ति के नाम, जैसे String.fromCharCode(x)और Math.floor(x), और एक सीमा बनाने जैसी चीजों को करने की थकाऊता से थक गया था । यहाँ जावास्क्रिप्ट से जाप के लिए जाने के लिए आपको न्यूनतम न्यूनतम जानना होगा:

  • जाप एक परिवर्तित भाषा है; Japt कोड को जावास्क्रिप्ट में ट्रांसफ़र किया जाता है और फिर JS के रूप में चलाया जाता है। (मुझे लगता है कि आप कह सकते हैं कि संकलित किया जा सकता है , लेकिन ट्रांसप्लड लगता है अधिक हिपस्टर। अस्वीकरण: मुझे पता है कि हिपस्टर होने के बारे में कुछ भी नहीं है)
  • सभी प्रविष्टियां डिफ़ॉल्ट रूप से पूर्ण कार्यक्रम हैं। इनपुट परोक्ष पार्स किया गया है, और पहले छह आदानों चर में डाल रहे हैं U, V, W, X, Y, औरZ ; पूर्ण सरणी में संग्रहीत है N। अंतिम अभिव्यक्ति का परिणाम स्वचालित रूप से मुद्रित होता है।
  • सभी बड़े अक्षर परिवर्तनशील होते हैं, और ट्रांसपेल होने पर समान रहते हैं। अधिकांश में प्रीसेट मान होते हैं, जिन्हें आप Japt डॉक्स के "वेरिएबल्स" खंड में ( दुभाषिया पर ) पा सकते हैं।
  • सभी लोअरकेस अक्षर प्रोटोटाइप फ़ंक्शंस, या विधियाँ हैं । जाप संख्याओं, तारों और सरणियों पर विधियों a- z(और à- ÿ) को जोड़ता है । जब आप एक इन पत्रों का उपयोग करते हैं, Japt में भर जाता है .और( ; Ucजाप U.c(में जावास्क्रिप्ट के बराबर होता है, जिसका अर्थ छत, चारकोड, या कंकट हो सकता है, जो कि प्रकार के आधार पर होता है U। यह वह जगह है जहाँ से अधिकांश जाप की शक्ति आती है; आप जाप डॉक्स ( दुभाषिया में ) के "_____ फ़ंक्शंस" खंडों के तहत इन तरीकों की पूरी सूची पा सकते हैं ।
  • एक स्थान का प्रतिनिधित्व करता है ), और )प्रतिनिधित्व करता है ))। ऐसा इसलिए है क्योंकि जब मैंने पहली बार जप्‍ता को डिजाइन किया था, तो मैं अधिक से अधिक बाइट बचाना चाहता था, और यही मैंने पहली बार ऐसा करने के बारे में सोचा था। (हालांकि , IMHO की Us w nतुलना में बेहतर दिखता है Us)w)n)।)
  • एक फ़ंक्शन के रूप में चिह्नित किया जाता है ABC{...}, जहां ABCचर के किसी भी स्ट्रिंग हो सकता है। जेएस में वे सबसे अधिक भाग के लिए कार्य करते हैं, अंतिम अभिव्यक्ति होने का मुख्य अंतर स्वचालित रूप से वापस आ जाता है (बजाय returnES6 कोष्ठक का उपयोग करने या फैंसी होने के लिए )।
  • 'एक सिंगल चार स्ट्रिंग को दर्शाता है (यानी 'aजैसा है "a"), और #अगला चार-कोड लेता है और वह नंबर बन जाता है ( #eजैसा है 101)।
  • डॉलर के संकेतों के बीच कुछ भी $ वाष्पोत्सर्जन प्रक्रिया के दौरान समान रहता है। forउदाहरण के लिए, लूप को लागू करने के लिए आप इसका उपयोग कर सकते हैं , क्योंकि जाप के पास वे नहीं हैं, लेकिन मैं अन्य तरीकों (जैसे mस्ट्रिंग्स और सरणियों, या oसंख्याओं पर) का उपयोग करने का सुझाव दूंगा ।
  • अधिकांश अन्य वर्ण सामान्यतः जे एस में इस्तेमाल किया - "", 0-9, (,+ , =, आदि - एक ही जब (वैसे भी अधिकांश भाग के लिए,) transpiled रहते हैं।

और यह सब आपको बुनियादी Japt कोड लिखने के लिए पता होना चाहिए। जाप में अधिकतम गोल्फ शक्ति प्राप्त करने के लिए अधिक ज्ञान की आवश्यकता होती है, लेकिन यह अन्य उत्तरों में पाया जा सकता है।


यहाँ एक मूल उदाहरण है। मान लें कि आपको ASCII वर्णों की एक स्ट्रिंग लेनी है और प्रत्येक को उसके हेक्साडेसिमल चार कोड के साथ बदलना है। यहां बताया गया है कि आप जावास्क्रिप्ट में ऐसा कैसे कर सकते हैं:

U.split("").map(x=>x.charCodeAt(0).toString(16)).join("")

अब जाप में परिवर्तित करना है। .split("")जेएस q""में Japt के बराबर है , या उससे भी कम, बस q.join("")बस यह भी है q, अंतर यह है कि ऑब्जेक्ट एक स्ट्रिंग के बजाय एक सरणी है। .map(है m, .charCodeAt(है cऔर .toString(है s। तो हमारा Japt कोड ऐसा लग सकता है:

Uq mX{Xc0 s16} q 

हालांकि, जाप में, mसरणियों पर होने वाले तार पर भी काम करता है, इसलिए हम दोनों को हटा सकते हैं q:

UmX{Xc0 s16}

इसे ऑनलाइन टेस्ट करें! जैसा कि आप "जेएस कोड" बॉक्स में देख सकते हैं, यह सीधे ट्रांसपाइल को:

U.m(function(X){return X.c(0).s(16)})

जैसे ही आप Japt के साथ काम करना सीख जाते हैं, आप जावास्क्रिप्ट से आगे और पीछे की ओर एकाग्र होने पर कम से कम केंद्रित हो जाते हैं और अपनी भाषा के रूप में Japt में कोड करने में सक्षम हो जाते हैं। यहां जावास्क्रिप्ट भाग को पूरी तरह से छोड़ने का स्पष्टीकरण दिया गया है:

UmX{Xc0 s16}
               // Implicit: U = input string
UmX{       }   // Take U, and replace each character X with the result of this function:
    Xc0        //   Take the char-code at index 0 in X (the first and only one).
        s16    //   Convert this to a hexadecimal string.
               // Implicit: output result of last expression

एक और कदम दिखाने के लिए बेहतर हो सकता है: यूनिकोड शॉर्टकट। इस मामले में, हम उनके साथ 2 बी बचाते हैं। इसके अलावा, आप यह जोड़ना चाहते हैं कि आप कुछ चीजों को अंत में छोड़ सकते हैं। इससे एक और बाइट बच जाएगी।
ल्यूक

एक उत्कृष्ट प्राइमर, धन्यवाद, ईटीएच। वहाँ पर्याप्त है, मुझे लगता है, मुझे कुछ सरल चुनौतियों पर शुरू करने के लिए।
झबरा

अब तक मैंने README से जो चमक हासिल की है, उसे मिलाकर क्या मैं सही होगा कि ऊपर दिए गए उदाहरण को और छोटा किया जा सकता है Um_c s16?
झबरा

या, अभी भी कम ¡Xc s16:?
झबरा

1
@ सुग्गी तुम सही हो! यार, तुम यह जल्दी पता लगा ;-) मैं कुछ बुनियादी Japt गोल्फ युक्तियाँ (जैसे यूनिकोड शॉर्टकट और जैसे) जोड़ दूंगा, शायद अन्य उत्तरों के रूप में।
ETHproductions

8

स्ट्रिंग Arrays संपीड़ित

अद्यतन: इस टिप में चित्रित उपकरण तब से फिर से लिखे, सुधारे गए और मेरे जाप दुभाषिया में एकीकृत किए गए हैं । सर्वोत्तम परिणामों के लिए यह अनुशंसा की जाती है कि आप उस कंप्रेसर का उपयोग नीचे दिए गए लिंक में से किसी एक पर करें। जब मेरे पास कुछ और समय होगा तो मैं इस टिप को फिर से लिखूंगा और इसे नए कंप्रेसर के साथ फिर से लिखूंगा।

परिचय

यदि आपके पास अपने कोड में स्ट्रिंग्स की एक सरणी है, तो इसे संपीड़ित करने का सबसे स्पष्ट तरीका व्यक्तिगत रूप से प्रत्येक स्ट्रिंगOc को चलाना होगा । इस टिप के प्रयोजनों के लिए, हम सरणी के साथ काम करेंगे ["lollipop","marshmallow","nougat","oreo"], जिसका वजन शुरुआत में 42 बाइट्स पर होता है। प्रत्येक तार के माध्यम Ocसे हमें देता है:

[`lo¥ipop`,`Ú\hÚaow`,`Í`,`eo`]

यह अब 33 बाइट्स है, एक सभ्य बचत है।


चरण 1

लेकिन , हम बेहतर कर सकते हैं। अगर हम सरणी को एक नईलाइन से अलग स्ट्रिंग में शामिल करते हैं, तो हम अपने सरणी को प्राप्त करने के लिए कोष्ठक, अल्पविराम, और बाहरी बैकटिक्स से छुटकारा पा सकते हैं और न्यूलाइन पर विभाजित हो सकते हैं। हमारे उदाहरण सरणी पर लागू करने से हमें निम्नलिखित मिलता है:

`lo¥ipop
Ú\hÚaow
Í
eo`·

नीचे अब 26 बाइट्स हैं।


चरण 2

लेकिन , हम अभी भी बेहतर कर सकते हैं! हम एक न्यूलाइन के बजाय स्ट्रिंग्स को डिलीट करने के लिए एक लोअरकेस लेटर का उपयोग कर सकते हैं, जो सम्पीडन में शामिल हो सकता है। zहमारे किसी भी तार का उपयोग नहीं किया जाता है ताकि हम उसे छोड़ दें और देखें कि हम कैसे प्राप्त करते हैं।

`lo¥ipopzÚ\hÚaowzÍzeo`qz

आह, नट - वहां कोई सुधार नहीं; हमारी बाइट की गिनती एक-एक करके बढ़ गई है! एक और पत्र हो सकता है जिसका आप उपयोग कर सकते हैं, लेकिन आपके तार के आधार पर, बहुत कुछ करने की कोशिश की जा सकती है - हमारे उदाहरण में 11 हैं b,c,d,f,j,k,q,v,x,y,z:। प्रत्येक की कोशिश करना बहुत थकाऊ होगा, जो इस काम के उपकरण में आता है; इसे अपनी नई लाइन से अलग तार खिलाएं और यह प्रत्येक अक्षर के साथ तारों को परिसीमित करने की कोशिश करेगा जो उनमें से किसी में भी शामिल नहीं है:

  • सबसे छोटी संकुचित स्ट्रिंग,
  • यह उपयोग करता है, और
  • इसकी लंबाई।

इसके माध्यम से हमारे सैंपल स्ट्रिंग्स को चलाने से पता चलता है कि bसर्वोत्तम परिणाम मिलते हैं:

`lo¥ipáæqrÚaowbÍÞo`qb

और आपके पास यह है, हम सिर्फ 24 बाइट्स के लिए नीचे हैं।


चरण 3

लेकिन , हम और भी बेहतर कर सकते हैं ! यदि आपके एरे में तार का क्रम मायने नहीं रखता है, तो हो सकता है कि एक अलग-अलग परिसीमन के साथ एक अलग क्रमबद्धता हो जो कम से कम काम कर सके। प्रत्येक संभावना की कोशिश बहुत अधिक थकाऊ होने जा रही है, हालांकि। हमारे 4 स्ट्रिंग्स के साथ, 24 अलग-अलग क्रमांकन करने की कोशिश की जा रही है। 11 संभावित पत्रों में से प्रत्येक 264 हो जाता है! यहीं से यह उपकरण चलन में आता है। फिर से, इसे अपनी नईलाइन को अलग किए गए तार से खिलाएं और यह हर क्रमचय और हर परिसीमन पत्र, आउटपुट के हर संयोजन की कोशिश करेगा:

  • कम से कम संकुचित स्ट्रिंग में तार का क्रम
  • संकुचित स्ट्रिंग,
  • सीमांकक इसका उपयोग करता है, और,
  • इसकी लंबाई।

इसके माध्यम से हमारे नमूना तार रनिंग पता चलता है कि "nougat","oreo","lollipop","marshmallow"के साथ bएक परिसीमक सबसे अच्छा परिणाम देता है के रूप में, केवल 23 के अंतिम बाइट गिनती के साथ:

`ÍÞo½o¥ipáæqrÚaow`qb


बोनस टिप: पूर्णांक सरणी संपीड़न

आप एक ही सिद्धांत को पूर्णांक के सरणियों में लागू कर सकते हैं, पहले प्रत्येक को एक उच्च आधार पर परिवर्तित करके। इस नमूने का उपयोग करते हुए, 36 बाइट सरणी:

[588181,156859,595676,475330,680474]

हम इसे 29 बाइट्स तक प्राप्त कर सकते हैं, पहले इसे आधार के 32 तारों की एक सरणी में परिवर्तित करके और फिर इसे पहले संपीड़न कार्यक्रम के माध्यम से चला सकते हैं:

`huclt4p5r5ÛÊg62tkogq`qt mnH

या दूसरे कार्यक्रम का उपयोग करते हुए 27 बाइट्स जितना कम:

`4p5Ïcl5ÛÊg62tkogq`qt mnH

हो सकता है कि पूर्णांक रूपांतरण को आप पहले से चला रहे विधि में पूर्णांक रूपांतरण को स्थानांतरित करके उस पर एक और बाइट या 2 बचा सकें।


टिप्पणियाँ

  1. 1 या 2 अतिरिक्त बाइट की q<letter>(<space>)लागत से अधिक कारक को मत भूलना ·। हालाँकि, आप अपने सीमांकक के आधार पर एक बाइट वापस पाने के लिए यूनिकोड शॉर्टकट्स में से एक का उपयोग करने में सक्षम हो सकते हैं ( यह उसी तरह हैql<space> उदाहरण के लिए ) के ।
  2. अंतिम उपकरण का उपयोग करते समय सावधानी का एक शब्द: आपके पास जितने अधिक तार होंगे, उतने अधिक क्रमपरिवर्तन होंगे और कार्यक्रम धीमा हो जाएगा, जब तक कि यह अंततः बाहर नहीं निकलता। जैसा कि ऊपर विस्तृत है, हमारे 4 सैंपल स्ट्रिंग्स और कोशिश करने के लिए 11 संभावित अक्षरों के साथ, 264 संभावित संयोजन हैं, एक ही 11 अक्षरों के साथ स्ट्रिंग्स की संख्या केवल 1 बढ़ाएं और हमारे पास कोशिश करने के लिए पहले से ही 1320 संयोजन हैं। (आप चाहें तो संयोजनों की संख्या की गणना करने के लिए इस उपकरण का उपयोग कर सकते हैं)।

क्रेडिट

  • इस टिप में पाए गए उपकरण बनाने की प्रेरणा के लिए ओलिवर।
  • प्रूफरीडिंग के लिए ETHproductions।

6

कंपते हुए तार

Japt (वर्तमान में) स्ट्रिंग कंप्रेशन के लिए shoco लाइब्रेरी का उपयोग करता है । Ocजब तक इसमें लोअरकेस अक्षरों के रन होते हैं, आप एक मनमाने स्ट्रिंग का उपयोग कर सकते हैं :

Oc"Hello, World!"

यह आउटपुट HÁM, WŽld! (अच्छी तरह से, Žतकनीकी रूप से एक अविश्वसनीय चरित्र है)। आप इसे बैकटिक्स में लपेटकर इसे विघटित कर सकते हैं:

`HÁM, WŽld!`

इसे ऑनलाइन टेस्ट करें!

वैकल्पिक रूप से, आप Odएक मनमाना स्ट्रिंग को विघटित करने के लिए फ़ंक्शन का उपयोग कर सकते हैं । यह आमतौर पर उपयोगी नहीं है, लेकिन इसके उद्देश्य हैं ...


इसलिए, अगर मैं "हैलो, वर्ल्ड!" का जवाब दे रहा था। चुनौती, मैं बस का उपयोग HÁM, WŽld!करेंगे या यह backticks में संलग्न होने की आवश्यकता होगी? मैं बाद का अनुमान लगा रहा हूं।
झबरा

2
@Saggy जब किसी प्रश्न का उत्तर दिया जाता है तो आपको सभी कोड शामिल करने होंगे, ताकि `HÁM, WŽld हो जाए! इस मामले में
मार्टिज़न विसेर्स

6

चार-संहिताओं के साथ लघुकरण संख्या

जाप में, आप उपयोग कर सकते हैं # एक वर्ण का , इसके बाद चार-कोड बना सकते हैं। यह अधिक संख्या को छोटा करने पर काम आता है।

जैसा कि @ETHproductions ने उल्लेख किया है, यह केवल 100-255 की सीमा में तीन अंकों के रन पर काम करता है, जब तक कि आप UTF-8 पर स्विच करने के लिए तैयार नहीं होते हैं।

उदाहरण:

123 को छोटा किया जा सकता है #{

101 को छोटा किया जा सकता है #e

तुम भी एक साथ इन श्रृंखला कर सकते हैं:

123101 को छोटा किया जा सकता है #{#e

आप String.fromCharCode(123)जावास्क्रिप्ट में उपयोग कर सकते हैं , या123d उपयुक्त चरित्र खोजने के लिए जाप ।

String.fromCharCode(123) रिटर्न {


धन्यवाद, @obarakon, गेंद को रोल करने के लिए शानदार टिप; String.fromCharCode()उनमें से एक है (कई!) बहुत लंबे जेएस तरीके जो आपके बाइट की गिनती को टैंक कर सकते हैं। संभवतः, इन्हें पूर्णांक माना जाएगा? यानी, यदि मुझे 123किसी समाधान में पूर्णांक की आवश्यकता है, तो मैं #{एक बाइट को बचाने के लिए उपयोग कर सकता हूं ।
झबरा

1
हां, ये पूर्णांक हैं। यदि आप -Qध्वज को अपनी इनपुट विंडो में जोड़ते हैं, तो आप आउटपुट प्रकार को बेहतर तरीके से देख सकते हैं: तार , सरणियों , आदि के आसपास के उद्धरण
ओलिवर

1
आपको उल्लेख करना चाहिए कि String.fromCharCode(123)जावास्क्रिप्ट में काम करता है, लेकिन आप 123dउसी परिणाम को प्राप्त करने के लिए जाप में कर सकते हैं ;; और इसके अलावा, यह केवल सीमा में तीन अंकों के रन पर काम करता है100 - 255(जब तक कि आप यूटीएफ -8 में स्विच करने के लिए तैयार नहीं हैं)
ETHproductions

@ETHproductions अच्छी कॉल, अद्यतन!
ओलिवर

5

त्वरित टिप: खाली सरणी []

जाप में खाली सरणी के लिए एक स्थिरांक है A:। लेकिन, इसे एक्सेस करने के लिए, आपको ;जाप के वैकल्पिक स्थिरांक का उपयोग करने के लिए अपने प्रोग्राम के लिए एक अर्धविराम प्रस्तुत करना Aहोगा , अन्यथा होगा 10। तो का उपयोग कर ;Aवास्तव में एक 0 बाइट से अधिक की बचत प्रदान करता है [], लेकिन जाएगा आप बाइट्स यदि आप एक चर करने के लिए अपने सरणी सौंपने होंगे बचाने (जैसे,A=[] )।

हालाँकि, यदि (और केवल अगर) आपका प्रोग्राम कोई इनपुट नहीं ले रहा है, तो आप Nवेरिएबल का उपयोग करके सिर्फ 1 बाइट के साथ खाली एरे को एक्सेस कर सकते हैं , जो कि इनपुट्स का एरे है - बिना किसी इनपुट के, यह खाली होगा। इसे यहाँ आज़माएँ

यह भी आप अपने प्रोग्राम में डिफ़ॉल्ट निरंतर मूल्यों का उपयोग करें और कुछ मामलों में, करने के लिए अनुमति की अतिरिक्त लाभ है है, कर सकते हैं अभी भी सेव आप का उपयोग करने पर बाइट्स ;Aभी जब अपने कार्यक्रम के लिए शॉर्टकट के लिए इनपुट धन्यवाद ले जा रहा है s1और s2


2
वाह, मैं Nअच्छा विचार का उपयोग करने के बारे में नहीं सोचा था ।
ETHproductions

2
अच्छा लगा, @ शगुन!
ओलिवर

4

जावास्क्रिप्ट का मूल्यांकन

जाप आपको चारों ओर लपेटकर कच्चे जावास्क्रिप्ट को निष्पादित करने की अनुमति देता है $...$

उदाहरण के लिए, $alert("hello world")$

इसे जाप के ऑटो-समापन का लाभ उठाकर छोटा किया जा सकता है $ और )

$alert("hello world")$ को छोटा किया जा सकता है $alert("hello world"

जावास्क्रिप्ट को सम्‍मिलित करना

आप जावास्क्रिप्ट का उपयोग कर सेक भी कर सकते हैं Ox

यदि कोई जावास्क्रिप्ट फ़ंक्शन है जिसे आप उपयोग करना चाहते हैं screen.width, तो कहें , आप स्ट्रिंग "screen.width"का उपयोग करकेOc संपीड़ित कर सकते हैं , फिर ऑक्सी के बीच परिणाम डालें ...

ध्यान दें कि जब आपको किसी और चीज का पालन नहीं किया जाता है तो आपको जाप में समापन कोट्स की आवश्यकता नहीं है।


@ शैगी आपको Oxस्ट्रिंग का मूल्यांकन करने की आवश्यकता है । अन्यथा, आप बस पाठ का उत्पादन करेंगे "screen.width"उदाहरण
ऑलिवर

4

झंडे को जानिए

के अनुसार नवीनतम मेटा आम सहमति (दिसम्बर 2017) , कमांड लाइन झंडे अब बाइट्स की ओर गिना जाता है। यह वास्तव में Japt के लिए एक बहुत अच्छी खबर है क्योंकि इसमें इनपुट / आउटपुट पर अतिरिक्त उपचार के लिए कई झंडे हैं।

मूल्यांकन के क्रम में जाप में सभी उपलब्ध झंडे नीचे वर्णित हैं । एक ही समूह में झंडे एक दूसरे के लिए अनन्य हैं। ध्यान दें कि अलग-अलग समूहों में झंडे की तरह कुछ है, जिसके परिणामस्वरूप संयोजन में उपयोग किया जा सकता है इस :)

mdefæ

पूरे कार्यक्रम को पहले तर्क ( U) पर मैप किया गया है ।

यदि अधिक तर्क मौजूद हैं, तो उन्हें (यानी जोड़ीदार मैप नहीं ) के रूप में पारित किया जाता है । अन्यथा, दूसरा तर्क सूचकांक है, और तीसरा संपूर्ण सरणी है, जैसे U.m। यदि Uएक संख्या है, तो इसे श्रेणी में परिवर्तित किया जाता है; यदि स्ट्रिंग, यह वर्णों की सरणी में बदल जाती है और परिणाम एक साथ जुड़ जाते हैं।

  • -m: ऊपर लागू होता है और कुछ नहीं।
  • -d: रिटर्न trueअगर कुछ परिणाम सत्य है, falseअन्यथा।
  • -e: रिटर्न trueअगर सभी परिणाम सत्य हैं, falseअन्यथा।
  • -f: उन तत्वों के सरणी लौटाता है Uजिनके परिणाम सत्य हैं।
  • : लागू होता है -fऔर अपना पहला तत्व देता है।

gh

निर्दिष्ट सूचकांक पर एक तत्व लेता है।

  • -g: पहला तत्व लेता है (सूचकांक ०)।
  • -gX: सूचकांक में तत्व लेता है X(कोई भी सकारात्मक पूर्णांक हो सकता है)।
  • -h: अंतिम तत्व लेता है।

परिणाम को बूलियन में बदलें।

  • -!: बूलियन लागू न करें।
  • : बूलियन को दो बार लागू करें (सत्यता लौटाता है)।

N

परिणाम को संख्या में बदलें। यूनीरी प्लस का उपयोग किया जाता है।

PRSQ

किसी प्रकार के स्ट्रिंग में परिवर्तित करें।

  • -P: सरणी के साथ जुड़ें ""
  • -R: सरणी के साथ जुड़ें "\n"
  • -S: सरणी के साथ जुड़ें " "
  • -Q: लागू करें JSON.stringify(किसी भी वस्तु हो सकता है, न केवल एक सरणी)। उदाहरण है

x

फ़ंक्शन xको आउटपुट पर लागू करता है । (यह शाब्दिक है x, "कोई एकल लोअरकेस वर्णमाला फ़ंक्शन" नहीं।)

  • ऐरे: सम।
  • स्ट्रिंग: दोनों सिरों से ट्रिम।
  • संख्या: पूर्णांक के लिए गोल।

2
ध्यान दें कि झंडे का उपयोग करना एक जाप सबमिशन के रूप में नहीं गिना जाता है, हालांकि यह जाप-के साथ उन विशिष्ट-झंडे-भाषा-प्रस्तुत के रूप में गिना जाता है।
नाइट

3

यूनिकोड शॉर्टकट

जैसे Japt में कई आम संरचनाओं कि सिर्फ एक ASCII वर्ण में संग्रहीत नहीं किया जा सकता है, कर रहे हैं qS , p2 , mX{, , आदि तो यह चारों ओर पाने के लिए, Japt "यूनिकोड शॉर्टकट" है, जो सीमा में चरित्र है \xA1- \xDE( ¡- Þ) जो इन सामान्य संरचनाओं का विस्तार करते हैं। आप दुभाषिया डॉक्स में इनकी पूरी सूची पा सकते हैं ।

इसके अतिरिक्त, कार्यों का निर्माण करने में मदद करने के लिए @खड़ा है XYZ{, और _खड़ा है Z{Z। तो चलिए एक और उत्तर से हमारे उदाहरण कार्यक्रम को गोल्फ करते हैं :

UmX{Xc0 s16}

सबसे पहले, हम जगह ले सकता है X{Xके साथ _है, जो हमें देता है:

Um_c0 s16}

तो हम एक और बाइट m_को ®बचाने के साथ बदल सकते हैं :

U®c0 s16}

या क्या हम बदल सकते X{के साथ @है, जो हमें देता है:

Um@Xc0 s16}

इसके बाद हमें ¡दो बाइट्स को बचाने के लिए शॉर्टकट का उपयोग करने की अनुमति देता है :

¡Xc0 s16}

इन दो रास्तों में से एक को दूसरे की तुलना में 1 बाइट छोटा किया जा सकता है। क्या आप यह पता लगा सकते हैं कि


1
®c s166 बाइट्स के लिए - क्या मैं एक कुकी जीतता हूं?
झबरा

); @Shaggy यदि आप कठिन पर्याप्त देखो ... 1 अधिक बाइट बचा सकता है
ETHproductions

यह होगा ®c sG?
शैगी

1
हां! मुझे लगता है कि आप जा सकते हैं जितना कम है। बहुत बढ़िया! :-)
ETHproductions

2
कुछ ही महीनों में जाप की प्रगति को देखकर, इन पर आश्चर्यजनक प्रभाव पड़ा। यह अब हासिल किया जा सकता है csG
झबरा

3

पूर्व निर्धारित चर का लाभ उठाएं

चर A- Sवे सामान्य मान हैं जो जाप में प्रदर्शित करने के लिए एक से अधिक बाइट लेते हैं:

  • A- Gहैं 10- 16
  • Hहै 32, Iहै 64, Jहै -1, Lहै 100
  • Kके रूप में परिभाषित किया गया है new Date(), जिसे आप विभिन्न तरीकों से हेरफेर कर सकते हैं।
  • Mऔर Oविभिन्न उपयोगी कार्यों के साथ ऑब्जेक्ट हैं। आप डॉक्स में अधिक जान सकते हैं।
  • Pखाली स्ट्रिंग है, Qएक उद्धरण चिह्न है, Rएक नया अंक है, और Sएक स्थान है।
  • Tके लिए सेट किया गया है 0, इसलिए यदि आवश्यक हो , तो आप इसे एक संचायक के रूप में उपयोग कर सकते हैं।

यदि प्रोग्राम का पहला वर्ण अर्धविराम है ;, तो A-Lनिम्नानुसार रीसेट किया जाता है:

  • Aखाली सरणी है []
  • Bहै "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  • Cहै "abcdefghijklmnopqrstuvwxyz"
  • Dहै "QWERTYUIOP\nASDFGHJKL\nZXCVBNM"
  • Eहै "[a-z]", और Fहै"[A-Za-z]" (उपयोगी इससे पहले कि मैं इन regex सुविधाओं के रूप में जोड़ा)
  • Gहै 36, Hहै 65, और Iहै 91(वर्णमाला पर्वतमाला के लिए उपयोगी)।
  • Jएक एकल अल्पविराम है; L, एक एकल अवधि।

आजकल केवल A, B, C, और Dइस सूची से वास्तव में उपयोगी होते हैं। मैं एक बेहतर प्रणाली जोड़ने की योजना बना रहा हूं, जो अधिकतम 256 बाइट्स वैरिएबल देता है, जो इन मूल्यों और पूरे बहुत अधिक के लिए पूर्व निर्धारित होगा।


3

ऑटो-कार्यों का उपयोग करें

आप सबसे अधिक संभावना पहले से ही जानते हैं कि @और क्रमशः के _लिए शॉर्टकट हैं, XYZ{और यूनिकोड शॉर्टकट में शामिल हैंZ{Z उत्तर में शामिल) के । लेकिन कभी-कभी आप कार्यों को और भी कम कर सकते हैं।

मान लीजिए कि आपके पास वर्णों की एक सरणी है और आप प्रत्येक चरित्र को उसके चार-कोड में मैप करना चाहते थे। आप इनमें से किसी एक के साथ कर सकते हैं:

mX{Xc} 
m_c} 

लेकिन एक बेहतर तरीका है। यदि कोई विधि या ऑपरेटर किसी अन्य विधि या a के बाद पहला आइटम है (, तो यह स्ट्रिंग में बदल जाता है। तो ये दो पंक्तियाँ बराबर हैं:

r'a'b  // Replace all "a"s with "b"s; transpiles to .r("a","b")
ra'b   // Does the same thing, 1 byte less; transpiles to the same thing

लेकिन यह हमारे कार्यों के साथ कैसे मदद करता है? खैर, अधिकांश विधियाँ जो फ़ंक्शन को स्वीकार करती हैं, यदि किसी विधि या ऑपरेटर का प्रतिनिधित्व करने वाला एक स्ट्रिंग दिया जाता है, तो यह एक फ़ंक्शन के रूप में व्याख्या करेगा। जिसका अर्थ है कि आप यह भी कर सकते हैं:

m_c}  // Map each item to its char code
m'c   // Does the same thing, 1 byte less
mc    // Also does the same thing, 2 bytes less

मैं इन "ऑटो-फ़ंक्शंस" को बुलाता हूं। कई अलग-अलग किस्में हैं:

  • m@Xc}mc
  • m@Xc1}mc1
  • m@X+1}m+1
  • m@1+X}m!+1
  • m@2pX}m!p2

उम्मीद है आपको आइडिया मिल जाएगा। तर्कों को स्वैप करने के लिए, बस विधि या ऑपरेटर के साथ उपसर्ग करें !


क्या यहां यह ध्यान देने योग्य होगा कि ऑटो-फ़ंक्शंस का उपयोग करके शॉर्टकट के उपयोग के माध्यम से आगे की बचत के लिए भी अनुमति दी जा सकती है? जैसे, m@2pXÃm!p2<space>m!²
झबरा

ओह! मैंने नक्शे में स्ट्रिंग का उपयोग करने के बारे में नहीं सोचा था, यह भी नहीं पता कि यह संभव है। शायद मैं भविष्य में इसके लिए कुछ बाइट्स बचा सकता हूं।
RedClover

अरे @Soaku, मैं किसी तरह याद किया कि आप Japt के साथ जवाब दे रहे हैं, इसलिए मुझे आपको एक देर से स्वागत करने की अनुमति दें! आशा है कि आपने अब तक इसका उपयोग करने का आनंद लिया है। यदि आपके कोई प्रश्न, सुझाव हैं, या बस बात करना चाहते हैं, तो बेझिझक हमें जाप चैट रूम में शामिल हों ( गितुब आमतौर पर पहले दो के लिए काम करता है;))
ETHproductions

3

निहित वैराग्य

जब भी आप Japt में एक नई लाइन शुरू करते हैं तो पिछली लाइन का परिणाम स्वचालित रूप से इनपुट चर ( U- Z) में से एक को सौंपा जाता है , पहली पंक्ति के साथ U, दूसरा V, और इसी तरह।

आइए एक उदाहरण लेते हैं: कहते हैं कि आप काम करने के लिए 2 सरणियों का निर्माण करना चाहते थे, जिनमें से एक संख्या 1-10 और दूसरे में उनके वर्ग हैं। ऐसा करने का लंबा तरीका ऐसा होगा:

U=Aõ V=Um² [do something with the arrays]

हालांकि, स्वचालित चर असाइनमेंट का उपयोग करना:

Aõ
Um²
[do something with the arrays]

हमने वहां 4 बाइट्स बचाए हैं। लेकिन, इस उदाहरण में, हम एक और बाइट को बचा सकते हैं क्योंकि 1-10 का सरणी सौंपा गया है Uऔर Uकुछ परिदृश्यों में छोड़ा जा सकता है :

Aõ
m²
[do something with the arrays]

सावधान

इस टिप से सावधान रहने वाली एक बात यह है कि आप अपने प्रोग्राम में बाद में किसी भी इनपुट चर को अधिलेखित नहीं कर सकते हैं। इसकी शुरुआत में एक या एक से अधिक खाली लाइनों को छोड़कर इससे बचा जा सकता है। निम्न उदाहरण में, 2 सरणियों चर को सौंपा जाएगा Vऔर Wके बजाय Uऔर V:


Aõ
Vm²
[do something with the arrays]

3

जानिए जावास्क्रिप्ट

चूँकि कोई भी Japt कोड JS के रूप में चलाया जाता है, JS संचालकों की अच्छी समझ और अंतर्निहित तरीके Japt कोड के गोल्फिंग टुकड़ों में बहुत मदद करते हैं।

प्रासंगिक जेएस युक्तियाँ

[]Vm@...
...
  • लघु सर्किटिंग
  • संख्या के साथ बंटवारा
    • यह किसी भी विधि के लिए सामान्यीकृत किया जा सकता है जो स्ट्रिंग को स्वीकार करता है लेकिन संख्या नहीं। एक संख्या वहाँ पारित एक स्ट्रिंग के लिए डाली जाएगी, अक्सर एक बाइट (जैसे 0खत्म '0) की बचत ।

प्रासंगिक जेएस निर्मित कार्य

तर्कों को कार्य करने के लिए कौन से मापदंडों को पास किया जाता है, इसे बारीकी से देखें।

  • Array.prototype.map
    • संबंधित Japt तरीके: Array.a/b/m/x/y/í, Number.o/õ,String.m/y/í
  • Array.prototype.reduce
    • संबंधित Japt तरीके: Array.r/å, String.å; के लिए å, 4 तर्क पारित नहीं किया गया है।
  • Array.prototype.some
    • संबंधित जाप विधि: Array.d
  • Array.prototype.every
    • संबंधित जाप विधि: Array.e

स्ट्रिंग विधियों के लिए, यह जानना अच्छा है कि स्ट्रिंग के साथ या बिना gफ्लैग के साथ व्यवहार कैसे अलग होता है ।

  • String.prototype.match
    • संबंधित जाप विधि: String.f/o
  • String.prototype.search
    • संबंधित जाप विधि: String.â
  • String.prototype.replace
    • संबंधित जाप विधि: String.e/k/r
    • के लिए e/r, 2 तर्क के रूप में कार्य करता गुजर ठीक है, और समझने समारोह मापदंडों अत्यधिक प्रोत्साहित किया है।

3

आवश्यकता पड़ने पर कई लाइनों का उपयोग करें

अधिकांश गैर-कठिन चुनौतियों के लिए, आप जट की एक पंक्ति में समाधान व्यक्त कर सकते हैं, अंतर्निहित कार्यों को लागू करने के अनुक्रम के रूप में। लेकिन अधिक जटिल लोगों को कोड के बड़े हिस्से का पुन: निर्माण, पुनरावृत्ति या पुन: उपयोग करने की आवश्यकता होगी। यह वह जगह है जहाँ मल्टी-लाइन प्रोग्रामिंग आती है।

क्लोजिंग परेंस निकालें

कार्य : संख्याओं की एक श्रेणी को देखते हुए, प्रत्येक तत्व को अनुक्रमणिका के साथ जोड़ते हैं, और इसे योग द्वारा क्रमबद्ध करते हैं।

[5,1,17,9,3] => [[5,0],[1,1],[17,4],[9,9],[3,16]] => [[1,1],[5,0],[9,9],[3,16],[17,4]]

एक-पंक्ति समाधान है íUm@Yp2})ñx, लेकिन })दो बाइट्स की लागत है (और कोई एक-बाइट शॉर्टकट नहीं है)। आप })केवल ñxअगली पंक्ति में अनुगामी स्थानांतरित करके निकाल सकते हैं , इसलिए कोड इस तरह दिखता है:

íUm@Yp2
ñx

और जेएस बन जाता है:

U = U.í(U.m(function(X, Y, Z) { return Y.p(2) })); U.ñ("x")

आप यह स्पष्ट रूप से देख सकते हैं कि यह एक-लाइन समाधान के समान है, बस मध्यवर्ती परिणाम को वापस असाइन करना है U

अंतर्निहित तर्कों के साथ पुनर्जीवित

यदि निर्दिष्ट नहीं है, तो पुनरावर्तन फ़ंक्शन निहितार्थ पैरामीटर ßके UVWXYZरूप में लेता है । Uजाहिर है मुख्य इनपुट है, लेकिन आप किसी भी VWXYZअन्य मूल्यों का ट्रैक रखने के लिए उपयोग कर सकते हैं जिनकी आपको आवश्यकता है। उदाहरण के लिए, आप निम्न जैसा कुछ कर सकते हैं:

(modify input and implicit assign to U)
(modify V and implicit assign to V)
(test something and call ß without arguments; U and V are passed automatically)

वैकल्पिक रूप से, यदि आप चाहते हैं कि एक अस्थायी चर है, तो आप इनलाइन असाइनमेंट का उपयोग कर सकते हैं, जैसे (T=...), चर T(0) का उपयोग शायद ही कभी-कभी किया जाता है।

एक लंबे फ़ंक्शन का पुन: उपयोग करें

इसके लिए, मुझे नहीं लगता कि मैं एक अच्छा उदाहरण कार्य कर सकता हूं, इसलिए मैं एकमात्र समाधान का उल्लेख करूंगा जो इस टिप का उपयोग किया गया था , और बस कुछ सामान्य विचारों को रेखांकित करें।

  • किसी फ़ंक्शन का पुन: उपयोग करने के लिए, आपको इसे एक चर में संग्रहीत करने की आवश्यकता है। फ़ंक्शन-ओपनर के साथ एक लाइन शुरू करना {, @या _काम करना। वैकल्पिक रूप से, आप (T=@...})फ़ंक्शन के असाइनमेंट को अधिक जटिल लाइन के अंदर एम्बेड करने के लिए भी कुछ कर सकते हैं ।
  • यह वास्तव में संग्रहीत कार्य को कॉल करने के लिए तुच्छ नहीं है। मान लीजिए Vकि एक फ़ंक्शन है और हम V(U)जेएस में कॉल करना चाहते हैं । VUकाम नहीं करता है क्योंकि यह बस का मतलब है V,UV(Uया तो नहीं; यह है V,(U)। यहां तक ​​कि फ़ंक्शन विधियाँ बहुत उपयोगी नहीं हैं। सबसे अच्छा तरीका हमने पाया है:
    • [U]xV (नक्शा और योग) यदि परिणाम संख्या है
    • UmVअगर Uएक एकल चर है और Vएक स्ट्रिंग लौटाता है, या
    • $V($Uया [U]mV gसामान्य तौर पर।
  • हालांकि, इसके साथ मैपिंग या लूपिंग करना आसान है। किसी सरणी पर मैप करने के लिए, उपयोग करें UmV। संतुष्ट होने वाले पहले पूर्णांक को खोजने के लिए V, का उपयोग करें Va

2

ऑटो-फ़ंक्शंस के साथ मज़ा

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


किसी सरणी में सबसे बड़ा पूर्णांक प्राप्त करें।

मान लें कि हमारे पास [3,1,4,2]वेरिएबल को असाइन किया गया है Uऔर हम इसमें से सबसे बड़ी संख्या प्राप्त करने के लिए चींटी हैं। हम सकता है सरणी छँटाई और उसके बाद पिछले तत्व पॉपिंग से 4 बाइट में यह कार्य करें:

Un o

इसका नकारात्मक पक्ष यह है कि हमने मूल सरणी को संशोधित किया है; Uअब वह है [1,2,3]जो हमेशा वांछनीय नहीं हो सकता है। सौभाग्य से, सरणी को संशोधित किए बिना इसे करने का एक तरीका है जो एक बाइट से भी छोटा है:

Urw

हमने जो किया है वह wविधि का उपयोग करते हुए सरणी को कम कर देता है, जो, जब पूर्णांक पर उपयोग किया जाता है तो पूर्णांक का बड़ा और विधि का तर्क (जैसे, 2w5रिटर्न 5) देता है । तो ऊपर UrÈwYया के बराबर है UrXY{XwY}। ध्यान दें, हालांकि, यह टिप सरणी में सभी पूर्णांकों के मामले में काम नहीं करेगा जो नकारात्मक है।


1
साइड नोट: मैं एक सरणी के न्यूनतम और अधिकतम प्राप्त करने के लिए फ़ंक्शंस जोड़ने की योजना बना रहा हूं, हालांकि केवल v2 में।
ETHproductions

2

जब उपयोग नहीं करना हैí

íएक जोड़ी में निर्मित (या zipएस) दो सरणियों या तारों का एक उपयोगी है , और वैकल्पिक रूप से प्रत्येक जोड़ी को एक फ़ंक्शन के माध्यम से मैप करता है। हालाँकि, यह वर्तमान में कुछ छोटे मुद्दे हैं जब असमान सरणियाँ या तार दिए गए हैं:

  • यदि पहली सरणी में दूसरी से अधिक आइटम हैं, तो दूसरे में गैर-मौजूद आइटम के रूप में दिया जाएगा undefined
  • यदि दूसरे सरणी में पहले से अधिक आइटम हैं, तो यह पहले सरणी के अंत में प्रसंस्करण बंद कर देगा।

इससे यह कहना मुश्किल हो सकता है कि दो असमान तारों की तुलना करें और प्रत्येक जोड़ी से उच्च कोड बिंदु के साथ चार ले जाएं। यदि आप जानते हैं कि Uयह अब लंबा होने जा रहा है, तब भी इस सरल कार्य को हल करने में कई बाइट्स लगते हैं:

UíUç hV @[XY]n o

इसके बजाय आप क्या कर सकते हैं कि दो तारों के एक सरणी के रूप में इनपुट लें, सरणी को साथ स्थानांतरित करें y, और फिर प्रत्येक पंक्ति को सही परिणाम के लिए मैप करें:

Uy m_q n o

यह हमेशा रिक्त स्थान के साथ छोटी स्ट्रिंग को पैड करने का लाभ होता है, जिससे यह दोनों तारों की संपूर्णता के माध्यम से केक का एक टुकड़ा बन जाता है।

वास्तविक जीवन के उदाहरण: 1 , 2


2

ASCII रेंज उत्पन्न करें

अद्यतन: जाप अब ASCII रेंज के लिए एक स्थिर है; के लिए वैकल्पिक मूल्य E, के साथ सुलभ ;। जाप के स्थिरांक पर इस टिप को और देखें ।

हालांकि Japt (अभी तक) ASCII रेंज के लिए बिल्ट-इन नहीं है, आप केवल 5 बाइट्स में वर्णों की एक सरणी उत्पन्न कर सकते हैं:

95odH

कोशिश करो


यह काम किस प्रकार करता है

95oऑटो-फंक्शन[0,95) से गुजरने वाले प्रत्येक तत्व के साथ सीमा बनाता है , जब एक नंबर पर उपयोग किया जाता है, तो उस कोडपॉइंट पर चरित्र देता है। इस मामले में, विधि के तर्क के रूप में एक संख्या पास करें ddH , 32 के लिए जप स्थिरांक, और इसे परिवर्तित होने से पहले मूल संख्या में जोड़ा जाएगा।

जावास्क्रिप्ट में एक बराबर समाधान होगा:

[...Array(95)].map((_,x)=>String.fromCharCode(x+32))

यादृच्छिक वर्ण

ASCII रेंज में एक यादृच्छिक चरित्र प्राप्त करने के लिए, öइसके बजाय का उपयोग करें , जो सीमा से एक यादृच्छिक संख्या लौटाता है [0,X), Xवह संख्या जहां इसे चलाया जाता है।

95ö dH

या, कई यादृच्छिक वर्णों की एक सरणी प्राप्त करने के लिए, आपको एक तर्क के रूप में आवश्यक वर्णों की संख्या पास करें ö। निम्नलिखित 10 वर्ण वापस आएंगे:

95öA mdH

1

अनावश्यक संरचनात्मक चार्ट निकालें

संरचनात्मक वर्ण करके, मेरा मतलब है {}, (), $, यहां तक कि "और `। जब भी वे किसी प्रोग्राम (जैसे UmX{Xc +"; "} -> UmX{Xc +"; ) के अंत में सही होते हैं, तो आप आमतौर पर इन वर्णों को हटा सकते हैं ।

इसके अलावा, आप जब भी वे निम्न स्थानों पर दिखाई देते हैं, तो आप परेंस या स्पेस को हटा सकते हैं:

  • एक अर्धविराम ;(या कार्यक्रम के अंत) के खिलाफ ;
  • के अधिकार के लिए {(और विस्तार, द्वारा @) या [, या के बाईं ]या }

इसके अलावा, अलग-अलग तर्कों के लिए अल्पविराम की बहुत कम आवश्यकता होती है। यदि आप लिखते हैं AB, उदाहरण के लिए, जाप आप का मतलब Aऔर Bअलग से जानता है । आपको केवल दो संख्यात्मक शाब्दिक अलग करने के लिए अल्पविराम की आवश्यकता है, जैसे किUs2,5

अंत में, अगर वहाँ एक है Uएक कार्यक्रम के शुरू में या के बाद एक {या ;एक विधि कॉल (छोटा अक्षर या संबंधित यूनिकोड शॉर्टकट) या किसी भी द्विआधारी ऑपरेटर को छोड़कर द्वारा पीछा किया +और -( *, &, ==, आदि), आप निकाल सकते हैं Uएक को बचाने के लिए बाइट और जाप आपके लिए इसे सम्मिलित करेगा।


मुझे कुछ अन्य उदाहरण मिले हैं, जहां Uकार्यक्रम शुरू होने पर भी यह नहीं किया जा सकता है।
झबरा

@Shaggy ओह ठीक है, यह भी एक के बाद काम करता है {या ;। क्या कोई अन्य व्यक्ति है जिससे आप अवगत हैं? (जब से मैंने इस सुविधा को कोडित किया है, कुछ समय हो चुका है: P)
ETHproductions

मेरे सिर के ऊपर से उनके बारे में सोच भी नहीं सकते; जब मैं कल अपने कंप्यूटर पर वापस आऊंगा तो फिर से इसकी जांच करूंगा।
झबरा

1

एक एरे में अंतिम तत्व को संशोधित करें

कभी-कभी आपको किसी सरणी में अंतिम तत्व को संशोधित करने की आवश्यकता हो सकती है, इसलिए यहां ऐसा करने के एक छोटे तरीके की व्याख्या है। हम [2,4,8,32]इनपुट चर को सौंपे गए सरणी के साथ काम करेंगे Uऔर अंतिम पूर्णांक को विभाजित करेंगे (32 ) को 2 से ।

इसे प्राप्त करने का स्पष्ट तरीका इस 9 बाइट समाधान ( डेमो ) के साथ होगा:

UhJUgJ /2
  • hnxसूचकांक पर तत्व सेट करता nहै x
  • gnतत्व को इंडेक्स पर लौटाता है n
  • J के लिए जाप स्थिरांक है -1 , जो नकारात्मक सूचकांक के लिए जाप के समर्थन के लिए धन्यवाद, हमें एक सरणी में अंतिम तत्व के साथ काम करने की अनुमति देता है; जब आप सरणी के आकार को नहीं जानते तो काम करें।
  • और /2बस 2 से विभाजन है।

इसलिए ऊपर दिए गए -1सरणी में तत्व को सूचकांक में तत्व पर सेट करता -1है 2. 2. या जावास्क्रिप्ट में विभाजित सरणी में सूचकांक में तत्व को U[3]=U[3]/2। जब आप इसे इस तरह लिखते हैं, तो यह इसके बारे में बहुत लंबा-चौड़ा रास्ता लगता है। सौभाग्य से, वहाँ है एक छोटा रास्ता; हम सरणी से अंतिम तत्व को पॉप कर सकते हैं, इसे संशोधित कर सकते हैं और इसे वापस सरणी में धकेल सकते हैं। उन कार्यों में से प्रत्येक को व्यक्तिगत रूप से निष्पादित करने में 9 से अधिक बाइट्स लगेंगे, लेकिन हम उन सभी को केवल 7 बाइट्स के लिए कर सकते हैं, 2 बाइट्स की बचत ( डेमो )

UpUo /2

जेएस के लिए अनुवादित, यह इसके बराबर है:

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