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


46

Pyth एक Python- प्रेरित प्रक्रियात्मक प्रोग्रामिंग भाषा है, जो PPCG उपयोगकर्ता isaacg द्वारा बनाई गई है ।

पायथ में गोल्फिंग के लिए आपके पास क्या सामान्य सुझाव हैं? मैं उन विचारों की तलाश कर रहा हूं जो सामान्य रूप से गोल्फ समस्याओं को कोड करने के लिए लागू किए जा सकते हैं जो कम से कम कुछ हद तक पाइथ के लिए विशिष्ट हैं।

प्रति उत्तर एक टिप, कृपया।

जवाबों:


25

पहले पायथन में कोड लिखें

पाइथ, पाइथन के समान है, इसलिए पाइथन के कार्यक्रमों को पाइथ में अनुवाद करना बहुत आसान है। हालाँकि, क्योंकि पाइथ एक एकल-अक्षर-प्रति-कमांड भाषा है, इसलिए कभी-कभी सीधे पाइथ लिखना मुश्किल होता है। पहले पायथन में लिखकर, एक बार में सोचने के लिए कम है (चूंकि पायथन कोड करने के लिए एक बहुत आसान भाषा है)।


1
आप यह भी उल्लेख कर सकते हैं कि आप अभी भी पायथन में पायथन सिंटैक्स का उपयोग कर सकते हैं, इसलिए आप कार्यक्रम के कुछ हिस्सों को व्यक्तिगत रूप से परिवर्तित कर सकते हैं या यदि आवश्यक हो तो सिर्फ अजगर का उपयोग कर सकते हैं। (जैसा कि आपने यहां किया था )
फ्राईमईएग्गमैन

@ mbomb007 पायथ दुभाषिया डाउनलोड करें और दस्तावेजों के माध्यम से पढ़ें। यह एकमात्र विश्वसनीय तरीका है जिसे मैं पायथ कार्यक्रम लिखने के लिए जानता हूं।
जस्टिन

@ mbomb007 क्षमा करें; इस तरह से मैंने पाइथ (स्रोत कोड को देखकर) लिखना सीखा। मूल रूप से पायथ पर कोई दस्तावेज नहीं है; आपको मूल रूप से परीक्षण और त्रुटि द्वारा वाक्यविन्यास सीखना होगा।
जस्टिन

22

अपने चर जानें

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

सामान्य चर:

b = "\n"
d = " "
k = ""
G = "abcdefghijklmnopqrstuvwxyz"
H = {}                            # (empty dict)
N = '"'
T = 10
Y = []
Z = 0

इनपुट-आरंभिक चर:

Q = eval(input())
z = input()

ध्यान दें कि ये इनिशियलाइज़ेशन किसी दिए गए प्रोग्राम में तभी चलाए जाएंगे जब संबंधित वेरिएबल को एक स्ट्रिंग के बाहर कोड में इस्तेमाल किया गया हो। इसके अलावा, आदेश Q, तब z, यदि दोनों का उपयोग किया जाता है।

पहले उपयोग चर पर असाइनमेंट:

Jऔर K। यदि आप उन दोनों को एक ही मूल्य पर शुरू करना चाहते हैं, तो आप ऐसा अभिव्यक्ति के साथ कर सकते हैं KJ0, जैसे कि लंबाई के बराबर J0K0


18

अपने उत्तरों का परीक्षण करने के लिए नए ऑनलाइन व्याख्याकार का भी उपयोग करें ।

ध्यान दें कि यह नया सॉफ्टवेयर है, इसलिए यह छोटी गाड़ी हो सकती है। कृपया मुझे कोई समस्या बताएं।


2
बहुत बढ़िया! मुझे यह Google के साथ नहीं मिला, बस मुझे जो चाहिए था!
theonlygusti

12

पंक्ति के अंत में स्ट्रिंग्स को अंतिम उद्धरण की आवश्यकता नहीं है। उदाहरण के लिए:

"Hello, world!

पूरी तरह से मान्य हैलो वर्ल्ड प्रोग्राम है।


काफी स्पष्ट रूप से, यह "पायथ प्रोग्रामिंग भाषा" का पहला Google परिणाम है। क्या आपने अपना पेज esolangs पर बनाया है?
Theonlygusti

