> <> (मछली) में गोल्फ के लिए युक्तियाँ


14

जब से मैं देख रहा है और अधिक > <> प्रस्तुतियाँ हाल ही में चारों ओर चल, मैंने सोचा कि यह एक सुझाव दिए गए पेज के लिए एक अच्छा विचार हो सकता है।

कृपया प्रति पोस्ट एक टिप से चिपके रहें, जब तक कि वे निकट से संबंधित न हों।

आधिकारिक पायथन दुभाषिया

ऑनलाइन दुभाषिया (कुछ कीड़े मौजूद हैं, लेकिन ज्यादातर मामलों के लिए अच्छा है)


9
मुझे सिर्फ इसोल पेज को देखते हुए एहसास हुआ:> <> के निर्माता का एक नाम है जो "हार्पून" की तरह लग सकता है।
mbomb007

मैं मछली में एक नई लाइन कैसे प्रिंट कर सकता हूं?
कैप्टन मैन

@CaptainMan आप कोड अंकों के साथ आउटपुट कर सकते हैं o, और चूंकि newline \nASCII 10 है आप कर सकते हैं ao
Sp3000

@ धन्यवाद, मैं CRइसके बजाय कोशिश कर रहा था LFऔर dइसके बजाय जोर दे रहा था a
कप्तान मैन

जवाबों:


5

0 के खिलाफ जाँच हो रही है

आमतौर पर बाइट के ?!बजाय उपयोग करने से 0=?बाइट बचती है।

हालांकि, बस एक मानक ?कभी-कभी बेहतर हो सकता है यदि आप थोड़ा सा पुनर्गठन कर सकते हैं

?!vA
  B

बनाम

?vB
 A

4

EOF के लिए जाँच कर रहा है

जब EOF तक पहुँच जाता है, तो> <> स्टैक पर -1 धकेलता है, जिसे दो तरीकों में से एक में जांचा जा सकता है:

:0(?
:1+?

ईओएफ के लिए जाँच के प्रयोजनों के लिए, ये दोनों नकारात्मक हैं, इसलिए जो एक अधिक लाभदायक है वह आपके कार्यक्रम की संरचना पर निर्भर करता है।


3

नई लाइनें शुरू करने के लिए चक्कर लगाएं

एक नई लाइन शुरू करने का मतलब कभी-कभी अगली पंक्ति में बहुत सारे प्रमुख व्हाट्सएप को बर्बाद करना है। ऐसी स्थिति में, कूदना उपयोगी हो सकता है।

उदाहरण के लिए,

[lots of code here]>[loop body]v
                   ^ ......... <

एक लाइन पर फिट करने के लिए बनाया जा सकता है जैसे:

[lots of code here][loop body][jump]

एक व्यावहारिक उदाहरण के लिए, यहाँ एक लाइन पर हैलो वर्ल्ड कार्यक्रम है:

"!dlroW ,olleH"l?!;oe0.

3

इनपुट को सरल बनाने के लिए मापांक का उपयोग करना

यह एक टिप का बहुत सरल हो सकता है, इसलिए यदि यह है तो मैं इसे बदल दूंगा या इसे हटा दूंगा।

मान लें कि आप दो वर्णों का इनपुट लेना चाहते हैं, "a" और "b" और क्रमशः 1, और 2 वापस करें। आप शायद इसके लिए सशर्त का उपयोग करेंगे, क्योंकि यह सबसे अधिक समझ में आता है, और मैं इस विशिष्ट उदाहरण के लिए अधिक संघनित रूप का उपयोग करूंगा।

i:"a")+1+n

यह देखने के लिए जाँच करता है कि इनपुट "a" से अधिक है और 1. जोड़ता है "चूंकि" a "0 और" b "1 होगा, यह 1 और 2 देगा। यह कार्य बहुत अच्छी तरह से करता है, लेकिन हमारे मामले में आदानों, हम आगे भी जा सकते हैं।

i:3%n

Mod 3, 97 में, जो "a" s संख्यात्मक समतुल्य है, 1 बन जाता है, और 98, जो "b" s है, बन जाता है। 2. दो अलग-अलग संख्याओं के लिए, एक ऐसे मॉड की गारंटी दी जाती है जो दोनों के लिए अद्वितीय परिणाम देता है। दो से अधिक के लिए, एक ऐसा माध्यम है जो अद्वितीय परिणाम देता है, लेकिन मेरे पास सबसे सरल तरीके से सबसे छोटा खोजने के लिए गणितीय कौशल नहीं है (उदाहरण के लिए यदि आपके पास सेट {100,101,102,103} है, तो मोड 104 के लिए अद्वितीय परिणाम देगा इसमें प्रत्येक मूल्य लेकिन बहुत सहायक फैशन में नहीं)। हालाँकि, ज्यादातर मामलों में, इनपुट को कुछ वर्णानुक्रमिक वर्णों तक ही सीमित रखने के कारण, आप अक्सर एक मॉड खोज सकते हैं जो काम करता है।