3
@theonlygusti हां, मैंने किया था। इसके अलावा, यह पिछले अक्टूबर में पहला परिणाम नहीं था।
इसहाक

9

Cआधार संपीड़न के लिए उपयोग करें

यह वास्तव में undocumented है, एक तार पर सी वास्तव में है नहीं प्रत्यक्ष chr -> पूर्णांक लेकिन इसके बजाय आधार 256 -> आधार 10 (जो एक चार तार पर एक ही है)। यह एक इंट को संपीड़ित करने में बेहद सहायक है, हम इस स्क्रिप्ट को संपीड़ित करने के लिए उपयोग कर सकते हैं:

sCMjQ256

लो 12345678910, इसका परिणाम है ßÜ>(वहां कुछ अप्रतिस्पर्धी)।

इसके अलावा, एक सरणी के साथ, आप उन्हें संक्षिप्त कर सकते हैं, और बड़े तार के साथ कोड अंक में परिवर्तित करके और आधार 128 नंबर के रूप में व्यवहार कर सकते हैं।

Cमुझे दिखाने के लिए धन्यवाद @xnor का एक और उपयोग , एक बड़ी संख्या में मनमानी कर रहा है। भोला तरीका है:

^TT

लेकिन हम एक बाइट के साथ बेहतर कर सकते हैं:

CG

यह आधार पूरे वर्णमाला को दर्शाता है। परिणाम 156490583352162063278528710879425690470022892627113539022649722= ~ 1.56e62


अब डॉक्टर को जोड़ा गया।
ईसैक


8

छोटे कार्यात्मक ... इरेट ... कार्यों का उपयोग करें

जब लैम्ब्डा तर्क mapया reduceबस एक ऑपरेशन को तर्कों पर लागू करता है, तो, आप छोटे रूपों का उपयोग कर सकते हैं, Mऔर FfMxके बराबर है mfdx, और fFxजैसा है वैसा ही है .UfbZx। उदाहरण के लिए, मान लें कि हम इनपुट के रूप में संख्याओं की एक सूची लेते हैं और प्रत्येक में वृद्धि करते हैं। पहला दृष्टिकोण हो सकता है:

mhdQ

हालाँकि, इसे फिर से लिखा जा सकता है:

hMQ

इसी तरह की बात इसके reduceसाथ लागू होती है F। एक उदाहरण के रूप में, कहें कि पूर्णांकों की सूची के उत्पाद की गणना करने के लिए एक चुनौती है। फिर से, पहली कोशिश हो सकती है:

.U*bZQ

हालाँकि, इसके साथ F, इसे छोटा किया जा सकता है:

*FQ

तीन बाइट्स बंद करता है ... बुरा नहीं है!


और आप की जरूरत नहीं है Q, क्योंकि यह पूरक है जब फ़ंक्शन किसी इनपुट को याद कर रहा है, तो इसे बना रहा है*F
स्टेन स्ट्रम

7

अपने पाइथ कार्यान्वयन को अद्यतित रखें।

मैं नियमित रूप से पाइथ में सुधार कर रहा हूं, कम उपयोगी सुविधाओं को हटा रहा हूं और अधिक उपयोगी जोड़ रहा हूं, इसलिए जो नया है उसके लिए नजर रखें और कार्यान्वयन की अपनी प्रति नियमित रूप से अपडेट करें।

कुछ हाल ही में जोड़ी गई विशेषताएं: (10/19/14 के अनुसार)

y: *2संख्या के अनुसार कार्य करता है, और तार और सूचियों पर सभी सबसेट की सूची के रूप में। उदाहरण के लिए:

pyth -c 'y"abc'
['', 'a', 'b', 'c', 'ab', 'ac', 'bc', 'abc']

f: fसामान्य रूप से फ़िल्टर कमांड है। अब, जब एक संख्या को इसके दूसरे तर्क के रूप में कहा जाता है, तो यह उस क्रम से शुरू होने वाले अनंत अनुक्रम को फ़िल्टर करेगा और लोगों द्वारा गिना जाएगा, फिर परिणामस्वरूप अनुक्रम के पहले तत्व को वापस करेगा।

उदाहरण के लिए, यहां एक बिलियन से अधिक छोटे प्राइम को खोजने के लिए कोड है:

pyth -c 'f!tPT^T9'
1000000007

वे उपयोगी परिवर्धन की तरह दिखते हैं, लेकिन आप पुराने के बजाय क्या उपयोग कर सकते हैं yz? mvdczdसबसे छोटा रास्ता नहीं हो सकता ...
डेनिस

1
@ डेनिस मैंने पुराने को बाहर फेंक दिया yक्योंकि मुझे नहीं लगता कि अजगर को कई सुपर-आसानी से पार्स किए गए इनपुट फॉर्मेट की जरूरत है, सिर्फ एक, जैसे कि पायथन प्रारूप। तो, हां, मुझे लगता है कि mvdczdदुर्भाग्य से करना होगा।
isaacg

@ डेनिस प्रॉब्लम सॉल्व हो गई, बस इसे r'स्ट्रिंग प्रोसेसिंग सूट' में जोड़ दिया ।
isaacg

rबहुत उपयोगी लगता है।
डेनिस

@isaacg क्षमा करें यदि यह ऑफ-टॉपिक है, लेकिन मैं सोच रहा हूं कि @एक कारक कैलकुलेटर बनाने के लिए Fdr1 + 1 @ Q2Iq% Qd0d में रूट ऑपरेशन का उपयोग कैसे किया जाए। जब मैं इसका उपयोग करने की कोशिश करता हूं, तो यह indexअर्थ की जगह चूक जाता है। क्या इस व्यवहार के आसपास कोई रास्ता है?
स्टारडस्टगोगेटा

5

कार्यों में नामित तर्क (अब समर्थित नहीं)

कभी-कभी, फ़ंक्शंस में डिफ़ॉल्ट मान गोल्फिंग के लिए उपयोगी हो सकता है। पायथ वास्तव में इसका समर्थन करता है (मेरे आश्चर्य को बहुत)। उदाहरण के लिए:

DC=Z1RZ;C;C5

प्रिंट होगा:

1
5

ऐसा करते समय पात्रों को बचाने के लिए आप J और K का उपयोग कर सकते हैं:

DgJ1K1R+JKg;g2;g2 3

प्रिंट:

2
3
5

यह आमतौर पर पुनरावर्ती एल्गोरिदम के लिए उपयोगी है।

यह अब काम नहीं करता है, लेकिन मैंने इसे यहां छोड़ दिया है अगर कोई पाइथ के पुराने संस्करण का उपयोग करके गोल्फ करना चाहता है।


16
वाह - यहां तक ​​कि मुझे एहसास नहीं हुआ कि पायथ ने इसका समर्थन किया है, और मैंने भाषा लिखी है!
isaacg

दुर्भाग्य से, यह अब पायथ के अधिक हाल के संस्करणों में काम नहीं करता है।
ईसैक

क्या इस टिप को अन्य आउट-ऑफ-डेट सुझावों में से एक की तरह हटा दिया जाना चाहिए? यदि नहीं, तो शायद यह चिन्हित किया जाना चाहिए कि यह टिप किस संस्करण पर लागू होती है।
mbomb007

@ mbomb007 मुझे संस्करण खोजने के लिए अर्थ दिया गया है, लेकिन मैं बहुत आलसी हो गया हूं। बीमार इसे हटा दें यदि आपको लगता है कि यह उस तरह से बेहतर है जब तक कि मैं इसे नहीं ढूंढता।
FryAmTheEggman

@FryAmTheEggman मुझे लगता है कि यह आपके ऊपर है, क्योंकि यह शीर्षक में कहता है कि यह समर्थित नहीं है।
mbomb007

5

के साथ 2 तत्व tuples खोलना F

मान लें कि आपके पास 2 तत्व टपल हैं, J = (a, b)और आप चाहते हैं r(a,b), कुछ 2 एरिटी फंक्शन r के लिए।

ऐसा करने का भोला तरीका है rhJeJ

ऐसा करने का फैंसी तरीका है r.*J, अनपैक ऑपरेटर का उपयोग करना।

ऐसा करने के लिए वास्तव में फैंसी तरीका है rFJ, गुना ऑपरेटर का उपयोग करना।


क्या अभी भी इसके लिए उपयोग करना संभव .uहै? .uअब संचयी कम हो रहा है।
शुक्र

.u ->। * यह एक परिवर्तन था जो कुछ समय पहले बनाया गया था, लेकिन कभी भी अपडेट नहीं किया गया था।
isaacg