सबसे छोटे मापांक को खोजने के लिए जो दो संख्याओं के लिए अद्वितीय परिणाम देता है, और, और, बी, आप निम्नानुसार करते हैं। A और b ( |a - b|) के अंतर का पूर्ण मान लें और सबसे छोटी संख्या, n खोजें, जो इसे विभाजित नहीं करता है। उदाहरण के लिए 97 और 98, |98 - 97| = 1और इसलिए 2 सबसे छोटा मॉड होगा (लेकिन हमारे परीक्षण कार्यक्रम के लिए, यह 97 के लिए 1 और 98 के लिए 0 देता है, इसलिए मॉड 3 बेहतर है)।


3

सशर्त के रूप में कूदता है

कुछ समय आप> <> में लेखन कार्यक्रमों को गति देंगे, जिसके लिए आपको अलग-अलग इनपुट प्राप्त करने की आवश्यकता है। आमतौर पर, आप इसे ?पार्स करने के लिए सशर्त ( ) और दिशा परिवर्तक का उपयोग करेंगे । कुछ मामलों में, यह ठीक काम करता है (विशेषकर जब संभाल करने के लिए कम प्रकार के इनपुट होते हैं), लेकिन कभी-कभी आप कुछ इस तरह से देखते हैं। (इस तथ्य को अनदेखा करें कि यह कोड कुछ अन्य ट्रिक का उपयोग करके कम किया जा सकता है, यह सिर्फ प्रदर्शन के लिए है)

i:"a"=?v:"b"=?v"c"=?v>
  .00n1< .00n2<.00n3<

हालांकि यह ठीक है, इसके पास कुछ व्हाट्सएप हैं (जो मैं व्यक्तिगत रूप से कभी भी देखना पसंद नहीं करता) और इसमें बहुत दोहराव ( =?vऔर .00n) है। इसके बजाय, आप अपनी शर्तों के रूप में एक छलांग और विभिन्न लाइनों का उपयोग कर सकते हैं। यहाँ एक उदाहरण है:

i:"a")$"b")+1+0$.>
v1
v2
v3
<.00n

यह 10 बाइट्स को बंद कर देता है। यहाँ क्या हो रहा है:

i: हम एक बार इनपुट को डुप्लिकेट करते हैं ताकि हम दो बार इसका मूल्यांकन कर सकें

"a")$"b")+यह अपनी तरह का टिप हो सकता है, लेकिन मैं यहां क्या कर रहा हूं यह देखने के लिए जांच कर रहा है कि क्या इनपुट "ए" से अधिक है और फिर अगर यह चरित्र "बी" से अधिक है और परिणाम जोड़ रहा है। "ए," के लिए यह 0, "बी", 1 और "सी" 2 के लिए होगा।

1+0$.यहां जादू पैदा होता है; हम इस पिछले सरलीकरण का परिणाम लेते हैं और 1 जोड़ते हैं (1 के लिए "ए", 2 के लिए "बी", 3 के लिए "सी"), फिर 0 को पुश करें और मूल्यों को स्वैप करें। जब हम छलांग पर पहुँचते हैं, तो हम उन वर्णों को दिए गए मान के अनुरूप लाइन में चले जाएँगे (जैसे "a" के लिए पंक्ति 1)। एनबी लाइन 0 कार्यक्रम में सबसे ऊपर है।


1

लेखन कोड जो दो तरह से चल सकता है

!जब आप चाहते हैं कि आपका कोड आगे और पीछे की तरफ (या ऊपर और नीचे) चलाया जाए तो ट्रम्पोलाइन ( ) बहुत काम का है। ये परिदृश्य कुछ हद तक असंभावित हैं, लेकिन पैलिंड्रोम या इसी तरह की चुनौतियों के लिए यह टिप उपयोगी हो सकता है।

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

?!v80.>ao (मान लें कि मैं पहले एक नई रूपरेखा छापना चाहता हूं)

लेकिन अगर हम जिस कोड को एक बार चलाना चाहते हैं (कोड पास्ट >) उसे 16 अक्षरों से अधिक लंबा बनाता है, तो हम तीन अक्षरों में जंप का उपयोग नहीं कर सकते। हालाँकि, यह एक उदाहरण है जहाँ आगे और पीछे चलाने के लिए यह तुच्छ है ...

?!v!?<>ao>

आगे की ओर जाने पर, हम एक नई लाइन प्रिंट करते हैं और फिर हिट करते हैं ?!vजो मान को त्यागता है यदि यह 0 नहीं है, तो ट्रम्पोलिन के कारण हम अगले को छोड़ देते ?हैं और पीछे की तरफ जाते हैं। एक ही बात होती है और लूप तब तक जारी रहता है जब तक हम 0 से नहीं टकराते।

यह एक अजीब तरह से विशिष्ट उदाहरण है, लेकिन कुछ (शायद कई नहीं) अनुप्रयोग हैं।

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