4

छोटे अंकगणितीय कार्यों का उपयोग करें

h: किसी सूची के पहले तत्व को वापस करने के अलावा, यह एक संख्या बढ़ाता है, उदाहरण के लिए hTमूल्यांकन करता है 11। से छोटा +1T

t: यह एक संख्या (सूची की पूंछ वापस करने के अलावा) घटाता है, उदाहरण के लिए tTमूल्यांकन करता है 9। से छोटा -T1

y: यह एक संख्या को दोगुना करता है, उदाहरण के yTलिए 20, इससे कम *T2या अधिक का मूल्यांकन करता है +TT


4

उपयोग mapसूची बनाने के लिए

यह मूल रूप से अजगर की फैंसी सूची की समझ के बराबर है। मौजूदा सूची या श्रेणी का उपयोग करें और प्रत्येक मान को मैप करने के लिए, भले ही मान मायने नहीं रखता हो।

दो उदाहरण:

  • 8 शून्य की एक सूची बनाएँ।

    mZ8 के बजाय *8]Z

  • 0 और 9 के बीच 5 यादृच्छिक संख्याओं की सूची बनाएँ:

    mOT5 के बजाय V5~Y]OT)

    दूसरा स्वचालित रूप से सूची को असाइन करता है Y(वास्तव में यह वाई को जोड़ता है), लेकिन यहां तक =YmOTU5कि कम है।


4

ईओएफ में इंप्लांट क्यू

यह आज की तरह एक नया बदलाव है।

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

इसे लिखने का सबसे छोटा तरीका इस प्रकार है:

@,/Q2h*3QQ

हालाँकि, चूंकि Qफ़ाइल के अंत में s निहित हैं, हम बस लिख सकते हैं:

@,/Q2h*3

2 बाइट्स बचा रहा है।

ध्यान दें कि गैर-आवश्यक तर्कों के साथ कार्य करने वालों के पास वे तर्क भरे c"12 12"नहीं होंगे । उदाहरण के लिए, कोई निहितार्थ नहीं होगा Q, क्योंकि cकेवल इस तर्क की आवश्यकता होती है।


3

किसी फ़ंक्शन को बार-बार लागू करने के लिए कम का उपयोग करें।

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

@,/Q2h*Q3Q

इस 100 बार लागू करने और परिणाम प्रिंट करने का सबसे स्पष्ट तरीका होगा

V100=Q@,/Q2h*Q3Q;Q

हर बार क्यू के मूल्य को अपडेट करते हुए 100 बार लूप करें, फिर लूप को समाप्त करें और क्यू को प्रिंट करें।

इसके बजाय, हम एक कम फ़ंक्शन का उपयोग कर सकते हैं जो अनुक्रम चर ( H) को अनदेखा करता है ।

u@,/G2h*G3GU100Q

यह 2 अक्षर छोटा है। यदि आप अनुक्रम में तत्व हैं तो यह कई बार छोटा होता है क्योंकि आप कई बार लूप करने की कोशिश कर रहे हैं।


3

आम तौर पर किसी के लिए छोटे विकल्प हैं

जब आप यह जानना चाहते हैं कि क्या कोई अनुक्रम किसी स्थिति को संतुष्ट करता है, तो आप आमतौर पर उपयोग करेंगे .Em। उदाहरण के लिए, यदि आप यह जानना चाहते हैं कि क्या किसी सूची में 5 से अधिक-या-बराबर हैं:

.Emgd5Q

लेकिन, अगर इसे केवल सच / गलत होने की जरूरत है, न कि सच / झूठ की, smतो काम करेगा क्योंकि राशि बूल पर काम करती है।

smgd5Q

हम filter के साथ एक छोटा भी कर सकते हैं :

fgT5Q

आखिरी हालांकि वास्तव में बदसूरत दिखता है।

के लिए .Aकरेंगे, केवल एक चीज मैं के बारे में सोच सकते हैं एक एक चार से अधिक को बचाने के लिए विपरीत हालत उपयोग करें और यह नकारना है .Am:

!f<T5Q

3

सभी नियंत्रण प्रवाह विकल्पों को देखें

लूप्स:

F: पाश के लिए। बिल्कुल पाइथन की तरह।

V: एक सीमा पर लूप के लिए। न तो चर और न ही सीमा दी जानी चाहिए, इसलिए 2 वर्ण कम।

W: घुमाव के दौरान। बिल्कुल पाइथन की तरह।

#: अनंत जबकि लूप। त्रुटि या स्पष्ट विराम के साथ बच। केवल try ... exceptपायथ में अब सुविधा है।

कार्य:

D: सामान्य परिभाषित। ठीक अजगर की तरह।

L: 1 तर्क, कोई असाइनमेंट फंक्शन, जैसे पायथन का लैम्ब्डा, लेकिन नाम। फ़ंक्शन नाम, चर नाम और वापसी (R ) की आवश्यकता नहीं है, इसलिए 3 वर्ण छोटे।

कार्यात्मक प्रोग्रामिंग:

f: फ़िल्टर - इनपुट अनुक्रम के तत्वों का चयन करें जो इनपुट लैम्ब्डा पर सच्चाई लौटाते हैं।

f: पहले पूर्णांक इनपुट के बराबर या उससे अधिक है जो सत्य फ़िल्टर परिणाम देता है।

m: मैप - इनपुट लैम्ब्डा का उपयोग करके इनपुट अनुक्रम के तत्वों को बदलना।

u: कमी - इनपुट लैम्बडा पर इनपुट इनपुट अनुक्रम, तीसरे तर्क के लिए संचायक को आरंभीकृत करना।

o: आदेश - इनपुट लैम्ब्डा का उपयोग कर इनपुट अनुक्रम के पुराने तत्वों को कुंजी के रूप में।

आमतौर पर, किसी भी समस्या के लिए कई संभावनाएं होंगी, और केवल उनमें से प्रत्येक के साथ परीक्षण समाधान लिखकर आप यह पता लगा सकते हैं कि कौन सा सबसे छोटा है।


.xहाल ही में कोशिशों को छोड़कर ब्लॉकों के लिए इस्तेमाल किया जा सकता है।
mbomb007

@ mbomb007 ब्लॉक को छोड़कर उपेक्षा का एक तरीका है, मेरा मतलब है कि क्या खाली छोड़ा जा सकता है? पूर्व के लिए .x{some_statments}{except_block - can this be empty}:।
गुरुपाद ममदापुर

@GurupadMamadapur # ... Bका उपयोग इस तरह से किया जा सकता है यदि आप एक अभिव्यक्ति के अंदर नहीं हैं
isaacg

3

एक सूची में दो तत्वों को स्विच करना

दो तत्वों को बदलना काफी महंगा काम हो सकता है। तो यहाँ दो दृष्टिकोण आप उपयोग करना चाहते हैं।

Tmp- चर दृष्टिकोण

तैयारी में हम एक सूची को परिभाषित करते हैं Yऔर इसे कुछ संख्याओं से भरते हैं। लक्ष्य दूसरा और तीसरा तत्व स्विच करना है।

=Y[1 3 5 3 6 7)AGH,1 2

हम केवल tmp वैरिएबल असाइन J = Q[G]करते हैं, पहली सूची असाइनमेंट Y[G] = Y[H]और फिर दूसरा अंतिम असाइनमेंट करते हैं Y[H] = J। यहां ट्रिक दो लिस्ट असाइनमेंट को नेस्ट करने के लिए है, इसलिए आपको प्रिंटिंग को दबाने की जरूरत नहीं है और दो बार रेफरेंस का इस्तेमाल नहीं करना है Y

J@YGXXYG@YHHJ

के बजाय

J@YG XYG@YHXYHJ

अनुवाद करने का तरीका

यदि तत्व, जिसे आप स्विच करना चाहते हैं, सूची में अद्वितीय हैं, तो इस दृष्टिकोण का उपयोग करें। यह वास्तव में कम है। तो इस बार हम पहले और तीसरे तत्व (मान 1और 5अद्वितीय हैं) पर स्विच करते हैं।

=Y[1 3 5 3 6 7)K,Z2

यह सूची की अनुवाद कार्यक्षमता का उपयोग करता है:

XYm@YdK)

यह अनुवाद हर तत्व Y[0]को Y[1]और हर के Y[1]साथ बदलता है Y[0]। इसलिए यदि मूल्य अद्वितीय नहीं हैं, तो बुरी चीजें खुश हो जाती हैं। उदाहरण के लिए में K,1 2परिणाम[1, 5, 3, 5, 6, 7]

ध्यान दें कि समापन कोष्ठक वैकल्पिक है, यदि कथन आपके कोड में अंतिम है।


3

के साथ डिबगिंग <newline>

यदि आपका कोड एक अनिवार्य प्रोग्रामिंग शैली में लिखा गया है, तो डिबग करना काफी आसान है, क्योंकि आप आसानी से मध्यवर्ती परिणाम प्रिंट कर सकते हैं। ( पर्मलिंक )

FN.:Q2                loop
      =Y+-Y-FNhN      some random command
                Y     print intermediate result
                 ;Y   end for loop and print result

लेकिन पायथ कार्यक्रमों की एक बड़ी मात्रा कार्यात्मक प्रोग्रामिंग के तत्वों का उपयोग करती है, जैसे मानचित्र, फ़िल्टर और कम, जो इस तरह के एक साधारण मुद्रण की अनुमति नहीं देते हैं। लेकिन यह अभी भी संभव है, का उपयोग कर\n कमांड ।

समान कोड का उपयोग करना u(कम करना) होगा: ( पर्मलिंक )

u        .:Q2Y   reduce .:Q2, start with G = Y
 +-G-FHhH        random command

यदि आप मध्यवर्ती मूल्यों को प्रिंट करना चाहते हैं, तो बस सम्मिलित करें \n: ( पर्मलिंक )

u         .:Q2Y   reduce
   \nG             print(G)
 +-\nG-FHhH        random command

\naaएक नई रेखा पर प्रिंट करता है और लौटता है a। तो आप कार्यक्रम की कार्यक्षमता को बदलने की चिंता किए बिना इसे कहीं भी सम्मिलित कर सकते हैं।


आप आजकल इसके लिए न्यूलाइन का उपयोग कर सकते हैं, जो एक न्यूलाइन को भी प्रिंट करता है।
पुरकाकूदरी

@ Pietu1998 हां, मैं इसका हर समय उपयोग करता हूं। पोस्ट अपडेट करने का समय।
जकूबे

3

अधिकतम दो पूर्णांकों का पता लगाना

g#

उदाहरण के लिए, मान लीजिए कि आपके पास है J=5और K=12। फिर g#JK= 12, और g#KJ= 12 भी।

यह @ Pietu1998 द्वारा खोजा गया था, जिन्होंने इसे इस तरह रखा था:

यकीन नहीं होता कि किसी को पहले ही मिल गया है, लेकिन 2 बाइट्स में अधिकतम (ए, बी) करने का एक अच्छा तरीका है, इसके लिए 3 का उपयोग करने की आवश्यकता नहीं है eS,ABg#ABवही काम करता है। (यह बहुत अक्षम है, हालांकि, चूंकि यह अधिकतम (1, ए-बी + 1) बार घटता है। एक अनुकूलन को बी के रूप में बड़ी होने की संभावना डालनी है।)


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

2

पायथ की joinविधि

joinअजगर में विधि के बाद से यह केवल तार जुड़ जाता है, एक छोटा सा कष्टप्रद अक्सर हो सकता है। पायथस joinअधिक उदार है। यह सभी ऑब्जेक्ट्स को डिफ़ॉल्ट रूप से स्ट्रिंग्स में बदल देता है।

उदाहरण के लिए jkUTदेता है 0123456789या jb["abc"4,5\f]7देता है

abc
4
(5, 'f')
[7]

हाल ही में, और भी अधिक ट्रांसफ़ॉर्मिंग-इन-स्ट्रिंग कार्यक्षमता को जोड़ा गया था - पहला तर्क एक स्ट्रिंग के लिए भी मजबूर है, जैसे j2\a\b->"a2b"
isaacg

1

यह बताने पर कि कोई संख्या पूर्ण संख्या है

एक साफ-सुथरी चाल Iबताई जा रही है कि एक संख्या पूरी संख्या है जैसे कि

sI

यह जांचता है कि जब आप इसे काटते हैं तो नंबर नहीं बदलता है, जो कि यह नहीं है अगर यह पूरी संख्या है।

उदाहरण के लिए, आप इसे एक पूर्ण वर्ग जांच के रूप में उपयोग कर सकते हैं:

sI@Q2

1

पैक्ड पाइथ का इस्तेमाल करें

पैक्ड पाइथ एक नई "प्रोग्रामिंग लैंग्वेज" है, जो पाइथ के बिल्कुल समान है, सिवाय इसके कि यह प्रति कैरेक्टर 8 बिट्स के बजाय 7 बिट्स प्रति कैरेक्टर का उपयोग करता है।

इसका उपयोग करने के लिए, अजगर भंडार को क्लोन करें । फ़ाइल packed-pyth.pyदुभाषिया है।

अपने कोड है कहो "Hello, world!

सबसे पहले, इसे एक फ़ाइल में रखें: echo -n '"Hello, world!' > code.pyth

इसके बाद, Pyth कोड को Packed Pyth फाइल में पैक करें: python3 packed-pyth.py -p code.pyth code.ppyth

अंत में, पैक्ड पायथ कोड चलाएँ: python3 packed-pyth.py code.ppyth

कोड चलाते समय, आप -dध्वज को यह देखने के लिए प्रदान कर सकते हैं कि वास्तव में चलाया जा रहा Pyth कोड क्या है, और आप कोड वाली फाइल के बाद दूसरी कमांड लाइन तर्क के रूप में इनपुट प्रदान कर सकते हैं।

उल्टा:

  • कोड 1/8 से छोटा है।

नकारात्मक पहलू:

  • केवल ASCII।

  • कोई इंटरेक्टिव इनपुट नहीं।

  • पूर्ण डिबग विकल्प उपलब्ध नहीं हैं।

  • इससे भी बदतर त्रुटि रिपोर्टिंग।


1
जैसे हमने सुरक्षित मोड चीज़ के लिए किया था, क्या हम इसे ध्वज में स्थानांतरित कर सकते हैं?
माल्टीसेन

यह भयानक btw है: D
Maltysen

@ माल्टीसेन मुझे लगता है कि एक-एक करके बाइट स्कोर बढ़ेगा।
isaacg

क्या अजगर को आगे पैक नहीं किया जा सकता क्योंकि यह केवल मुद्रण योग्य ASCII का उपयोग करता है?
lirtosiast

1

का उपयोग करके विभाज्यता परीक्षण Iऔर जीसीडी

अस्वीकरण: यह केवल गैर-नकारात्मक पूर्णांक के लिए काम करता है।

यह जांचने के लिए कि क्या दो गैर-नकारात्मक पूर्णांक विभाज्य हैं, आप निम्न कार्य कर सकते हैं:

iI<divisor><dividend>

यदि a , b और ≥ b then 0 से विभाज्य है , तो gcd (a, b) = b

यह जरूरी नहीं कि बाइट्स बचाएं !%<dividend><divisor>, लेकिन यह आपके लिए बचत ला सकता है, क्योंकि:

  • जब आप Qलाभांश के साथ काम कर रहे हों, तो आप पाइथ प्रोग्राम (जैसे गिरना ) के अंत में निहित सामान को ट्विक कर सकते हैं।
  • आप इसे एक के रूप में उपयोग कर सकते हैं <pfn>, क्योंकि यह अपने आप में एक फ़ंक्शन है।
  • यह द्वारा modulo संभालती है 0

कोशिश करो!


एक और लाभ: iIअपने आप में एक फ़ंक्शन है, जबकि !%ऐसा नहीं है, इसलिए आप इसे उपसर्ग फ़ंक्शन के रूप में उपयोग कर सकते हैं।
एरिक आउटफोलर

@EriktheOutgolfer धन्यवाद, फायदे की सूची में जोड़ा :)
मिस्टर एक्सकोडर

0

अपने लिए लागू फंक्शन के लिए वैरिएबल असाइन करना

यदि आपके पास एरिटी 1 का एक फ़ंक्शन है, और इसे एक वैरिएबल में लागू करना चाहते हैं और खुद पर लागू होते हैं, तो आप निम्न सिंटैक्स का उपयोग कर सकते हैं:

=<function><variable>

के बजाय:

=<variable><function><variable>

उदाहरण के लिए, यदि आप चर को बढ़ाना चाहते हैं, तो आप यह Zकर सकते हैं:

=hZ

जो एक बाइट को बचाता है =ZhZ

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